diff --git a/OpenBoard.pro b/OpenBoard.pro
index d44699ac..af3a0901 100644
--- a/OpenBoard.pro
+++ b/OpenBoard.pro
@@ -11,7 +11,7 @@ CONFIG += debug_and_release \
VERSION_MAJ = 1
VERSION_MIN = 5
VERSION_PATCH = 4
-VERSION_TYPE = a # a = alpha, b = beta, rc = release candidate, r = release, other => error
+VERSION_TYPE = r # a = alpha, b = beta, rc = release candidate, r = release, other => error
VERSION_BUILD = 0
VERSION = "$${VERSION_MAJ}.$${VERSION_MIN}.$${VERSION_PATCH}-$${VERSION_TYPE}.$${VERSION_BUILD}"
diff --git a/release_scripts/osx/release.macx.sh b/release_scripts/osx/release.macx.sh
index 08774744..5e5fc161 100755
--- a/release_scripts/osx/release.macx.sh
+++ b/release_scripts/osx/release.macx.sh
@@ -19,7 +19,7 @@ PROJECT_ROOT="$SCRIPT_PATH/../.."
APPLICATION_NAME="OpenBoard"
-BASE_QT_DIR=~/Qt/5.9.8/clang_64
+BASE_QT_DIR=~/qt/5.5/clang_64
# Executables
QMAKE=$BASE_QT_DIR/bin/qmake
MACDEPLOYQT=$BASE_QT_DIR/bin/macdeployqt
@@ -201,30 +201,30 @@ $MACDEPLOYQT "`pwd`/$APPLICATION_NAME.app"
cd -
# make sure libs installed via homebrew 2.0 refer to in-app libs
-notify "relinking libs ..."
+# notify "relinking libs ..."
# libavformat
-install_name_tool "$APP/Contents/Frameworks/libavformat.58.dylib" -change /usr/local/Cellar/ffmpeg/4.1.4_2/lib/libavcodec.58.dylib @executable_path/../Frameworks/libavcodec.58.dylib
-install_name_tool "$APP/Contents/Frameworks/libavformat.58.dylib" -change /usr/local/Cellar/ffmpeg/4.1.4_2/lib/libswresample.3.dylib @executable_path/../Frameworks/libswresample.3.dylib
-install_name_tool "$APP/Contents/Frameworks/libavformat.58.dylib" -change /usr/local/Cellar/ffmpeg/4.1.4_2/lib/libavutil.56.dylib @executable_path/../Frameworks/libavutil.56.dylib
+# install_name_tool "$APP/Contents/Frameworks/libavformat.58.dylib" -change /usr/local/Cellar/ffmpeg/4.1.4_2/lib/libavcodec.58.dylib @executable_path/../Frameworks/libavcodec.58.dylib
+# install_name_tool "$APP/Contents/Frameworks/libavformat.58.dylib" -change /usr/local/Cellar/ffmpeg/4.1.4_2/lib/libswresample.3.dylib @executable_path/../Frameworks/libswresample.3.dylib
+# install_name_tool "$APP/Contents/Frameworks/libavformat.58.dylib" -change /usr/local/Cellar/ffmpeg/4.1.4_2/lib/libavutil.56.dylib @executable_path/../Frameworks/libavutil.56.dylib
# libavcodec
-install_name_tool "$APP/Contents/Frameworks/libavcodec.58.dylib" -change /usr/local/Cellar/ffmpeg/4.1.4_2/lib/libswresample.3.dylib @executable_path/../Frameworks/libswresample.3.dylib
-install_name_tool "$APP/Contents/Frameworks/libavcodec.58.dylib" -change /usr/local/Cellar/ffmpeg/4.1.4_2/lib/libavutil.56.dylib @executable_path/../Frameworks/libavutil.56.dylib
+# install_name_tool "$APP/Contents/Frameworks/libavcodec.58.dylib" -change /usr/local/Cellar/ffmpeg/4.1.4_2/lib/libswresample.3.dylib @executable_path/../Frameworks/libswresample.3.dylib
+# install_name_tool "$APP/Contents/Frameworks/libavcodec.58.dylib" -change /usr/local/Cellar/ffmpeg/4.1.4_2/lib/libavutil.56.dylib @executable_path/../Frameworks/libavutil.56.dylib
#libswresample
-install_name_tool "$APP/Contents/Frameworks/libswresample.3.dylib" -change /usr/local/Cellar/ffmpeg/4.1.4_2/lib/libavutil.56.dylib @executable_path/../Frameworks/libavutil.56.dylib
+# install_name_tool "$APP/Contents/Frameworks/libswresample.3.dylib" -change /usr/local/Cellar/ffmpeg/4.1.4_2/lib/libavutil.56.dylib @executable_path/../Frameworks/libavutil.56.dylib
#libswscale
-install_name_tool "$APP/Contents/Frameworks/libswscale.5.dylib" -change /usr/local/Cellar/ffmpeg/4.1.4_2/lib/libavutil.56.dylib @executable_path/../Frameworks/libavutil.56.dylib
+# install_name_tool "$APP/Contents/Frameworks/libswscale.5.dylib" -change /usr/local/Cellar/ffmpeg/4.1.4_2/lib/libavutil.56.dylib @executable_path/../Frameworks/libavutil.56.dylib
# libhogweed
-install_name_tool "$APP/Contents/Frameworks/libhogweed.4.dylib" -change /usr/local/Cellar/nettle/3.4.1/lib/libnettle.6.dylib @executable_path/../Frameworks/libnettle.6.dylib
+# install_name_tool "$APP/Contents/Frameworks/libhogweed.4.dylib" -change /usr/local/Cellar/nettle/3.4.1/lib/libnettle.6.dylib @executable_path/../Frameworks/libnettle.6.dylib
# libssl
-install_name_tool "$APP/Contents/Frameworks/libssl.1.1.dylib" -change /usr/local/Cellar/openssl@1.1/1.1.1d/lib/libcrypto.1.1.dylib @executable_path/../Frameworks/libcrypto.1.1.dylib
+# install_name_tool "$APP/Contents/Frameworks/libssl.1.1.dylib" -change /usr/local/Cellar/openssl@1.1/1.1.1d/lib/libcrypto.1.1.dylib @executable_path/../Frameworks/libcrypto.1.1.dylib
# libvorbis
-install_name_tool "$APP/Contents/Frameworks/libvorbisenc.2.dylib" -change /usr/local/Cellar/libvorbis/1.3.6/lib/libvorbis.0.dylib @executable_path/../Frameworks/libvorbis.0.dylib
+# install_name_tool "$APP/Contents/Frameworks/libvorbisenc.2.dylib" -change /usr/local/Cellar/libvorbis/1.3.6/lib/libvorbis.0.dylib @executable_path/../Frameworks/libvorbis.0.dylib
notify "Extracting debug information ..."
$DSYMUTIL "$APP/Contents/MacOS/$APPLICATION_NAME" -o "$DSYM"
diff --git a/resources/customizations/fonts/GETypoLibre.otf b/resources/customizations/fonts/GETypoLibre.otf
index 55c58658..e0df967b 100644
Binary files a/resources/customizations/fonts/GETypoLibre.otf and b/resources/customizations/fonts/GETypoLibre.otf differ
diff --git a/resources/etc/OpenBoard.config b/resources/etc/OpenBoard.config
index 7a261d40..06c81ef6 100644
--- a/resources/etc/OpenBoard.config
+++ b/resources/etc/OpenBoard.config
@@ -93,6 +93,8 @@ SortOrder=0
SplitterLeftSize=200
SplitterRightSize=800
ShowDateColumnOnAlphabeticalSort=false
+emptyTrashForOlderDocuments=false
+emptyTrashDaysValue=30
[IntranetPodcast]
Author=
diff --git a/resources/forms/preferences.ui b/resources/forms/preferences.ui
index 602f7ead..6fdf3936 100644
--- a/resources/forms/preferences.ui
+++ b/resources/forms/preferences.ui
@@ -7,7 +7,7 @@
0
0
825
- 748
+ 767
@@ -552,7 +552,7 @@
Documents Mode
- -
+
-
-
@@ -567,24 +567,54 @@
- -
-
-
- Qt::Horizontal
-
-
- QSizePolicy::Fixed
+
-
+
+
+ Empty trash for documents older than
-
-
- 40
- 20
-
+
+
+ -
+
+
+ -
+
+
+ days
-
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Fixed
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
diff --git a/resources/i18n/OpenBoard_ar.ts b/resources/i18n/OpenBoard_ar.ts
index 82a9b999..e2303aaf 100644
--- a/resources/i18n/OpenBoard_ar.ts
+++ b/resources/i18n/OpenBoard_ar.ts
@@ -2844,6 +2844,22 @@ p, li { white-space: pre-wrap; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
trapFlashDialog
diff --git a/resources/i18n/OpenBoard_bg.ts b/resources/i18n/OpenBoard_bg.ts
index 44d94cd3..7dfd16f1 100644
--- a/resources/i18n/OpenBoard_bg.ts
+++ b/resources/i18n/OpenBoard_bg.ts
@@ -2824,6 +2824,22 @@ p, li { white-space: pre-wrap; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
trapFlashDialog
diff --git a/resources/i18n/OpenBoard_ca.ts b/resources/i18n/OpenBoard_ca.ts
index 4fa465d4..3210a81e 100644
--- a/resources/i18n/OpenBoard_ca.ts
+++ b/resources/i18n/OpenBoard_ca.ts
@@ -2824,6 +2824,22 @@ p, li { white-space: pre-wrap; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
trapFlashDialog
diff --git a/resources/i18n/OpenBoard_cs.ts b/resources/i18n/OpenBoard_cs.ts
index 3c4a0d57..a9dcb497 100644
--- a/resources/i18n/OpenBoard_cs.ts
+++ b/resources/i18n/OpenBoard_cs.ts
@@ -2830,6 +2830,22 @@ p, li { white-space: pre-wrap; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
trapFlashDialog
diff --git a/resources/i18n/OpenBoard_da.ts b/resources/i18n/OpenBoard_da.ts
index fbca1004..20efe670 100644
--- a/resources/i18n/OpenBoard_da.ts
+++ b/resources/i18n/OpenBoard_da.ts
@@ -2827,6 +2827,22 @@ p, li { white-space: pre-wrap; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
trapFlashDialog
diff --git a/resources/i18n/OpenBoard_de.ts b/resources/i18n/OpenBoard_de.ts
index d7beb200..2c135f5c 100644
--- a/resources/i18n/OpenBoard_de.ts
+++ b/resources/i18n/OpenBoard_de.ts
@@ -153,19 +153,19 @@
- Linie
+ Strichstärke
- Kleine Linie
+ Dünner Strich
- Mittelgroße Linie
+ Mittelstarker Strich
- Große Linie
+ Dicker Strich
@@ -801,11 +801,11 @@
- Hell linierter Hintergrund
+ Heller linierter Hintergrund
- Dunkel linierter Hintergrund
+ Dunkler linierter Hintergrund
@@ -884,7 +884,7 @@
UBApplicationController
- Internet
+ Browser
@@ -1320,7 +1320,7 @@ Wenn Sie einen neuen Namen wählen, wird ein neues Dokument erstellt.
- Seite %1/%2 wird kopiert
+ Seite %1/%2 wird kopiert
@@ -2620,7 +2620,7 @@ p, li { white-space: pre-wrap; }
- Linienstärke
+ Strichstärke
@@ -2890,6 +2890,22 @@ p, li { white-space: pre-wrap; }
+
+
+ Dokumentmodus
+
+
+
+ Datumsspalte nur in alphabetischer Reihenfolge anzeigen
+
+
+
+ Dokumente aus dem Papierkorb löschen, die älter als
+
+
+
+ Tage sind
+
trapFlashDialog
diff --git a/resources/i18n/OpenBoard_el.ts b/resources/i18n/OpenBoard_el.ts
index e192db1b..9362e12a 100644
--- a/resources/i18n/OpenBoard_el.ts
+++ b/resources/i18n/OpenBoard_el.ts
@@ -2824,6 +2824,22 @@ p, li { white-space: pre-wrap; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
trapFlashDialog
diff --git a/resources/i18n/OpenBoard_en.ts b/resources/i18n/OpenBoard_en.ts
index 2dde99a4..c32ca8ee 100644
--- a/resources/i18n/OpenBoard_en.ts
+++ b/resources/i18n/OpenBoard_en.ts
@@ -2652,6 +2652,22 @@ p, li { white-space: pre-wrap; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
trapFlashDialog
diff --git a/resources/i18n/OpenBoard_en_UK.ts b/resources/i18n/OpenBoard_en_UK.ts
index 2dde99a4..c32ca8ee 100644
--- a/resources/i18n/OpenBoard_en_UK.ts
+++ b/resources/i18n/OpenBoard_en_UK.ts
@@ -2652,6 +2652,22 @@ p, li { white-space: pre-wrap; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
trapFlashDialog
diff --git a/resources/i18n/OpenBoard_es.ts b/resources/i18n/OpenBoard_es.ts
index caa0aac1..eced19bd 100644
--- a/resources/i18n/OpenBoard_es.ts
+++ b/resources/i18n/OpenBoard_es.ts
@@ -2844,6 +2844,22 @@ p, li { white-space: pre-wrap; }
Intercambiar control de pantalla y vista de pantalla
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
trapFlashDialog
diff --git a/resources/i18n/OpenBoard_fr.ts b/resources/i18n/OpenBoard_fr.ts
index 55891996..e2b4673a 100644
--- a/resources/i18n/OpenBoard_fr.ts
+++ b/resources/i18n/OpenBoard_fr.ts
@@ -1330,7 +1330,7 @@ Un nouveau nom vous permettra de conserver l'ancien document.
- Copie de la page %1/%2 en cours
+ Copie de la page %1/%2 en cours
@@ -2907,6 +2907,22 @@ p, li { white-space: pre-wrap; }
Inverser les écrans élèves
+
+
+ Mode Documents
+
+
+
+ Afficher la colonne des dates avec le tri alphabétique
+
+
+
+ Supprimer de la corbeille les documents de plus de
+
+
+
+ jours
+
trapFlashDialog
diff --git a/resources/i18n/OpenBoard_fr_CH.ts b/resources/i18n/OpenBoard_fr_CH.ts
index 6ab6f6e8..3ecc9336 100644
--- a/resources/i18n/OpenBoard_fr_CH.ts
+++ b/resources/i18n/OpenBoard_fr_CH.ts
@@ -1330,7 +1330,7 @@ Un nouveau nom vous permettra de conserver l'ancien document.
- Copie de la page %1/%2 en cours
+ Copie de la page %1/%2 en cours
@@ -2907,6 +2907,22 @@ p, li { white-space: pre-wrap; }
Inverser les écrans élèves
+
+
+ Mode Documents
+
+
+
+ Afficher la colonne des dates avec le tri alphabétique
+
+
+
+ Supprimer de la corbeille les documents de plus de
+
+
+
+ jours
+
trapFlashDialog
diff --git a/resources/i18n/OpenBoard_gl.ts b/resources/i18n/OpenBoard_gl.ts
index 26937064..65792fb7 100644
--- a/resources/i18n/OpenBoard_gl.ts
+++ b/resources/i18n/OpenBoard_gl.ts
@@ -2821,6 +2821,22 @@ p, li { white-space: pre-wrap; }
Intercambiar control de pantalla e vista de pantalla
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
trapFlashDialog
diff --git a/resources/i18n/OpenBoard_hu.ts b/resources/i18n/OpenBoard_hu.ts
index 187e2f74..265f7e6d 100644
--- a/resources/i18n/OpenBoard_hu.ts
+++ b/resources/i18n/OpenBoard_hu.ts
@@ -2783,6 +2783,22 @@ p, li { white-space: pre-wrap; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
trapFlashDialog
diff --git a/resources/i18n/OpenBoard_it.ts b/resources/i18n/OpenBoard_it.ts
index 66d04501..3e28600e 100644
--- a/resources/i18n/OpenBoard_it.ts
+++ b/resources/i18n/OpenBoard_it.ts
@@ -753,7 +753,7 @@
- Cerca aggiornamenti
+ Controlla aggiornamenti
@@ -801,11 +801,11 @@
- Sfondo chiaro lineato
+ Sfondo chiaro a righe
- Sfundo scuro lineato
+ Sfondo scuro a righe
@@ -1279,8 +1279,8 @@
Keeping this name will replace the document.
Providing a new name will create a new document.
Il nome %1 è già usato.
-Conservando questo nome sostituirà il documento.
-Dando un nuovo nome creerà un nuovo documento.
+Conservando questo nome si sostituirà il documento.
+Dando un nuovo nome si creerà un nuovo documento.
@@ -1320,7 +1320,7 @@ Dando un nuovo nome creerà un nuovo documento.
- Sto copiando pagina %1/%2
+ Sto copiando pagina %1/%2
@@ -1970,7 +1970,7 @@ Vuoi ignorare gli errori per questo host?
- ha perso l'accesso al repository documenti "%1". Sfortunatamente l'applicazione deve essere chiusa per evitare di rivinare i dati. Gli ultimi cambiamenti potrebbero andare persi.
+ ha perso l'accesso al repository documenti "%1". Sfortunatamente l'applicazione deve essere chiusa per evitare di rovinare i dati. Gli ultimi cambiamenti potrebbero andare persi.
@@ -1982,7 +1982,7 @@ Vuoi ignorare gli errori per questo host?
- OpenBoard ha perso l'accesso al repository documenti "%1". Sfortunatamente l'applicazione deve essere chiusa per evitare di rivinare i dati. Gli ultimi cambiamenti potrebbero andare persi.
+ OpenBoard ha perso l'accesso al repository documenti "%1". Sfortunatamente l'applicazione deve essere chiusa per evitare di rovinare i dati. Gli ultimi cambiamenti potrebbero andare persi.
@@ -2005,7 +2005,7 @@ Vuoi ignorare gli errori per questo host?
- Franco Svizzero
+ Francese Svizzero
@@ -2885,6 +2885,22 @@ p, li { white-space: pre-wrap; }
Scambia lo schermo di controllo con quello di visualizzazione
+
+
+ Modalità Documenti
+
+
+
+ Visualizza la colonna delle date con ordinamento alfabetico.
+
+
+
+ Cancellare dal cestino i documenti di étà superiore a
+
+
+
+ giorni
+
trapFlashDialog
diff --git a/resources/i18n/OpenBoard_iw.ts b/resources/i18n/OpenBoard_iw.ts
index 217ca318..34bf3138 100644
--- a/resources/i18n/OpenBoard_iw.ts
+++ b/resources/i18n/OpenBoard_iw.ts
@@ -2816,6 +2816,22 @@ p, li { white-space: pre-wrap; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
trapFlashDialog
diff --git a/resources/i18n/OpenBoard_ja.ts b/resources/i18n/OpenBoard_ja.ts
index 909af809..719c19c5 100644
--- a/resources/i18n/OpenBoard_ja.ts
+++ b/resources/i18n/OpenBoard_ja.ts
@@ -2812,6 +2812,22 @@ p, li { white-space: pre-wrap; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
trapFlashDialog
diff --git a/resources/i18n/OpenBoard_ko.ts b/resources/i18n/OpenBoard_ko.ts
index 6e216bc4..6cb8e454 100644
--- a/resources/i18n/OpenBoard_ko.ts
+++ b/resources/i18n/OpenBoard_ko.ts
@@ -2835,6 +2835,22 @@ p, li { white-space: pre-wrap; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
trapFlashDialog
diff --git a/resources/i18n/OpenBoard_mg.ts b/resources/i18n/OpenBoard_mg.ts
index 3acb0e85..fd19d89f 100644
--- a/resources/i18n/OpenBoard_mg.ts
+++ b/resources/i18n/OpenBoard_mg.ts
@@ -2831,6 +2831,22 @@ p, li { white-space: pre-wrap; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
trapFlashDialog
diff --git a/resources/i18n/OpenBoard_nb.ts b/resources/i18n/OpenBoard_nb.ts
index 5e131100..544ef937 100644
--- a/resources/i18n/OpenBoard_nb.ts
+++ b/resources/i18n/OpenBoard_nb.ts
@@ -2821,6 +2821,22 @@ p, li { white-space: pre-wrap; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
trapFlashDialog
diff --git a/resources/i18n/OpenBoard_nl.ts b/resources/i18n/OpenBoard_nl.ts
index c42c52b9..11cffe75 100644
--- a/resources/i18n/OpenBoard_nl.ts
+++ b/resources/i18n/OpenBoard_nl.ts
@@ -2820,6 +2820,22 @@ p, li { white-space: pre-wrap; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
trapFlashDialog
diff --git a/resources/i18n/OpenBoard_pl.ts b/resources/i18n/OpenBoard_pl.ts
index f83dfa2b..662564c5 100644
--- a/resources/i18n/OpenBoard_pl.ts
+++ b/resources/i18n/OpenBoard_pl.ts
@@ -2845,6 +2845,22 @@ p, li { white-space: pre-wrap; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
trapFlashDialog
diff --git a/resources/i18n/OpenBoard_pt.ts b/resources/i18n/OpenBoard_pt.ts
index f52fc51d..408baa3e 100644
--- a/resources/i18n/OpenBoard_pt.ts
+++ b/resources/i18n/OpenBoard_pt.ts
@@ -2860,6 +2860,22 @@ p, li { white-space: pre-wrap; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
trapFlashDialog
diff --git a/resources/i18n/OpenBoard_ro.ts b/resources/i18n/OpenBoard_ro.ts
index 61a3439d..ef2e9ed9 100644
--- a/resources/i18n/OpenBoard_ro.ts
+++ b/resources/i18n/OpenBoard_ro.ts
@@ -2831,6 +2831,22 @@ p, li { white-space: pre-wrap; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
trapFlashDialog
diff --git a/resources/i18n/OpenBoard_ru.ts b/resources/i18n/OpenBoard_ru.ts
index 7bdba4a3..9ce21800 100644
--- a/resources/i18n/OpenBoard_ru.ts
+++ b/resources/i18n/OpenBoard_ru.ts
@@ -2831,6 +2831,22 @@ p, li { white-space: pre-wrap; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
trapFlashDialog
diff --git a/resources/i18n/OpenBoard_sk.ts b/resources/i18n/OpenBoard_sk.ts
index 78e085cd..3f978d07 100644
--- a/resources/i18n/OpenBoard_sk.ts
+++ b/resources/i18n/OpenBoard_sk.ts
@@ -387,7 +387,7 @@
- Interaktívne pero
+ Dotykové pero
@@ -2683,19 +2683,19 @@ p, li { white-space: pre-wrap; }
-
+ Dátum vytvorenia
-
+ Dátum úpravy
-
+ Podľa abecedy
-
+ Kritérium triedenia
@@ -2826,7 +2826,7 @@ p, li { white-space: pre-wrap; }
- Použ. m. na proxy:
+ Použ. meno na proxy:
@@ -2842,7 +2842,7 @@ p, li { white-space: pre-wrap; }
- Zistiť, či sa pri spustení majú nahrať dáta z Open-Sankoré
+ Zistiť, či pri spustení možno nahrať dáta Open-Sankoré
@@ -2854,22 +2854,38 @@ p, li { white-space: pre-wrap; }
- Na tmavom pozadí
+ Na tmavom pozadí
- Priehľadnosť
+ Priehľadnosť
- Na svetlom pozadí
+ Na svetlom pozadí
-
+ Vymeniť obrazovku 1. a 2. zobrazenia
+ Mriežka
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/resources/i18n/OpenBoard_sv.ts b/resources/i18n/OpenBoard_sv.ts
index 2a16b201..82e35991 100644
--- a/resources/i18n/OpenBoard_sv.ts
+++ b/resources/i18n/OpenBoard_sv.ts
@@ -2832,6 +2832,22 @@ p, li { white-space: pre-wrap; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
trapFlashDialog
diff --git a/resources/i18n/OpenBoard_tr.ts b/resources/i18n/OpenBoard_tr.ts
index 2b6686fd..a3fbeffc 100644
--- a/resources/i18n/OpenBoard_tr.ts
+++ b/resources/i18n/OpenBoard_tr.ts
@@ -2819,6 +2819,22 @@ p, li { white-space: pre-wrap; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
trapFlashDialog
diff --git a/resources/i18n/OpenBoard_uk.ts b/resources/i18n/OpenBoard_uk.ts
index 4090dddc..a0017478 100644
--- a/resources/i18n/OpenBoard_uk.ts
+++ b/resources/i18n/OpenBoard_uk.ts
@@ -2817,6 +2817,22 @@ p, li { white-space: pre-wrap; }
Поміняйте перший і другий види відображення
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
trapFlashDialog
diff --git a/resources/i18n/OpenBoard_zh.ts b/resources/i18n/OpenBoard_zh.ts
index 627e797e..30a60e82 100644
--- a/resources/i18n/OpenBoard_zh.ts
+++ b/resources/i18n/OpenBoard_zh.ts
@@ -2819,6 +2819,22 @@ p, li { white-space: pre-wrap; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
trapFlashDialog
diff --git a/resources/i18n/OpenBoard_zh_CN.ts b/resources/i18n/OpenBoard_zh_CN.ts
index 627e797e..30a60e82 100644
--- a/resources/i18n/OpenBoard_zh_CN.ts
+++ b/resources/i18n/OpenBoard_zh_CN.ts
@@ -2819,6 +2819,22 @@ p, li { white-space: pre-wrap; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
trapFlashDialog
diff --git a/resources/i18n/OpenBoard_zh_TW.ts b/resources/i18n/OpenBoard_zh_TW.ts
index db8075ca..cfc85e68 100644
--- a/resources/i18n/OpenBoard_zh_TW.ts
+++ b/resources/i18n/OpenBoard_zh_TW.ts
@@ -2813,6 +2813,22 @@ p, li { white-space: pre-wrap; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
trapFlashDialog
diff --git a/resources/library/interactivities/Magic Box.wgt/i18n/Messages_sk.properties b/resources/library/interactivities/Magic Box.wgt/i18n/Messages_sk.properties
new file mode 100644
index 00000000..bfe6885f
--- /dev/null
+++ b/resources/library/interactivities/Magic Box.wgt/i18n/Messages_sk.properties
@@ -0,0 +1,19 @@
+sk.njin.i18n.document.title = Čarovná škatuľka
+
+sk.njin.i18n.toolbar.edit = Upraviť
+sk.njin.i18n.toolbar.view = Zobraziť
+sk.njin.i18n.toolbar.reload = Obnoviť
+sk.njin.i18n.toolbar.help = Pomocník
+
+sk.njin.i18n.parameters.label.themes = Farebný motív
+sk.njin.i18n.parameters.label.slate.themes = bridlica
+sk.njin.i18n.parameters.label.pad.themes = tablet
+sk.njin.i18n.parameters.label.none.themes = žiadny
+
+sk.njin.i18n.transformation.parameters.label.number = Počet kariet
+sk.njin.i18n.transformation.label.usePicture = Obrázok
+sk.njin.i18n.transformation.label.before = Predtým
+sk.njin.i18n.transformation.label.after = Potom
+sk.njin.i18n.transformation.row.label = Karta {0}
+
+sk.njin.i18n.transformation.label.drop = Ťahajte a tu pustite
diff --git a/resources/library/shape/nofill_octogon.svg b/resources/library/shape/nofill_octogon.svg
new file mode 100644
index 00000000..f693ac97
--- /dev/null
+++ b/resources/library/shape/nofill_octogon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/resources/library/shape/nofill_rhombus.svg b/resources/library/shape/nofill_rhombus.svg
new file mode 100644
index 00000000..57278dda
--- /dev/null
+++ b/resources/library/shape/nofill_rhombus.svg
@@ -0,0 +1,3 @@
+
diff --git a/resources/library/shape/nofill_trapeze.svg b/resources/library/shape/nofill_trapeze.svg
new file mode 100644
index 00000000..8bbe0dff
--- /dev/null
+++ b/resources/library/shape/nofill_trapeze.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/resources/library/shape/nofill_triangle_rect.svg b/resources/library/shape/nofill_triangle_rect.svg
new file mode 100644
index 00000000..634616de
--- /dev/null
+++ b/resources/library/shape/nofill_triangle_rect.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/adaptors/UBMetadataDcSubsetAdaptor.cpp b/src/adaptors/UBMetadataDcSubsetAdaptor.cpp
index 54ce6d51..9cbe55eb 100644
--- a/src/adaptors/UBMetadataDcSubsetAdaptor.cpp
+++ b/src/adaptors/UBMetadataDcSubsetAdaptor.cpp
@@ -125,6 +125,8 @@ void UBMetadataDcSubsetAdaptor::persist(UBDocumentProxy* proxy)
// introduced in UB 4.4
xmlWriter.writeTextElement(UBSettings::uniboardDocumentNamespaceUri, "updated-at", UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTimeUtc()));
+ xmlWriter.writeTextElement(UBSettings::uniboardDocumentNamespaceUri, "page-count", QString::number(proxy->pageCount()));
+
xmlWriter.writeEndElement(); //dc:Description
xmlWriter.writeEndElement(); //RDF
@@ -224,6 +226,11 @@ QMap UBMetadataDcSubsetAdaptor::load(QString pPath)
metadata.insert(UBSettings::documentUpdatedAt, xml.readElementText());
updatedAtFound = true;
}
+ else if (xml.name() == "page-count"
+ && xml.namespaceUri() == UBSettings::uniboardDocumentNamespaceUri)
+ {
+ metadata.insert(UBSettings::documentPageCount, xml.readElementText());
+ }
metadata.insert(UBSettings::documentVersion, docVersion);
}
diff --git a/src/core/UBApplication.cpp b/src/core/UBApplication.cpp
index 194ea6e4..709aa678 100644
--- a/src/core/UBApplication.cpp
+++ b/src/core/UBApplication.cpp
@@ -451,6 +451,13 @@ void UBApplication::closeEvent(QCloseEvent *event)
void UBApplication::closing()
{
+ if (UBSettings::settings()->emptyTrashForOlderDocuments->get().toBool())
+ {
+ UBDocumentTreeModel *docModel = UBPersistenceManager::persistenceManager()->mDocumentTreeStructureModel;
+ documentController->deleteDocumentsInFolderOlderThan(docModel->trashIndex(), UBSettings::settings()->emptyTrashDaysValue->get().toInt());
+ if (docModel->hasChildren(docModel->trashIndex()))
+ documentController->deleteEmptyFolders(docModel->trashIndex());
+ }
if (boardController)
boardController->closing();
diff --git a/src/core/UBPersistenceManager.cpp b/src/core/UBPersistenceManager.cpp
index 67fbbd14..73dacd31 100644
--- a/src/core/UBPersistenceManager.cpp
+++ b/src/core/UBPersistenceManager.cpp
@@ -164,36 +164,40 @@ void UBPersistenceManager::createDocumentProxiesStructure(const QFileInfoList &c
{
QString fullPath = path.absoluteFilePath();
- QDir dir(fullPath);
+ QMap metadatas = UBMetadataDcSubsetAdaptor::load(fullPath);
- if (dir.entryList(QDir::Files | QDir::NoDotAndDotDot).size() > 0)
- {
- QMap metadatas = UBMetadataDcSubsetAdaptor::load(fullPath);
- QString docGroupName = metadatas.value(UBSettings::documentGroupName, QString()).toString();
- QString docName = metadatas.value(UBSettings::documentName, QString()).toString();
-
- if (docName.isEmpty()) {
- qDebug() << "Group name and document name are empty in UBPersistenceManager::createDocumentProxiesStructure()";
- continue;
- }
+ QString docGroupName = metadatas.value(UBSettings::documentGroupName, QString()).toString();
+ QString docName = metadatas.value(UBSettings::documentName, QString()).toString();
- QModelIndex parentIndex = mDocumentTreeStructureModel->goTo(docGroupName);
- if (!parentIndex.isValid()) {
- return;
- }
+ if (docName.isEmpty()) {
+ qDebug() << "Group name and document name are empty in UBPersistenceManager::createDocumentProxiesStructure()";
+ return;
+ }
- UBDocumentProxy* docProxy = new UBDocumentProxy(fullPath); // managed in UBDocumentTreeNode
- foreach(QString key, metadatas.keys()) {
- docProxy->setMetaData(key, metadatas.value(key));
- }
+ QModelIndex parentIndex = mDocumentTreeStructureModel->goTo(docGroupName);
+ if (!parentIndex.isValid()) {
+ return;
+ }
- docProxy->setPageCount(sceneCount(docProxy));
+ UBDocumentProxy* docProxy = new UBDocumentProxy(fullPath, metadatas); // managed in UBDocumentTreeNode
+ foreach(QString key, metadatas.keys()) {
+ docProxy->setMetaData(key, metadatas.value(key));
+ }
- if (!interactive)
- mDocumentTreeStructureModel->addDocument(docProxy, parentIndex);
- else
- processInteractiveReplacementDialog(docProxy);
+ if (metadatas.contains(UBSettings::documentPageCount))
+ {
+ docProxy->setPageCount(metadatas.value(UBSettings::documentPageCount).toInt());
+ }
+ else
+ {
+ int pageCount = sceneCount(docProxy);
+ docProxy->setPageCount(pageCount);
}
+
+ if (!interactive)
+ mDocumentTreeStructureModel->addDocument(docProxy, parentIndex);
+ else
+ processInteractiveReplacementDialog(docProxy);
}
}
@@ -229,7 +233,6 @@ QDialog::DialogCode UBPersistenceManager::processInteractiveReplacementDialog(UB
, Qt::Widget);
if (replaceDialog->exec() == QDialog::Accepted)
{
- mDocumentTreeStructureModel->addDocument(pProxy, parentIndex);
result = QDialog::Accepted;
QString resultName = replaceDialog->lineEditText();
int i = docList.indexOf(resultName);
@@ -250,6 +253,7 @@ QDialog::DialogCode UBPersistenceManager::processInteractiveReplacementDialog(UB
}
}
pProxy->setMetaData(UBSettings::documentName, resultName);
+ mDocumentTreeStructureModel->addDocument(pProxy, parentIndex);
}
replaceDialog->setParent(0);
delete replaceDialog;
diff --git a/src/core/UBPreferencesController.cpp b/src/core/UBPreferencesController.cpp
index b536ea1e..9ecceeec 100644
--- a/src/core/UBPreferencesController.cpp
+++ b/src/core/UBPreferencesController.cpp
@@ -138,8 +138,12 @@ void UBPreferencesController::wire()
connect(mPreferencesUI->useSystemOSKCheckBox, SIGNAL(clicked(bool)), settings->useSystemOnScreenKeyboard, SLOT(setBool(bool)));
connect(mPreferencesUI->useSystemOSKCheckBox, SIGNAL(clicked(bool)), this, SLOT(systemOSKCheckBoxToggled(bool)));
+ // Documents Mode preferences
connect(mPreferencesUI->showDateColumnOnAlphabeticalSort, SIGNAL(clicked(bool)), settings->showDateColumnOnAlphabeticalSort, SLOT(setBool(bool)));
connect(mPreferencesUI->showDateColumnOnAlphabeticalSort, SIGNAL(clicked(bool)), UBApplication::documentController, SLOT(refreshDateColumns()));
+ connect(mPreferencesUI->emptyTrashForOlderDocuments, SIGNAL(clicked(bool)), settings->emptyTrashForOlderDocuments, SLOT(setBool(bool)));
+ connect(mPreferencesUI->emptyTrashDaysValue, SIGNAL(valueChanged(int)), settings->emptyTrashDaysValue, SLOT(setInt(int)));
+
connect(mPreferencesUI->keyboardPaletteKeyButtonSize, SIGNAL(currentIndexChanged(const QString &)), settings->boardKeyboardPaletteKeyBtnSize, SLOT(setString(const QString &)));
connect(mPreferencesUI->startModeComboBox, SIGNAL(currentIndexChanged(int)), settings->appStartMode, SLOT(setInt(int)));
@@ -279,6 +283,8 @@ void UBPreferencesController::init()
this->systemOSKCheckBoxToggled(mPreferencesUI->useSystemOSKCheckBox->isChecked());
mPreferencesUI->showDateColumnOnAlphabeticalSort->setChecked(settings->showDateColumnOnAlphabeticalSort->get().toBool());
+ mPreferencesUI->emptyTrashForOlderDocuments->setChecked(settings->emptyTrashForOlderDocuments->get().toBool());
+ mPreferencesUI->emptyTrashDaysValue->setValue(settings->emptyTrashDaysValue->get().toInt());
mPreferencesUI->startModeComboBox->setCurrentIndex(settings->appStartMode->get().toInt());
@@ -344,8 +350,13 @@ void UBPreferencesController::defaultSettings()
mPreferencesUI->startModeComboBox->setCurrentIndex(0);
mPreferencesUI->useSystemOSKCheckBox->setChecked(settings->useSystemOnScreenKeyboard->reset().toBool());
+
mPreferencesUI->showDateColumnOnAlphabeticalSort->setChecked(settings->showDateColumnOnAlphabeticalSort->reset().toBool());
UBApplication::documentController->refreshDateColumns();
+
+ mPreferencesUI->emptyTrashForOlderDocuments->setChecked(settings->emptyTrashForOlderDocuments->reset().toBool());
+ mPreferencesUI->emptyTrashDaysValue->setValue(settings->emptyTrashDaysValue->reset().toInt());
+
}
else if (mPreferencesUI->mainTabWidget->currentWidget() == mPreferencesUI->penTab)
{
diff --git a/src/core/UBSettings.cpp b/src/core/UBSettings.cpp
index 557b3c65..80e14677 100644
--- a/src/core/UBSettings.cpp
+++ b/src/core/UBSettings.cpp
@@ -60,6 +60,7 @@ QString UBSettings::documentSize = QString("Size");
QString UBSettings::documentIdentifer = QString("ID");
QString UBSettings::documentVersion = QString("Version");
QString UBSettings::documentUpdatedAt = QString("UpdatedAt");
+QString UBSettings::documentPageCount = QString("PageCount");
QString UBSettings::documentDate = QString("date");
QString UBSettings::trashedDocumentGroupNamePrefix = QString("_Trash:");
@@ -459,6 +460,8 @@ void UBSettings::init()
useSystemOnScreenKeyboard = new UBSetting(this, "App", "UseSystemOnScreenKeyboard", true);
showDateColumnOnAlphabeticalSort = new UBSetting(this, "Document", "ShowDateColumnOnAlphabeticalSort", false);
+ emptyTrashForOlderDocuments = new UBSetting(this, "Document", "emptyTrashForOlderDocuments", false);
+ emptyTrashDaysValue = new UBSetting(this, "Document", "emptyTrashDaysValue", 30);
cleanNonPersistentSettings();
checkNewSettings();
diff --git a/src/core/UBSettings.h b/src/core/UBSettings.h
index 5ba97c93..c79e4f95 100644
--- a/src/core/UBSettings.h
+++ b/src/core/UBSettings.h
@@ -201,6 +201,7 @@ class UBSettings : public QObject
static QString documentIdentifer;
static QString documentVersion;
static QString documentUpdatedAt;
+ static QString documentPageCount;
static QString documentDate;
@@ -415,6 +416,9 @@ class UBSettings : public QObject
UBSetting* showDateColumnOnAlphabeticalSort;
+ UBSetting* emptyTrashForOlderDocuments;
+ UBSetting* emptyTrashDaysValue;
+
UBSetting* magnifierDrawingMode;
UBSetting* autoSaveInterval;
diff --git a/src/document/UBDocumentController.cpp b/src/document/UBDocumentController.cpp
index 1bf2ebc9..03d676fb 100644
--- a/src/document/UBDocumentController.cpp
+++ b/src/document/UBDocumentController.cpp
@@ -762,6 +762,31 @@ bool UBDocumentTreeModel::removeRows(int row, int count, const QModelIndex &pare
return true;
}
+bool UBDocumentTreeModel::containsDocuments(const QModelIndex &index)
+{
+ for (int i = 0; i < rowCount(index); i++)
+ {
+ QModelIndex child = this->index(i, 0, index);
+ if (isCatalog(child))
+ {
+ if (containsDocuments(child))
+ {
+ return true;
+ }
+ }
+ else if (isDocument(child))
+ {
+ return true;
+ }
+ else
+ {
+ qDebug() << "Who the hell are you ?";
+ }
+ }
+
+ return false;
+}
+
QModelIndex UBDocumentTreeModel::indexForNode(UBDocumentTreeNode *pNode) const
{
if (pNode == 0) {
@@ -917,7 +942,6 @@ void UBDocumentTreeModel::moveIndexes(const QModelIndexList &source, const QMode
fixNodeName(s, destinationParent);
sourceNode->parentNode()->moveChild(sourceNode, destIndex, newParentNode);
updateIndexNameBindings(sourceNode);
-
hasOneInsertion = true;
}
}
@@ -1199,6 +1223,7 @@ void UBDocumentTreeModel::updateIndexNameBindings(UBDocumentTreeNode *nd)
} else if (nd->proxyData()) {
nd->proxyData()->setMetaData(UBSettings::documentGroupName, virtualPathForIndex(indexForNode(nd->parentNode())));
nd->proxyData()->setMetaData(UBSettings::documentName, nd->nodeName());
+ nd->proxyData()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
UBPersistenceManager::persistenceManager()->persistDocumentMetadata(nd->proxyData());
}
}
@@ -2054,7 +2079,6 @@ void UBDocumentController::setupViews()
}
}
-//N/C - NNE - 20140403
void UBDocumentController::refreshDateColumns()
{
if (UBSettings::settings()->documentSortKind->get().toInt() == UBDocumentController::Alphabetical)
@@ -2602,6 +2626,69 @@ void UBDocumentController::moveToTrash(QModelIndex &index, UBDocumentTreeModel*
}
//issue 1629 - NNE - 20131212 : END
+void UBDocumentController::deleteDocumentsInFolderOlderThan(const QModelIndex &index, const int days)
+{
+ UBDocumentTreeModel *docModel = UBPersistenceManager::persistenceManager()->mDocumentTreeStructureModel;
+
+ QModelIndexList list;
+ for (int i = 0; i < docModel->rowCount(index); i++)
+ {
+ list << docModel->index(i, 0, index);
+ }
+
+ foreach (QModelIndex child, list)
+ {
+ UBDocumentProxy *documentProxy= docModel->proxyForIndex(child);
+
+ if (documentProxy)
+ {
+ if (documentProxy->lastUpdate().date() < QDateTime::currentDateTime().addDays(-days).date())
+ {
+ UBPersistenceManager::persistenceManager()->deleteDocument(documentProxy);
+ }
+ }
+ else
+ {
+ if (docModel->isCatalog(child))
+ {
+ deleteDocumentsInFolderOlderThan(child, days);
+ }
+ }
+ }
+}
+
+void UBDocumentController::deleteEmptyFolders(const QModelIndex &index)
+{
+ UBDocumentTreeModel *docModel = UBPersistenceManager::persistenceManager()->mDocumentTreeStructureModel;
+
+ QModelIndexList list;
+ for (int i = 0; i < docModel->rowCount(index); i++)
+ {
+ list << docModel->index(i, 0, index);
+ }
+
+ if (list.length() > 0)
+ {
+ foreach (QModelIndex child, list)
+ {
+ if (docModel->isCatalog(child))
+ {
+ if (!docModel->containsDocuments(child))
+ {
+ deleteIndexAndAssociatedData(child);
+ }
+ }
+ }
+ }
+ else
+ {
+ if (docModel->isCatalog(index))
+ {
+ deleteIndexAndAssociatedData(index);
+ }
+ }
+}
+
void UBDocumentController::emptyFolder(const QModelIndex &index, DeletionType pDeletionType)
{
// Issue NC - CFA - 20131029 : ajout d'une popup de confirmation pour la suppression definitive
diff --git a/src/document/UBDocumentController.h b/src/document/UBDocumentController.h
index c2afaa84..88ed74b2 100644
--- a/src/document/UBDocumentController.h
+++ b/src/document/UBDocumentController.h
@@ -187,6 +187,8 @@ public:
bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent);
bool removeRows(int row, int count, const QModelIndex &parent);
+ bool containsDocuments(const QModelIndex& index);
+
QModelIndex indexForNode(UBDocumentTreeNode *pNode) const;
QPersistentModelIndex persistentIndexForNode(UBDocumentTreeNode *pNode);
// bool insertRow(int row, const QModelIndex &parent);
@@ -414,6 +416,9 @@ class UBDocumentController : public UBDocumentContainer
*/
void moveToTrash(QModelIndex &index, UBDocumentTreeModel* docModel);
+ void deleteDocumentsInFolderOlderThan(const QModelIndex &index, const int days);
+ void deleteEmptyFolders(const QModelIndex &index);
+
QModelIndex mapIndexToSource(const QModelIndex &index);
QModelIndexList mapIndexesToSource(const QModelIndexList &indexes);
diff --git a/src/document/UBDocumentProxy.cpp b/src/document/UBDocumentProxy.cpp
index cebd7126..0bf6e565 100644
--- a/src/document/UBDocumentProxy.cpp
+++ b/src/document/UBDocumentProxy.cpp
@@ -56,7 +56,6 @@ UBDocumentProxy::UBDocumentProxy(const UBDocumentProxy &rValue) :
mPageCount = rValue.mPageCount;
}
-
UBDocumentProxy::UBDocumentProxy(const QString& pPersistancePath)
: mPageCount(0)
, mPageDpi(0)
@@ -68,6 +67,17 @@ UBDocumentProxy::UBDocumentProxy(const QString& pPersistancePath)
}
+UBDocumentProxy::UBDocumentProxy(const QString& pPersistancePath, QMap metadatas)
+ : mPageCount(0)
+ , mPageDpi(0)
+{
+ init();
+ setPersistencePath(pPersistancePath);
+
+ mMetaDatas = metadatas;
+}
+
+
void UBDocumentProxy::init()
{
setMetaData(UBSettings::documentGroupName, "");
@@ -260,7 +270,7 @@ QDateTime UBDocumentProxy::lastUpdate()
{
if(mMetaDatas.contains(UBSettings::documentUpdatedAt))
return UBStringUtils::fromUtcIsoDate(metaData(UBSettings::documentUpdatedAt).toString());
- return QDateTime().currentDateTime();
+ return QDateTime::currentDateTime();
}
bool UBDocumentProxy::isModified() const
diff --git a/src/document/UBDocumentProxy.h b/src/document/UBDocumentProxy.h
index cb507dec..dfff6908 100644
--- a/src/document/UBDocumentProxy.h
+++ b/src/document/UBDocumentProxy.h
@@ -49,6 +49,7 @@ class UBDocumentProxy : public QObject
UBDocumentProxy();
UBDocumentProxy(const UBDocumentProxy &rValue);
UBDocumentProxy(const QString& pPersistencePath);
+ UBDocumentProxy(const QString& pPersistencePath, QMap metadatas);
virtual ~UBDocumentProxy();