[calligra/calligra/2.9] /: Merge the branch words-sections-deniskup

Boudewijn Rempt boud at valdyas.org
Sun Feb 22 20:05:40 GMT 2015


Like this part... "Built " correct here, though the of the message still 
needs editing. But what I wonder about is how this change in krita code 
got into this patch, as well as the changes to the dekstop files. I'm 
pretty sure those shouldn't have been part of the patch.

diff --git 
a/krita/plugins/tools/tool_transform2/kis_free_transform_strategy_gsl_helpers.cpp 
b/krita/plugins/tools/to
ol_transform2/kis_free_transform_strategy_gsl_helpers.cpp
index 034b3ec..c6d7d93 100644
--- 
a/krita/plugins/tools/tool_transform2/kis_free_transform_strategy_gsl_helpers.cpp
+++ 
b/krita/plugins/tools/tool_transform2/kis_free_transform_strategy_gsl_helpers.cpp
@@ -336,7 +336,7 @@ namespace GSL
      {
          QMessageBox::warning(0,
                               i18nc("@title:window", "Krita"),
-                             i18n("Sorry, Krita was build without the 
support "
+                             i18n("Sorry, Krita was built without the 
support "
                                    "of GNU Scientific Library, so you 
cannot scale "
                                    "the selection with handles. Please 
compile "
                                    "Krita with GNU Scientific Library 
support, or use "


On Sun, 22 Feb 2015, Inge Wallin wrote:

> Git commit b62e5f48ca2783690cc82d9546f21db3ae3b3782 by Inge Wallin.
> Committed on 22/02/2015 at 19:51.
> Pushed by ingwa into branch 'calligra/2.9'.
>
> Merge the branch words-sections-deniskup
>
> This commit merges the branch words-sections-deniskup. It was
> originally merged to master, but without --squash, which this commit
> contains.  This branch only contains fixes to handling of text
> sections and no other things, in particular nothing to do with the
> text outliner which will be merged to master during the merge window.
>
> I have looked through all the changes line by line and I *think* that
> I have checked everything.  I could find no new strings but I may have
> missed something.  There are a number of new translations of old ones
> because the branch has gotten master merged into it at some points.
> Because of the freeze there should be no other new features but also
> that could have slipped through my checks. If so, I hope that I can be
> forgiven for missing it.
>
> Conflicts:
> 	krita/integration/thumbnail/kritaanimation_kranim_thumbnail.desktop
> 	krita/plugins/extensions/dockers/animator/krita_animator.desktop
> 	krita/plugins/formats/kranimseq/kranimseq_export.desktop
>
> M  +2    -0    braindump/data/braindump.appdata.xml
> M  +2    -0    extras/okularodtgenerator/libokularGenerator_odt.desktop
> M  +1    -1    extras/properties/calligradocinfopropspage.desktop
> M  +1    -0    filters/stage/keynote/import/calligra_filter_key2odp.desktop
> M  +1    -0    filters/stage/keynote/import/stage_key_thumbnail.desktop
> M  +2    -0    filters/stage/powerpoint/libokularGenerator_powerpoint_calligra.desktop
> M  +2    -0    filters/stage/pptx/libokularGenerator_pptx_calligra.desktop
> M  +1    -0    filters/words/docx/export/calligra_filter_odt2docx.desktop
> M  +1    -0    filters/words/docx/import/libokularGenerator_docx_calligra.desktop
> M  +1    -0    filters/words/msword-odf/libokularGenerator_doc_calligra.desktop
> M  +1    -0    filters/words/wiki/export/calligra_filter_odt2wiki.desktop
> M  +2    -0    filters/words/wordperfect/import/libokularGenerator_wpd_calligra.desktop
> M  +5    -0    gemini/calligragemini.desktop
> M  +5    -6    karbon/data/karbon.appdata.xml
> M  +1    -1    kexi/kexi.appdata.xml
> M  +2    -0    kexi/migration/txt/keximigrate_txt.desktop
> M  +1    -1    kexi/plugins/tables/kexitabledesignerview.cpp
> M  +5    -0    krita/data/krita_filefilter.desktop
> M  +1    -0    krita/data/templates/design/web_design.desktop
> M  +1    -0    krita/data/templates/texture/Texture1024x10248bitsrgb.desktop
> M  +1    -0    krita/data/templates/texture/Texture2048x20488bitsrgb.desktop
> M  +1    -0    krita/data/templates/texture/Texture256x2568bitsrgb.desktop
> M  +1    -0    krita/data/templates/texture/Texture4096x40968bitsrgb.desktop
> M  +1    -0    krita/data/templates/texture/Texture512x5128bitsrgb.desktop
> M  +1    -1    krita/gemini/kritagemini.desktop
> A  +30   -0    krita/integration/thumbnail/kritaanimation_kranim_thumbnail.desktop
> M  +1    -0    krita/krita.appdata.xml
> M  +2    -2    krita/krita.desktop
> A  +41   -0    krita/plugins/extensions/dockers/animator/krita_animator.desktop
> M  +2    -1    krita/plugins/extensions/dockers/colorslider/krita_colorslider.desktop
> M  +6    -0    krita/plugins/extensions/layersplit/kritalayersplit.desktop
> M  +1    -0    krita/plugins/extensions/resourcemanager/kritaresourcemanager.desktop
> M  +2    -0    krita/plugins/filters/indexcolors/kritaindexcolors.desktop
> M  +2    -0    krita/plugins/filters/posterize/kritaposterize.desktop
> M  +1    -0    krita/plugins/formats/heightmap/krita_heightmap_export.desktop
> M  +1    -0    krita/plugins/formats/heightmap/krita_heightmap_import.desktop
> A  +26   -0    krita/plugins/formats/kranimseq/kranimseq_export.desktop
> M  +1    -0    krita/plugins/formats/tga/krita_tga_export.desktop
> M  +1    -0    krita/plugins/formats/tga/krita_tga_import.desktop
> M  +1    -0    krita/plugins/paintops/gridbrush/kritagridpaintop.desktop
> M  +1    -1    krita/plugins/tools/tool_transform2/kis_free_transform_strategy_gsl_helpers.cpp
> M  +1    -1    krita/sketch/kritasketch.desktop
> M  +0    -3    krita/ui/forms/wdg_url_requester.ui
> M  +1    -0    libs/kopageapp/tools/kopa_tool.desktop
> M  +1    -1    libs/koreport/koreport_itemplugin.desktop
> M  +1    -15   libs/kotext/KoSection.cpp
> M  +5    -3    libs/kotext/KoSection.h
> M  +1    -1    libs/kotext/KoSectionEnd.cpp
> M  +5    -0    libs/kotext/KoSectionEnd.h
> M  +85   -81   libs/kotext/KoSectionManager.cpp
> M  +14   -27   libs/kotext/KoSectionManager.h
> M  +33   -6    libs/kotext/KoSectionUtils.cpp
> M  +32   -14   libs/kotext/KoSectionUtils.h
> M  +4    -0    libs/kotext/KoTextPaste.cpp
> M  +45   -85   libs/kotext/commands/DeleteCommand.cpp
> M  +7    -14   libs/kotext/commands/NewSectionCommand.cpp
> M  +13   -35   libs/kotext/opendocument/KoTextLoader.cpp
> M  +11   -28   libs/kotext/opendocument/KoTextWriter_p.cpp
> M  +12   -18   libs/kotext/tests/TestKoTextEditor.cpp
> M  +21   -28   libs/textlayout/KoTextLayoutArea_paint.cpp
> M  +2    -2    plugins/reporting/barcode/koreport_barcodeplugin.desktop
> M  +4    -2    plugins/reporting/chart/koreport_chartplugin.desktop
> M  +2    -2    plugins/reporting/maps/koreport_mapsplugin.desktop
> M  +4    -2    plugins/reporting/web/koreport_webplugin.desktop
> M  +2    -0    plugins/semanticitems/event/KoRdfCalendarEvent.h
> M  +13   -8    plugins/textshape/dialogs/SectionFormatDialog.cpp
> M  +2    -0    plugins/textshape/dialogs/SimpleInsertWidget.cpp
> M  +1    -1    servicetypes/calligra_deferred_plugin.desktop
> M  +2    -0    stage/data/kpr_tool.desktop
> M  +4    -0    stage/templates/odf/cohere-blue.desktop
> M  +4    -0    stage/templates/odf/cohere-gold.desktop
> M  +4    -0    stage/templates/odf/cohere-magenta.desktop
> M  +4    -0    stage/templates/odf/cohere-red.desktop
> M  +3    -1    stage/templates/odf/skyline_monotone.desktop
> M  +3    -1    stage/templates/odf/skyline_monotone_wide.desktop
> M  +4    -2    stage/templates/odf/skyline_morning.desktop
> M  +4    -2    stage/templates/odf/skyline_morning_wide.desktop
> M  +4    -2    stage/templates/odf/skyline_night.desktop
> M  +4    -2    stage/templates/odf/skyline_night_wide.desktop
> M  +2    -0    words/app/words.appdata.xml
> M  +1    -1    words/part/author/author.desktop
> M  +1    -1    words/part/author/authorpart.desktop
> M  +9    -21   words/part/dockers/KWDebugWidget.cpp
>
> http://commits.kde.org/calligra/b62e5f48ca2783690cc82d9546f21db3ae3b3782
>
> diff --git a/braindump/data/braindump.appdata.xml b/braindump/data/braindump.appdata.xml
> index 800e14a..a0efd72 100644
> --- a/braindump/data/braindump.appdata.xml
> +++ b/braindump/data/braindump.appdata.xml
> @@ -11,6 +11,7 @@
>   <name xml:lang="en-GB">Braindump</name>
>   <name xml:lang="es">Braindump</name>
>   <name xml:lang="fi">Braindump</name>
> +  <name xml:lang="fr">Braindump</name>
>   <name xml:lang="hu">Braindump</name>
>   <name xml:lang="ia">Braindump</name>
>   <name xml:lang="it">Braindump</name>
> @@ -31,6 +32,7 @@
>     <p xml:lang="en-GB">Braindump is a tool to dump and organise the content of your brain (ideas, drawings, images, texts…) to your computer. It works by allowing to create and edit whiteboards, which are infinite canvas on which you can add texts, images, charts, drawings, etc.</p>
>     <p xml:lang="es">Braindump es una herramienta para volcar y organizar el contenido de su cerebro (ideas, dibujos, imágenes, texto...) en su equipo. Permite crear y editar pizarras en blanco, es decir, lienzos infinitos en los que puede añadir textos, imágenes, diagramas, dibujos, etc.</p>
>     <p xml:lang="fi">Braindump on työkalu aivojesi sisällön (ajatusten, piirrosten, kuvien, tekstin…) purkamiseksi ja järjestämiseksi. Se toimii antamalla sinun luoda ja muokata valkotauluja, jotka ovat rajaton kangas tekstillesi, kuvillesi, kaavioillesi, piirroksillesi jne.</p>
> +    <p xml:lang="fr">Braindump est un outil pour mettre en ordre le contenu de votre cerveau (idées, dessins, images, textes…) sur votre ordinateur. Il vous permet de créer et d'éditer des tableaux blancs illimités sur lesquels vous pouvez ajouter des textes, des images, des graphiques, des dessins, etc.</p>
>     <p xml:lang="ia">Braindump es un instrumento pro discargar e organizar le contento de tu cerebro (ideas, designos, imagines, textos...) in tu computator. Illo functiona per permitter crear e modificar tabula blanc, que es telas infinite sur le qual on pote adder textos, imagines, diagrammas, designos, etc.</p>
>     <p xml:lang="it">Braindump è uno strumento per estrarre e organizzare il contenuto del tuo cervello (idee, disegni, immagini, testi...) sul tuo computer. Ti consente di creare e modificare lavagne bianche, che sono tele infinite sulle quali puoi aggiungere testi, immagini, grafici, disegni, ecc.</p>
>     <p xml:lang="nl">Braindump is een hulpmiddel om de inhoud van uw brein te dumpen en te organiseren (ideeën, tekeningen, afbeeldingen, teksten…) naar uw computer. Het werkt door u instaat te stellen whiteboards te bewerken, die oneindige werkvelden zijn waarop u teksten, afbeeldingen, grafieken, tekeningen, etc. kunt toevoegen.</p>
> diff --git a/extras/okularodtgenerator/libokularGenerator_odt.desktop b/extras/okularodtgenerator/libokularGenerator_odt.desktop
> index f9431ee..f174e63 100644
> --- a/extras/okularodtgenerator/libokularGenerator_odt.desktop
> +++ b/extras/okularodtgenerator/libokularGenerator_odt.desktop
> @@ -3,6 +3,7 @@ Type=Service
> Name=OpenDocument Text Document
> Name[ca]=Document de text OpenDocument
> Name[cs]=Textový dokument OpenDocument
> +Name[da]=OpenDocument tekstdokument
> Name[de]=OpenDocument-Text-Dokument
> Name[en_GB]=OpenDocument Text Document
> Name[es]=Documento de texto OpenDocument
> @@ -23,6 +24,7 @@ Name[x-test]=xxOpenDocument Text Documentxx
> Comment=Odt for okular
> Comment[ca]=ODT per a l'Okular
> Comment[cs]=Odt pro Okular
> +Comment[da]=Odt til okular
> Comment[de]=Odt für Okular
> Comment[en_GB]=ODT for okular
> Comment[es]=Odt para Okular
> diff --git a/extras/properties/calligradocinfopropspage.desktop b/extras/properties/calligradocinfopropspage.desktop
> index cb7dbeb..a5545ae 100644
> --- a/extras/properties/calligradocinfopropspage.desktop
> +++ b/extras/properties/calligradocinfopropspage.desktop
> @@ -25,7 +25,7 @@ Name[ko]=Calligra 문서 정보 속성 페이지
> Name[nb]=Calligra dokumentinformasjonsside
> Name[nds]=Dokmentinformatschonen-Egenschappensiet för Calligra
> Name[nl]=Document-info-eigenschappen-pagina van Calligra
> -Name[pl]=Strona właściwości informacji o dokumencie dla Calligry
> +Name[pl]=Strona właściwości dokumentu Calligry
> Name[pt]=Página de Propriedades do Documento do Calligra
> Name[pt_BR]=Página de propriedades do documento do Calligra
> Name[ru]=Страница сведений о документе Calligra
> diff --git a/filters/stage/keynote/import/calligra_filter_key2odp.desktop b/filters/stage/keynote/import/calligra_filter_key2odp.desktop
> index b5a6aa1..241ba79 100644
> --- a/filters/stage/keynote/import/calligra_filter_key2odp.desktop
> +++ b/filters/stage/keynote/import/calligra_filter_key2odp.desktop
> @@ -3,6 +3,7 @@ Type=Service
> Name=Stage Apple Keynote Import Filter
> Name[ca]=Filtre d'importació de l'Apple Keynote per l'Stage
> Name[cs]=Importní filtr Apple Keynote do Stage
> +Name[da]=Apple Keynote-importfilter til Stage
> Name[de]=Stage-Importfilter für Apple Keynote
> Name[en_GB]=Stage Apple Keynote Import Filter
> Name[es]=Filtro de Stage de importación de Apple Keynote
> diff --git a/filters/stage/keynote/import/stage_key_thumbnail.desktop b/filters/stage/keynote/import/stage_key_thumbnail.desktop
> index a1676b8..35dc28a 100644
> --- a/filters/stage/keynote/import/stage_key_thumbnail.desktop
> +++ b/filters/stage/keynote/import/stage_key_thumbnail.desktop
> @@ -3,6 +3,7 @@ Type=Service
> Name=Apple Keynote Documents
> Name[ca]=Documents de l'Apple Keynote
> Name[cs]=Dokumenty Apple Keynote
> +Name[da]=Apple Keynote-dokumenter
> Name[de]=Apple Keynote Dokumente
> Name[en_GB]=Apple Keynote Documents
> Name[es]=Documentos de Apple Keynote
> diff --git a/filters/stage/powerpoint/libokularGenerator_powerpoint_calligra.desktop b/filters/stage/powerpoint/libokularGenerator_powerpoint_calligra.desktop
> index 6b9ef46..70ced07 100644
> --- a/filters/stage/powerpoint/libokularGenerator_powerpoint_calligra.desktop
> +++ b/filters/stage/powerpoint/libokularGenerator_powerpoint_calligra.desktop
> @@ -3,6 +3,7 @@ Type=Service
> Name=Microsoft PowerPoint Presentation
> Name[ca]=Presentacions del Microsoft PowerPoint
> Name[cs]=Prezentace Microsoft PowerPoint
> +Name[da]=Microsoft Powerpoint-præsentation
> Name[de]=Microsoft-Powerpoint-Präsentation
> Name[en_GB]=Microsoft PowerPoint Presentation
> Name[es]=Presentación Microsoft Powerpoint
> @@ -22,6 +23,7 @@ Name[x-test]=xxMicrosoft PowerPoint Presentationxx
> Comment=PPT for Okular
> Comment[ca]=PPT per a l'Okular
> Comment[cs]=PPT pro Okular
> +Comment[da]=PPT til Okular
> Comment[de]=PPT für Okular
> Comment[en_GB]=PPT for Okular
> Comment[es]=PPT para Okular
> diff --git a/filters/stage/pptx/libokularGenerator_pptx_calligra.desktop b/filters/stage/pptx/libokularGenerator_pptx_calligra.desktop
> index 98a620f..5cb6370 100644
> --- a/filters/stage/pptx/libokularGenerator_pptx_calligra.desktop
> +++ b/filters/stage/pptx/libokularGenerator_pptx_calligra.desktop
> @@ -3,6 +3,7 @@ Type=Service
> Name=Microsoft PowerPoint Presentation
> Name[ca]=Presentacions del Microsoft PowerPoint
> Name[cs]=Prezentace Microsoft PowerPoint
> +Name[da]=Microsoft Powerpoint-præsentation
> Name[de]=Microsoft-Powerpoint-Präsentation
> Name[en_GB]=Microsoft PowerPoint Presentation
> Name[es]=Presentación Microsoft Powerpoint
> @@ -22,6 +23,7 @@ Name[x-test]=xxMicrosoft PowerPoint Presentationxx
> Comment=PPTX for Okular
> Comment[ca]=PPTX per a l'Okular
> Comment[cs]=PPTX pro Okular
> +Comment[da]=PPTX til Okular
> Comment[de]=PPTX für Okular
> Comment[en_GB]=PPTX for Okular
> Comment[es]=PPTX para Okular
> diff --git a/filters/words/docx/export/calligra_filter_odt2docx.desktop b/filters/words/docx/export/calligra_filter_odt2docx.desktop
> index 48a6174..106d851 100644
> --- a/filters/words/docx/export/calligra_filter_odt2docx.desktop
> +++ b/filters/words/docx/export/calligra_filter_odt2docx.desktop
> @@ -3,6 +3,7 @@ Type=Service
> Name=MS Word DOCX Export Filter
> Name[ca]=Filtre d'exportació DOCX per al Word de MS
> Name[cs]=Exportní filtr MS Word DOCX
> +Name[da]=MS Word DOCX-eksportfilter
> Name[de]=MS Word DOCX-Exportfilter
> Name[en_GB]=MS Word DOCX Export Filter
> Name[es]=Filtro de exportación a DOCX de MS Word
> diff --git a/filters/words/docx/import/libokularGenerator_docx_calligra.desktop b/filters/words/docx/import/libokularGenerator_docx_calligra.desktop
> index e3fcf6a..5017a01 100644
> --- a/filters/words/docx/import/libokularGenerator_docx_calligra.desktop
> +++ b/filters/words/docx/import/libokularGenerator_docx_calligra.desktop
> @@ -37,6 +37,7 @@ Name[zh_CN]=Microsoft Word 2007 文本文档
> Comment=DOCX for Okular
> Comment[ca]=DOCX per a l'Okular
> Comment[cs]=DOCX pro Okular
> +Comment[da]=DOCX til Okular
> Comment[de]=DOCX für Okular
> Comment[en_GB]=DOCX for Okular
> Comment[es]=DOCX para Okular
> diff --git a/filters/words/msword-odf/libokularGenerator_doc_calligra.desktop b/filters/words/msword-odf/libokularGenerator_doc_calligra.desktop
> index 4a63da8..61ae3d4 100644
> --- a/filters/words/msword-odf/libokularGenerator_doc_calligra.desktop
> +++ b/filters/words/msword-odf/libokularGenerator_doc_calligra.desktop
> @@ -36,6 +36,7 @@ Name[zh_CN]=Microsoft Word 文本文档
> Comment=DOC for Okular
> Comment[ca]=DOC per a l'Okular
> Comment[cs]=DOC pro Okular
> +Comment[da]=DOC til Okular
> Comment[de]=DOC für Okular
> Comment[en_GB]=DOC for Okular
> Comment[es]=DOC para Okular
> diff --git a/filters/words/wiki/export/calligra_filter_odt2wiki.desktop b/filters/words/wiki/export/calligra_filter_odt2wiki.desktop
> index e3f8b690..6e28a8b 100644
> --- a/filters/words/wiki/export/calligra_filter_odt2wiki.desktop
> +++ b/filters/words/wiki/export/calligra_filter_odt2wiki.desktop
> @@ -3,6 +3,7 @@ Type=Service
> Name=Words Wiki Export Filter
> Name[ca]=Filtre d'exportació Wiki per al Words
> Name[cs]=Exportní filtr Words Wiki
> +Name[da]=Words Wiki-eksportfilter
> Name[de]=Words Wiki-Exportfilter
> Name[en_GB]=Words Wiki Export Filter
> Name[es]=Filtro de Words de exportación a Wiki
> diff --git a/filters/words/wordperfect/import/libokularGenerator_wpd_calligra.desktop b/filters/words/wordperfect/import/libokularGenerator_wpd_calligra.desktop
> index c89e518..b9d2334 100644
> --- a/filters/words/wordperfect/import/libokularGenerator_wpd_calligra.desktop
> +++ b/filters/words/wordperfect/import/libokularGenerator_wpd_calligra.desktop
> @@ -34,10 +34,12 @@ Name[zh_CN]=WordPerfect 文本文档
> Comment=WPD for Okular
> Comment[ca]=WPD per a l'Okular
> Comment[cs]=WPD pro Okular
> +Comment[da]=WPD til Okular
> Comment[de]=WPD für Okular
> Comment[en_GB]=WPD for Okular
> Comment[es]=WPD para Okular
> Comment[fi]=WPD Okulariin
> +Comment[ia]=WPD pro Okular
> Comment[it]=WPD per Okular
> Comment[ja]=Okular 用 WPD
> Comment[nb]=WPD for Okular
> diff --git a/gemini/calligragemini.desktop b/gemini/calligragemini.desktop
> index cc4fa73..8d602b4 100644
> --- a/gemini/calligragemini.desktop
> +++ b/gemini/calligragemini.desktop
> @@ -3,22 +3,26 @@ Type=Application
> Name=Calligra Gemini
> Name[ca]=Calligra Gemini
> Name[cs]=Calligra Gemini
> +Name[da]=Calligra Gemini
> Name[de]=Calligra Gemini
> Name[en_GB]=Calligra Gemini
> Name[es]=Calligra Gemini
> Name[fi]=Calligra Gemini
> +Name[ia]=Calligra Gemini
> Name[it]=Calligra Gemini
> Name[nl]=Calligra Gemini
> Name[pl]=Calligra Gemini
> Name[pt]=Calligra Gemini
> Name[pt_BR]=Calligra Gemini
> Name[sk]=Calligra Gemini
> +Name[sv]=Calligra Gemini
> Name[uk]=Calligra Gemini
> Name[x-test]=xxCalligra Geminixx
> Version=1.0
> GenericName=Word Processing and Presentation
> GenericName[ca]=Processament de texts i presentacions
> GenericName[cs]=Práce s textem a prezentacemi
> +GenericName[da]=Tekstbehandling og præsentation
> GenericName[de]=Textverarbeitung und Präsentation
> GenericName[en_GB]=Word Processing and Presentation
> GenericName[es]=Procesador de texto y presentaciones
> @@ -29,6 +33,7 @@ GenericName[pl]=Edytor tekstu i prezentacji
> GenericName[pt]=Processamento de Texto e Apresentações
> GenericName[pt_BR]=Processamento de Texto e Apresentação
> GenericName[sk]=Spracovanie textu a prezentácie
> +GenericName[sv]=Ordbehandling och presentation
> GenericName[uk]=Робота з текстом і презентації
> GenericName[x-test]=xxWord Processing and Presentationxx
> Exec=calligragemini %u
> diff --git a/karbon/data/karbon.appdata.xml b/karbon/data/karbon.appdata.xml
> index f17b95b..62afbcf 100644
> --- a/karbon/data/karbon.appdata.xml
> +++ b/karbon/data/karbon.appdata.xml
> @@ -42,16 +42,14 @@
>   <summary xml:lang="x-test">xxScalable Graphicsxx</summary>
>   <description>
>     <p>
> -      Karbon is a vector drawing application with an user interface that is easy to use, highly customizable and extensible.
> +      Karbon is a vector drawing application with a user interface that is easy to use, highly customizable and extensible.
>       That makes Karbon a great application for users starting to explore the world of vector graphics as well as for artists
>       wanting to create breathtaking vector art.
>     </p>
>     <p xml:lang="ca">El Karbon és una aplicació de dibuix vectorial amb una interfície d'usuari senzilla d'utilitzar, que es pot personalitzar i ampliar molt. Això converteix el Karbon en una gran aplicació per usuaris que comencin a explorar el món dels gràfics vectorial i també pels artistes que volen crear art vectorial que deixi bocabadat.</p>
> -    <p xml:lang="en-GB">Karbon is a vector drawing application with an user interface that is easy to use, highly customisable and extensible. That makes Karbon a great application for users starting to explore the world of vector graphics as well as for artists wanting to create breathtaking vector art.</p>
> -    <p xml:lang="es">Karbon es una aplicación de dibujo vectorial que dispone de una interfaz de usuario intuitiva, altamente personalizable y extensible. Todo ello hace que Karbon sea una gran aplicación para aquellos usuarios que empiezan a explorar el mundo de los gráficos vectoriales así como para los artistas que desean crear impresionantes piezas de arte vectorial.</p>
> +    <p xml:lang="en-GB">Karbon is a vector drawing application with a user interface that is easy to use, highly customisable and extensible. That makes Karbon a great application for users starting to explore the world of vector graphics as well as for artists wanting to create breathtaking vector art.</p>
>     <p xml:lang="fi">Karbon on vektorigrafiikkasovellus, jonka käyttöliittymä on helppo ja laajasti mukautettavissa ja laajennettavissa. Karbon on näin loistava sovellus vektorigrafiikan maailmaan vasta tutustuville käyttäjille samoin kuin henkeäsalpaavaa vektoritaidetta luoville taiteilijoille.</p>
> -    <p xml:lang="it">Karbon è un'applicazione di disegno vettoriale con un'interfaccia utente facile da utilizzare, altamente personalizzabile ed estendibile. Ciò rende Karbon una grande applicazione per gli utenti che iniziano a esplorare il mondo della grafica vettoriale così come per gli artisti che vogliono creare straordinarie opere vettoriali. </p>
> -    <p xml:lang="ja">Karbon は使いやすさを重視したベクタードローイングアプリケーションで、高度なカスタマイズ性と拡張機能を備えています。初めてベクターグラフィックスの世界に入る方だけではなく、息を飲むようなベクターアートを作成したいアーティストにも最適なアプリケーションです</p>
> +    <p xml:lang="it">Karbon è un'applicazione di disegno vettoriale con un'interfaccia utente facile da utilizzare, altamente personalizzabile ed estendibile. Ciò rende Karbon un'ottima applicazione per gli utenti che iniziano a esplorare il mondo della grafica vettoriale così come per gli artisti che vogliono creare straordinarie opere vettoriali. </p>
>     <p xml:lang="nl">Karbon is een toepassing voor tekenen met vectoren met een gebruikersinterface dat gemakkelijk is te gebruiken, zeer goed aan te passen en uit te breiden. Dit maakt Karbon een geweldige toepassing voor gebruikers die de wereld van grafiek met vectoren aan het verkennen zijn evenals voor kunstenaars die adembenemende vectorkunst willen maken.</p>
>     <p xml:lang="pl">Karbon jest programem do rysowania wektorowego z układem sterowania, który jest łatwy w użyciu, wysoce dostosowywalny i rozszerzalny. To czyni Karbon wspaniałym programem dla użytkowników zaczynających poznawanie świata grafiki wektorowej, a artystów zachęca do tworzenie sztuki wektorowej zapierającej dech w piersiach.</p>
>     <p xml:lang="pt">O Karbon é uma aplicação de desenho vectorial com uma interface simples de usar, facilmente configurável e modular. Isto torna o Karbon uma óptima aplicação para os utilizadores que começam a explorar o mundo dos gráficos vectoriais, assim como para os artistas que desejam criar arte vectorial espectacular.</p>
> @@ -59,7 +57,7 @@
>     <p xml:lang="sk">Karbon je vektorová kresliaca aplikácia s používateľským rozhraním jednoduchým na používanie, veľmi prispôsobiteľná a rozšíriteľná. Toto robí z Karbonu výbornú aplikáciu pre používateľov, ktorí začínajú objavovať sveet vektorovej grafiky, ako aj pre umelcov, ktorí chcú vytvárať dych vyrážajúce vektorové umenie.</p>
>     <p xml:lang="sv">Karbon är ett vektorritprogram med ett användargränssnitt som är lätt att använda, ytterst anpassningsbart och utökningsbart. Det gör Karbon till ett utmärkt program för användare som börjar utforska vektorgrafikvärlden samt för konstnärer som vill skapa hänförande vektorkonst.</p>
>     <p xml:lang="uk">Karbon — програма для векторного малювання з простим, гнучким та придатним до розширення інтерфейсом користувача. Це робить Karbon чудовою програмою для користувачів, які починають знайомитися зі світом векторної графіки, а також для художників, які хочуть створити захоплюючі векторні твори.</p>
> -    <p xml:lang="x-test">xxKarbon is a vector drawing application with an user interface that is easy to use, highly customizable and extensible. That makes Karbon a great application for users starting to explore the world of vector graphics as well as for artists wanting to create breathtaking vector art.xx</p>
> +    <p xml:lang="x-test">xxKarbon is a vector drawing application with a user interface that is easy to use, highly customizable and extensible. That makes Karbon a great application for users starting to explore the world of vector graphics as well as for artists wanting to create breathtaking vector art.xx</p>
>     <p>Features:</p>
>     <p xml:lang="ca">Característiques:</p>
>     <p xml:lang="cs">Vlastnosti:</p>
> @@ -124,6 +122,7 @@
>       <li xml:lang="en-GB">Customisable user interface with freely placeable toolbars and dockers</li>
>       <li xml:lang="es">Interfaz de usuario personalizable con barras de herramientas y acoplables que se pueden posicionar libremente en cualquier lugar.</li>
>       <li xml:lang="fi">Mukautettava käyttöliittymä, jonka työkalurivit ja telakat ovat vapaasti sijoitettavissa</li>
> +      <li xml:lang="ia">Interfacie de usator personalisabile con barra de instrumentos e stivatores (dockers) liberemente positionabile</li>
>       <li xml:lang="it">Interfaccia utente personalizzabile con barre degli strumenti posizionabili liberamente e aree di aggancio</li>
>       <li xml:lang="nl">Aan te passen gebruikersinterface met vrij te plaatsen werkbalken en verankeringen</li>
>       <li xml:lang="pl">Układ sterowania z dowolnie umieszczanymi paskami narzędzi i dokowaniami</li>
> diff --git a/kexi/kexi.appdata.xml b/kexi/kexi.appdata.xml
> index 97e6622..60d0676 100644
> --- a/kexi/kexi.appdata.xml
> +++ b/kexi/kexi.appdata.xml
> @@ -92,7 +92,7 @@
>       <li xml:lang="it">Progettazione completamente visuale di tabelle, query e report</li>
>       <li xml:lang="ja">テーブル、クエリー、フォームおよびレポートをすべて視覚的にでデザインできます</li>
>       <li xml:lang="nl">Volledige visueel ontwerpen van tabellen, zoekopdrachten, formulieren en rapporten</li>
> -      <li xml:lang="pl">W pełni wizualna możliwość tworzenia tabel, zapytań, formularzy i sprawozdań</li>
> +      <li xml:lang="pl">W pełni wizualna możliwość tworzenia tabel, zapytań, formularzy i raportów</li>
>       <li xml:lang="pt">Desenhadores visuais completos para tabelas, pesquisas, formulários e relatórios</li>
>       <li xml:lang="pt-BR">Desenhos visuais completos para tabelas, pesquisas, formulários e relatórios</li>
>       <li xml:lang="sk">Plne vizuálny návrh pre tabuľky, dotazy, formuláre a správy</li>
> diff --git a/kexi/migration/txt/keximigrate_txt.desktop b/kexi/migration/txt/keximigrate_txt.desktop
> index 03147fa..df20ca5 100644
> --- a/kexi/migration/txt/keximigrate_txt.desktop
> +++ b/kexi/migration/txt/keximigrate_txt.desktop
> @@ -1,6 +1,7 @@
> [Desktop Entry]
> Name=TSV
> Name[ca]=TSV
> +Name[da]=TSV
> Name[de]=TSV
> Name[en_GB]=TSV
> Name[es]=TSV
> @@ -20,6 +21,7 @@ Name[uk]=TSV
> Name[x-test]=xxTSVxx
> Comment="Tab Separated Values" Document Import Plugin for Kexi
> Comment[ca]=Connector d'importació de documents «Valors separats per tabulacions» (TSV) pel Kexi
> +Comment[da]=Importplugin til "tabulatorseparerede værdier"-dokumenter (TSV) til Kexi
> Comment[de]=„Durch Tabulator getrennte Werte“-Dokument-Importmodul für Kexi
> Comment[en_GB]="Tab Separated Values" Document Import Plugin for Kexi
> Comment[es]=Complemento de importación de documentos de «valores separados por tabuladores» para Kexi
> diff --git a/kexi/plugins/tables/kexitabledesignerview.cpp b/kexi/plugins/tables/kexitabledesignerview.cpp
> index 8352408..f9d761e 100644
> --- a/kexi/plugins/tables/kexitabledesignerview.cpp
> +++ b/kexi/plugins/tables/kexitabledesignerview.cpp
> @@ -1193,7 +1193,7 @@ tristate KexiTableDesignerView::buildSchema(KexiDB::TableSchema &schema, bool be
>                      "for creating relations between database tables. "
>                      "Do you want a primary key to be automatically added now?</note></para>"
>                      "<para>If you want to add a primary key by hand, press <interface>Cancel</interface> "
> -                     "to cancel saving table design.</para></note>", schema.name()),
> +                     "to cancel saving table design.</para>", schema.name()),
>                 QString(),
>                 KGuiItem(i18nc("Add Database Primary Key to a Table", "&Add Primary Key"), koIconName("key")),
>                 KGuiItem(i18nc("Do Not Add Database Primary Key to a Table", "Do &Not Add"), KStandardGuiItem::no().icon()),
> diff --git a/krita/data/krita_filefilter.desktop b/krita/data/krita_filefilter.desktop
> index 808a8c7..d5f4885 100644
> --- a/krita/data/krita_filefilter.desktop
> +++ b/krita/data/krita_filefilter.desktop
> @@ -4,11 +4,16 @@ X-KDE-ServiceType=Krita/FileFilter
> Comment=Krita FileFilter
> Comment[ca]=Filtre de fitxers per al Krita
> Comment[cs]=Krita FileFilter
> +Comment[da]=Krita filfilter
> Comment[de]=Krita-Dateifilter
> +Comment[en_GB]=Krita FileFilter
> +Comment[it]=Filtro file per Krita
> Comment[nl]=Bestandsfilter voor Krita
> Comment[pl]=Filtr plików Krita
> Comment[pt]=Filtro de Ficheiros do Krita
> +Comment[pt_BR]=Filtro de arquivos do Krita
> Comment[sk]=Filter súborov Krita
> +Comment[sv]=Krita filfilter
> Comment[uk]=Фільтр файлів для Krita
> Comment[x-test]=xxKrita FileFilterxx
>
> diff --git a/krita/data/templates/design/web_design.desktop b/krita/data/templates/design/web_design.desktop
> index cdc74ce..fe48671 100644
> --- a/krita/data/templates/design/web_design.desktop
> +++ b/krita/data/templates/design/web_design.desktop
> @@ -3,6 +3,7 @@ Icon=template_web_design
> Name=Web Design [ 2160x1440 , 72ppi RGB , 8bit ]
> Name[ca]=Disseny Web [ 2160x1440 / 72ppi RGB / 8bit ]
> Name[cs]=Návrh webu [ 2160x1440 , 72ppi RGB , 8bit ]
> +Name[da]=Webdesign [ 2160x1440 , 72ppi RGB , 8bit ]
> Name[de]=Web-Design [ 2160x1440 , 72ppi RGB , 8bit ]
> Name[en_GB]=Web Design [ 2160x1440 , 72ppi RGB , 8bit ]
> Name[es]=Diseño de web 4:3 [ 2160x1440 , 72ppi RGB , 8bit ]
> diff --git a/krita/data/templates/texture/Texture1024x10248bitsrgb.desktop b/krita/data/templates/texture/Texture1024x10248bitsrgb.desktop
> index 18ecc7e..7282e94 100644
> --- a/krita/data/templates/texture/Texture1024x10248bitsrgb.desktop
> +++ b/krita/data/templates/texture/Texture1024x10248bitsrgb.desktop
> @@ -3,6 +3,7 @@ Icon=template_texture
> Name=Texture 1024x1024 8bit srgb
> Name[ca]=Textura 1024x1024 8bit SRGB
> Name[cs]=Textura 1024x1024 8bit srgb
> +Name[da]=Tekstur 1024x1024 8bit srgb
> Name[de]=Textur 1024x1024 8bit srgb
> Name[en_GB]=Texture 1024x1024 8bit srgb
> Name[es]=Textura 1024x1024 8bits srgb
> diff --git a/krita/data/templates/texture/Texture2048x20488bitsrgb.desktop b/krita/data/templates/texture/Texture2048x20488bitsrgb.desktop
> index 3b50404..ad213d7 100644
> --- a/krita/data/templates/texture/Texture2048x20488bitsrgb.desktop
> +++ b/krita/data/templates/texture/Texture2048x20488bitsrgb.desktop
> @@ -3,6 +3,7 @@ Icon=template_texture
> Name=Texture 2048x2048 8bit srgb
> Name[ca]=Textura 2048x2048 8bit SRGB
> Name[cs]=Textura 2048x2048 8bit srgb
> +Name[da]=Tekstur 2048x2048 8bit srgb
> Name[de]=Textur 2048x2048 8bit srgb
> Name[en_GB]=Texture 2048x2048 8bit srgb
> Name[es]=Textura 2048x2048 8bits srgb
> diff --git a/krita/data/templates/texture/Texture256x2568bitsrgb.desktop b/krita/data/templates/texture/Texture256x2568bitsrgb.desktop
> index f85ea06..d4f9b58 100644
> --- a/krita/data/templates/texture/Texture256x2568bitsrgb.desktop
> +++ b/krita/data/templates/texture/Texture256x2568bitsrgb.desktop
> @@ -3,6 +3,7 @@ Icon=template_texture
> Name=Texture 256x256 8bit srgb
> Name[ca]=Textura 256x256 8bit SRGB
> Name[cs]=Textura 256x256 8bit srgb
> +Name[da]=Tekstur 256x256 8bit srgb
> Name[de]=Textur 256x256 8bit srgb
> Name[en_GB]=Texture 256x256 8bit srgb
> Name[es]=Textura 256x256 8bits srgb
> diff --git a/krita/data/templates/texture/Texture4096x40968bitsrgb.desktop b/krita/data/templates/texture/Texture4096x40968bitsrgb.desktop
> index 1884f06..c94a155 100644
> --- a/krita/data/templates/texture/Texture4096x40968bitsrgb.desktop
> +++ b/krita/data/templates/texture/Texture4096x40968bitsrgb.desktop
> @@ -3,6 +3,7 @@ Icon=template_texture
> Name=Texture 4096x4096 8bit srgb
> Name[ca]=Textura 4096x4096 8bit SRGB
> Name[cs]=Textura 4096x4096 8bit srgb
> +Name[da]=Tekstur 4096x4096 8bit srgb
> Name[de]=Textur 4096x4096 8bit srgb
> Name[en_GB]=Texture 4096x4096 8bit srgb
> Name[es]=Textura 4096x4096 8bits srgb
> diff --git a/krita/data/templates/texture/Texture512x5128bitsrgb.desktop b/krita/data/templates/texture/Texture512x5128bitsrgb.desktop
> index e991d9c..8d5833c 100644
> --- a/krita/data/templates/texture/Texture512x5128bitsrgb.desktop
> +++ b/krita/data/templates/texture/Texture512x5128bitsrgb.desktop
> @@ -3,6 +3,7 @@ Icon=template_texture
> Name=Texture 512x512 8bit srgb
> Name[ca]=Textura 512x512 8bit SRGB
> Name[cs]=Textura 512x512 8bit srgb
> +Name[da]=Tekstur 512x512 8bit srgb
> Name[de]=Textur 512x512 8bit srgb
> Name[en_GB]=Texture 512x512 8bit srgb
> Name[es]=Textura 512x512 8bits srgb
> diff --git a/krita/gemini/kritagemini.desktop b/krita/gemini/kritagemini.desktop
> index 8ab9a82..f20da78 100644
> --- a/krita/gemini/kritagemini.desktop
> +++ b/krita/gemini/kritagemini.desktop
> @@ -23,7 +23,7 @@ GenericName[lt]=Skaitmeninis piešimas
> GenericName[mr]=डिजिटल पेंटिंग
> GenericName[nb]=Digital maling
> GenericName[nl]=Digitaal schilderen
> -GenericName[pl]=Cyfrowe malowanie
> +GenericName[pl]=Cyfrowe malowanie
> GenericName[pt]=Pintura Digital
> GenericName[pt_BR]=Pintura digital
> GenericName[ru]=Цифровая живопись
> diff --git a/krita/integration/thumbnail/kritaanimation_kranim_thumbnail.desktop b/krita/integration/thumbnail/kritaanimation_kranim_thumbnail.desktop
> new file mode 100644
> index 0000000..1f9dd72
> --- /dev/null
> +++ b/krita/integration/thumbnail/kritaanimation_kranim_thumbnail.desktop
> @@ -0,0 +1,30 @@
> +
> +[Desktop Entry]
> +Type=Service
> +Name=Krita Animation Documents
> +Name[ca]=Documents d'animació del Krita
> +Name[cs]=Dokumenty animace Krita
> +Name[da]=Krita Animation-dokumenter
> +Name[de]=Krita-Animationsdokumente
> +Name[en_GB]=Krita Animation Documents
> +Name[es]=Documentos de Krita animación
> +Name[fi]=Krita-animaatiotiedostot
> +Name[ia]=Documentos de animation de Krita
> +Name[it]=Documenti di animazione di Krita
> +Name[ja]=Krita Animation 文書
> +Name[nb]=Krita animasjonsdokumenter
> +Name[nl]=Animatiedocumenten van Krita
> +Name[pl]=Dokumenty animacji Krita
> +Name[pt]=Documentos do Krita Animação
> +Name[pt_BR]=Documentos de animação do Krita
> +Name[sk]=Dokumenty animácií Krita
> +Name[sv]=Krita-animeringsdokument
> +Name[uk]=Документи анімації Krita
> +Name[x-test]=xxKrita Animation Documentsxx
> +
> +
> +X-KDE-ServiceTypes=ThumbCreator
> +MimeType=application/x-krita-animation;
> +
> +X-KDE-Library=kritathumbnail
> +CacheThumbnail=true
> diff --git a/krita/krita.appdata.xml b/krita/krita.appdata.xml
> index 6556f7a..9b91f5e 100644
> --- a/krita/krita.appdata.xml
> +++ b/krita/krita.appdata.xml
> @@ -44,6 +44,7 @@
>     <p xml:lang="en-GB">It is perfect for sketching and painting, and presents an end–to–end solution for creating digital painting files from scratch by masters.</p>
>     <p xml:lang="es">Es perfecto para diseñar y pintar, y ofrece una solución completa para crear desde cero archivos de pintura digital apta para profesionales.</p>
>     <p xml:lang="fi">Se on täydellinen luonnosteluun ja maalaukseen ja tarjoaa kokonaisratkaisun digitaalisten kuvatiedostojen luomiseen alusta alkaen.</p>
> +    <p xml:lang="ia">Illo es perfecte pro schizzar e pinger, e presenta un solution ab fin al fin pro crear files de pictura digital ab grattamentos per maestros.</p>
>     <p xml:lang="it">Perfetto per fare schizzi e dipingere, prevede una soluzione completa che consente agli artisti di creare file di dipinti digitali partendo da zero.</p>
>     <p xml:lang="nl">Het is perfect voor schetsen en schilderen en zet een end–to–end oplossing voor het maken van digitale bestanden voor schilderingen vanuit het niets door meesters.</p>
>     <p xml:lang="pl">Nadaje się perfekcyjnie do szkicowania i malowania i dostarcza zupełnego rozwiązania dla tworzenia plików malowideł cyfrowych od zalążka.</p>
> diff --git a/krita/krita.desktop b/krita/krita.desktop
> index f0a74ee..0a7d90b 100644
> --- a/krita/krita.desktop
> +++ b/krita/krita.desktop
> @@ -84,7 +84,7 @@ GenericName[lt]=Skaitmeninis piešimas
> GenericName[mr]=डिजिटल पेंटिंग
> GenericName[nb]=Digital maling
> GenericName[nl]=Digitaal schilderen
> -GenericName[pl]=Cyfrowe malowanie
> +GenericName[pl]=Cyfrowe malowanie
> GenericName[pt]=Pintura Digital
> GenericName[pt_BR]=Pintura digital
> GenericName[ru]=Цифровая живопись
> @@ -117,7 +117,7 @@ Comment[lt]=Skaitmeninis piešimas
> Comment[mr]=डिजिटल पेंटिंग
> Comment[nb]=Digital maling
> Comment[nl]=Digitaal schilderen
> -Comment[pl]=Cyfrowe malowanie
> +Comment[pl]=Cyfrowe malowanie
> Comment[pt]=Pintura Digital
> Comment[pt_BR]=Pintura digital
> Comment[ru]=Цифровая живопись
> diff --git a/krita/plugins/extensions/dockers/animator/krita_animator.desktop b/krita/plugins/extensions/dockers/animator/krita_animator.desktop
> new file mode 100644
> index 0000000..7856afd
> --- /dev/null
> +++ b/krita/plugins/extensions/dockers/animator/krita_animator.desktop
> @@ -0,0 +1,41 @@
> +[Desktop Entry]
> +Name=Animator
> +Name[ca]=Animador
> +Name[cs]=Nástroj pro animace
> +Name[da]=Animator
> +Name[de]=Animator
> +Name[en_GB]=Animator
> +Name[es]=Animador
> +Name[it]=Animatore
> +Name[ja]=アニメータ
> +Name[nb]=Animator
> +Name[nl]=Animator
> +Name[pl]=Animator
> +Name[pt]=Animador
> +Name[pt_BR]=Animador
> +Name[sk]=Animátor
> +Name[sv]=Animeringsverktyg
> +Name[uk]=Animator
> +Name[x-test]=xxAnimatorxx
> +Comment=Animator
> +Comment[ca]=Animador
> +Comment[cs]=Nástroj pro animace
> +Comment[da]=Animator
> +Comment[de]=Animator
> +Comment[en_GB]=Animator
> +Comment[es]=Animador
> +Comment[it]=Animatore
> +Comment[ja]=アニメータ
> +Comment[nb]=Animator
> +Comment[nl]=Animator
> +Comment[pl]=Animator
> +Comment[pt]=Animador
> +Comment[pt_BR]=Animador
> +Comment[sk]=Animátor
> +Comment[sv]=Animeringsverktyg
> +Comment[uk]=Аніматор
> +Comment[x-test]=xxAnimatorxx
> +X-KDE-ServiceTypes=Krita/Dock
> +Type=Service
> +X-KDE-Library=kritaanimator
> +X-Krita-Version=28
> diff --git a/krita/plugins/extensions/dockers/colorslider/krita_colorslider.desktop b/krita/plugins/extensions/dockers/colorslider/krita_colorslider.desktop
> index 73ce1c0..672db44 100644
> --- a/krita/plugins/extensions/dockers/colorslider/krita_colorslider.desktop
> +++ b/krita/plugins/extensions/dockers/colorslider/krita_colorslider.desktop
> @@ -1,6 +1,7 @@
> [Desktop Entry]
> Name=ColorSlider
> Name[ca]=ControlLliscantColor
> +Name[da]=ColorSlider
> Name[de]=Farbschieber
> Name[en_GB]=ColourSlider
> Name[es]=Selector de color
> @@ -8,7 +9,7 @@ Name[it]=Cursore del colore
> Name[ja]=カラースライダー
> Name[nb]=ColorSlider
> Name[nl]=KleurSchuifknop
> -Name[pl]=Suwa koloru
> +Name[pl]=Suwak koloru
> Name[pt]=Barras de Cores
> Name[pt_BR]=Seletor de Cores
> Name[sk]=Posuvník farieb
> diff --git a/krita/plugins/extensions/layersplit/kritalayersplit.desktop b/krita/plugins/extensions/layersplit/kritalayersplit.desktop
> index 427dbeb..3605bda 100644
> --- a/krita/plugins/extensions/layersplit/kritalayersplit.desktop
> +++ b/krita/plugins/extensions/layersplit/kritalayersplit.desktop
> @@ -1,9 +1,15 @@
> [Desktop Entry]
> Name=Layer Splitter
> Name[ca]=Separador de capes
> +Name[da]=Lagopdeler
> +Name[en_GB]=Layer Splitter
> +Name[it]=Divisore di livelli
> Name[nl]=Splitser van lagen
> +Name[pl]=Podzielnik warstwy
> Name[pt]=Divisor de Camadas
> +Name[pt_BR]=Divisor de camadas
> Name[sk]=Rozdeľovač vrstiev
> +Name[sv]=Lagerdelning
> Name[uk]=Роздільник шарів
> Name[x-test]=xxLayer Splitterxx
> X-KDE-ServiceTypes=Krita/ViewPlugin
> diff --git a/krita/plugins/extensions/resourcemanager/kritaresourcemanager.desktop b/krita/plugins/extensions/resourcemanager/kritaresourcemanager.desktop
> index 09ff26a..aebe72c 100644
> --- a/krita/plugins/extensions/resourcemanager/kritaresourcemanager.desktop
> +++ b/krita/plugins/extensions/resourcemanager/kritaresourcemanager.desktop
> @@ -2,6 +2,7 @@
> Name=Resource Manager
> Name[ca]=Gestor de recursos
> Name[cs]=Správce zdrojů
> +Name[da]=Håndtering af ressourcer
> Name[de]=Ressourcenverwaltung
> Name[en_GB]=Resource Manager
> Name[es]=Gestor de recursos
> diff --git a/krita/plugins/filters/indexcolors/kritaindexcolors.desktop b/krita/plugins/filters/indexcolors/kritaindexcolors.desktop
> index 732ef12..05d153b 100644
> --- a/krita/plugins/filters/indexcolors/kritaindexcolors.desktop
> +++ b/krita/plugins/filters/indexcolors/kritaindexcolors.desktop
> @@ -1,6 +1,7 @@
> [Desktop Entry]
> Name=Index Colors Filter
> Name[ca]=Filtre de colors indexats
> +Name[da]=Indeksfarvefilter
> Name[de]=Farbfilter-Index
> Name[en_GB]=Index Colours Filter
> Name[es]=Filtros de colores indexados
> @@ -18,6 +19,7 @@ Name[uk]=Фільтр індексованих кольорів
> Name[x-test]=xxIndex Colors Filterxx
> Comment=Reduce the amount of colors in the picture to a pre-defined palette.
> Comment[ca]=Redueix la quantitat de colors en la imatge a una paleta predefinida.
> +Comment[da]=Reducér mængden af farver i billedet til en prædefineret palette.
> Comment[de]=Reduziert die Anzahl der Farben im Bild auf eine vordefinierte Palette.
> Comment[en_GB]=Reduce the amount of colours in the picture to a pre-defined palette.
> Comment[es]=Reduce la cantidad de colores que hay en una imagen a una paleta predefinida.
> diff --git a/krita/plugins/filters/posterize/kritaposterize.desktop b/krita/plugins/filters/posterize/kritaposterize.desktop
> index ab98f09..fb12ea2 100644
> --- a/krita/plugins/filters/posterize/kritaposterize.desktop
> +++ b/krita/plugins/filters/posterize/kritaposterize.desktop
> @@ -1,6 +1,7 @@
> [Desktop Entry]
> Name=Posterize Filter
> Name[ca]=Filtre de posterització
> +Name[da]=Posteriseringsfilter
> Name[de]=Posterisation-Filter
> Name[en_GB]=Posterise Filter
> Name[es]=Filtro posterizar
> @@ -19,6 +20,7 @@ Name[uk]=Фільтр постеризації
> Name[x-test]=xxPosterize Filterxx
> Comment=Reduce the amount of colors in the picture to a fixed interval
> Comment[ca]=Redueix la quantitat de colors en la imatge a un interval fix
> +Comment[da]=Reducér mængden af farver i billedet til et fast interval
> Comment[de]=Reduziert die Anzahl der Farben im Bild auf ein festgelegtes Intervall (Tontrennung)
> Comment[en_GB]=Reduce the amount of colours in the picture to a fixed interval
> Comment[es]=Reduce la cantidad de colores que hay en una imagen a un intervalo fijo
> diff --git a/krita/plugins/formats/heightmap/krita_heightmap_export.desktop b/krita/plugins/formats/heightmap/krita_heightmap_export.desktop
> index b1d128a..550d69e 100644
> --- a/krita/plugins/formats/heightmap/krita_heightmap_export.desktop
> +++ b/krita/plugins/formats/heightmap/krita_heightmap_export.desktop
> @@ -3,6 +3,7 @@ Icon=
> Name=Krita HeightMap Export Filter
> Name[ca]=Filtre d'exportació HeightMap per al Krita
> Name[cs]=Exportní filtr výškové mapy pro Krita
> +Name[da]=HeightMap-eksportfilter til Krita
> Name[de]=Krita Höhenkarten-Exportfilter
> Name[en_GB]=Krita HeightMap Export Filter
> Name[es]=Filtro de Krita de exportación a HeightMap
> diff --git a/krita/plugins/formats/heightmap/krita_heightmap_import.desktop b/krita/plugins/formats/heightmap/krita_heightmap_import.desktop
> index fe3454f..fb59c15 100644
> --- a/krita/plugins/formats/heightmap/krita_heightmap_import.desktop
> +++ b/krita/plugins/formats/heightmap/krita_heightmap_import.desktop
> @@ -3,6 +3,7 @@ Icon=
> Name=Krita HeightMap Import Filter
> Name[ca]=Filtre d'importació HeightMap per al Krita
> Name[cs]=Importní filtr výškové mapy pro Kritu
> +Name[da]=HeightMap-importfilter til Krita
> Name[de]=Krita-Höhenkarten-Importfilter
> Name[en_GB]=Krita HeightMap Import Filter
> Name[es]=Filtro de Krita de importación de HeightMap
> diff --git a/krita/plugins/formats/kranimseq/kranimseq_export.desktop b/krita/plugins/formats/kranimseq/kranimseq_export.desktop
> new file mode 100644
> index 0000000..4d9edca
> --- /dev/null
> +++ b/krita/plugins/formats/kranimseq/kranimseq_export.desktop
> @@ -0,0 +1,26 @@
> +[Desktop Entry]
> +Name=Krita PNG Sequence Export Filter
> +Name[ca]=Filtre d'exportació de seqüències PNG per al Krita
> +Name[cs]=Exportní filtr sekvence PNG pro Kritu
> +Name[da]=PNG-sekvens-eksportfilter til Krita
> +Name[en_GB]=Krita PNG Sequence Export Filter
> +Name[es]=Filtro de Krita de exportación a  secuencia PNG
> +Name[fi]=Kritan PNG Sequence -vientisuodatin
> +Name[it]=Filtro di esportazione sequenza PNG per Krita
> +Name[ja]=Krita PNG シーケンスエクスポートフィルタ
> +Name[nb]=PNG sekvens-eksportfilter for Krita
> +Name[nl]=PNG volgorde exportfilter voor Krita
> +Name[pl]=Filtr eksportu szeregu PNG z Krita
> +Name[pt]=Filtro de Exportação de Sequências em PNG para o Krita
> +Name[pt_BR]=Filtro de exportação sequências em PNG para Krita
> +Name[sk]=Exportný filter Krita PNG sekvencia
> +Name[sv]=Krita PNG-sekvensexportfilter
> +Name[uk]=Фільтр експорту послідовності зображень PNG для Krita
> +Name[x-test]=xxKrita PNG Sequence Export Filterxx
> +X-KDE-Export=application/x-kranim-sequence
> +X-KDE-ServiceTypes=Krita/FileFilter
> +Type=Service
> +X-KDE-Import=application/x-krita
> +X-KDE-Weight=1
> +X-KDE-Library=kranimseq
> +NoDisplay=true
> diff --git a/krita/plugins/formats/tga/krita_tga_export.desktop b/krita/plugins/formats/tga/krita_tga_export.desktop
> index 7d4d222..14560c4 100644
> --- a/krita/plugins/formats/tga/krita_tga_export.desktop
> +++ b/krita/plugins/formats/tga/krita_tga_export.desktop
> @@ -2,6 +2,7 @@
> Name=Krita TGA Export Filter
> Name[ca]=Filtre d'exportació TGA per al Krita
> Name[cs]=Exportní filtr do formátu TGS pro Kritu
> +Name[da]=TGA-eksportfilter til Krita
> Name[de]=Krita-TGA-Exportfilter
> Name[en_GB]=Krita TGA Export Filter
> Name[es]=Filtro de Krita de exportación a TGA
> diff --git a/krita/plugins/formats/tga/krita_tga_import.desktop b/krita/plugins/formats/tga/krita_tga_import.desktop
> index 6c62b95..13634cb 100644
> --- a/krita/plugins/formats/tga/krita_tga_import.desktop
> +++ b/krita/plugins/formats/tga/krita_tga_import.desktop
> @@ -2,6 +2,7 @@
> Name=Krita TGA Import Filter
> Name[ca]=Filtre d'importació TGA per al Krita
> Name[cs]=Importní filtr formátu TGA pro Kritu
> +Name[da]=TGA-importfilter til Krita
> Name[de]=Krita-TGA-Importfilter
> Name[en_GB]=Krita TGA Import Filter
> Name[es]=Filtro de Krita de importación de TGA
> diff --git a/krita/plugins/paintops/gridbrush/kritagridpaintop.desktop b/krita/plugins/paintops/gridbrush/kritagridpaintop.desktop
> index 2665a8b..4b55a23 100644
> --- a/krita/plugins/paintops/gridbrush/kritagridpaintop.desktop
> +++ b/krita/plugins/paintops/gridbrush/kritagridpaintop.desktop
> @@ -1,6 +1,7 @@
> [Desktop Entry]
> Name=Grid Brush
> Name[ca]=Pinzell de graella
> +Name[da]=Gitterpensel
> Name[de]=Gitter-Pinsel
> Name[en_GB]=Grid Brush
> Name[es]=Pincel de rejilla
> diff --git a/krita/plugins/tools/tool_transform2/kis_free_transform_strategy_gsl_helpers.cpp b/krita/plugins/tools/tool_transform2/kis_free_transform_strategy_gsl_helpers.cpp
> index 034b3ec..c6d7d93 100644
> --- a/krita/plugins/tools/tool_transform2/kis_free_transform_strategy_gsl_helpers.cpp
> +++ b/krita/plugins/tools/tool_transform2/kis_free_transform_strategy_gsl_helpers.cpp
> @@ -336,7 +336,7 @@ namespace GSL
>     {
>         QMessageBox::warning(0,
>                              i18nc("@title:window", "Krita"),
> -                             i18n("Sorry, Krita was build without the support "
> +                             i18n("Sorry, Krita was built without the support "
>                                   "of GNU Scientific Library, so you cannot scale "
>                                   "the selection with handles. Please compile "
>                                   "Krita with GNU Scientific Library support, or use "
> diff --git a/krita/sketch/kritasketch.desktop b/krita/sketch/kritasketch.desktop
> index 3ffd4b1..6b801e1 100644
> --- a/krita/sketch/kritasketch.desktop
> +++ b/krita/sketch/kritasketch.desktop
> @@ -50,7 +50,7 @@ GenericName[lt]=Skaitmeninis piešimas
> GenericName[mr]=डिजिटल पेंटिंग
> GenericName[nb]=Digital maling
> GenericName[nl]=Digitaal schilderen
> -GenericName[pl]=Cyfrowe malowanie
> +GenericName[pl]=Cyfrowe malowanie
> GenericName[pt]=Pintura Digital
> GenericName[pt_BR]=Pintura digital
> GenericName[ru]=Цифровая живопись
> diff --git a/krita/ui/forms/wdg_url_requester.ui b/krita/ui/forms/wdg_url_requester.ui
> index cb3ca50..53dfda3 100644
> --- a/krita/ui/forms/wdg_url_requester.ui
> +++ b/krita/ui/forms/wdg_url_requester.ui
> @@ -16,9 +16,6 @@
>     <verstretch>0</verstretch>
>    </sizepolicy>
>   </property>
> -  <property name="windowTitle">
> -   <string>Form</string>
> -  </property>
>   <layout class="QVBoxLayout" name="verticalLayout">
>    <item>
>     <layout class="QHBoxLayout" name="horizontalLayout">
> diff --git a/libs/kopageapp/tools/kopa_tool.desktop b/libs/kopageapp/tools/kopa_tool.desktop
> index 3bd7dd2..e8e14ce 100644
> --- a/libs/kopageapp/tools/kopa_tool.desktop
> +++ b/libs/kopageapp/tools/kopa_tool.desktop
> @@ -3,6 +3,7 @@ Type=ServiceType
> X-KDE-ServiceType=CalligraPageApp/Tool
> Comment=Tool for Calligra Page Applications
> Comment[ca]=Eina per les aplicacions de pàgina del Calligra
> +Comment[da]=Værktøj til Calligra Page-programmer
> Comment[de]=Werkzeug für Calligra-Seitenanwendungen
> Comment[en_GB]=Tool for Calligra Page Applications
> Comment[es]=Herramienta para las aplicaciones de páginas de Calligra
> diff --git a/libs/koreport/koreport_itemplugin.desktop b/libs/koreport/koreport_itemplugin.desktop
> index 5c6c526..fdfa248 100644
> --- a/libs/koreport/koreport_itemplugin.desktop
> +++ b/libs/koreport/koreport_itemplugin.desktop
> @@ -22,7 +22,7 @@ Comment[kk]=KoReport нысан плагині
> Comment[nb]=Programtillegg for KoReport-element
> Comment[nds]=Moduul för KoReport-Element
> Comment[nl]=Plug-in voor KoReport-item
> -Comment[pl]=Wtyczka elementu KoReport
> +Comment[pl]=Wtyczka dostarczająca elementy raportu
> Comment[pt]='Plugin' de Itens do KoReport
> Comment[pt_BR]=Plugin de itens do KoReport
> Comment[ru]=Модуль KoReport
> diff --git a/libs/kotext/KoSection.cpp b/libs/kotext/KoSection.cpp
> index a651fd4..eb83b49 100644
> --- a/libs/kotext/KoSection.cpp
> +++ b/libs/kotext/KoSection.cpp
> @@ -40,7 +40,6 @@ public:
>     explicit KoSectionPrivate(const QTextDocument *_document)
>         : manager(KoTextDocument(_document).sectionManager())
>         , sectionStyle(0)
> -        , modelItem(0)
>     {
>         Q_ASSERT(manager);
>         name = manager->possibleNewName();
> @@ -62,7 +61,6 @@ public:
>     QScopedPointer<KoSectionEnd> sectionEnd; //< pointer to the corresponding section end
>     int level; //< level of the section in document, root sections have 0 level
>     QPair<int, int> bounds; //< start and end position of section in QDocument
> -    QStandardItem *modelItem;
> };
>
> KoSection::KoSection(const QTextCursor &cursor)
> @@ -107,8 +105,8 @@ bool KoSection::setName(const QString &name)
>     }
>
>     if (d->manager->isValidNewName(name)) {
> -        d->manager->sectionRenamed(d->name, name);
>         d->name = name;
> +        d->manager->invalidate();
>         return true;
>     }
>     return false;
> @@ -190,15 +188,3 @@ void KoSection::setLevel(int level)
>     Q_D(KoSection);
>     d->level = level;
> }
> -
> -QStandardItem *KoSection::modelItem()
> -{
> -    Q_D(KoSection);
> -    return d->modelItem;
> -}
> -
> -void KoSection::setModelItem(QStandardItem *item)
> -{
> -    Q_D(KoSection);
> -    d->modelItem = item;
> -}
> diff --git a/libs/kotext/KoSection.h b/libs/kotext/KoSection.h
> index 8183958..82f4c75 100644
> --- a/libs/kotext/KoSection.h
> +++ b/libs/kotext/KoSection.h
> @@ -22,10 +22,11 @@
>
> #include "kotext_export.h"
>
> +#include <QMetaType>
> +#include <QList>
> #include <QString>
> #include <QPair>
> #include <QScopedPointer>
> -#include <QStandardItem>
> #include <QTextCursor>
>
> class KoXmlElement;
> @@ -83,11 +84,12 @@ private:
>     void setBeginPos(int pos);
>     void setEndPos(int pos);
>     void setLevel(int level);
> -    void setModelItem(QStandardItem *item);
> -    QStandardItem *modelItem();
>
>     friend class KoSectionManager;
>     friend class KoSectionEnd;
> };
>
> +Q_DECLARE_METATYPE(KoSection *)
> +Q_DECLARE_METATYPE(QList<KoSection *>)
> +
> #endif // KOSECTION_H
> diff --git a/libs/kotext/KoSectionEnd.cpp b/libs/kotext/KoSectionEnd.cpp
> index 0d7cf83..c620a07 100644
> --- a/libs/kotext/KoSectionEnd.cpp
> +++ b/libs/kotext/KoSectionEnd.cpp
> @@ -53,7 +53,7 @@ QString KoSectionEnd::name() const
>     return d->section->name();
> }
>
> -KoSection* KoSectionEnd::correspondingSection() const
> +KoSection *KoSectionEnd::correspondingSection() const
> {
>     Q_D(const KoSectionEnd);
>     return d->section;
> diff --git a/libs/kotext/KoSectionEnd.h b/libs/kotext/KoSectionEnd.h
> index 02ab31d..d831cd5 100644
> --- a/libs/kotext/KoSectionEnd.h
> +++ b/libs/kotext/KoSectionEnd.h
> @@ -22,6 +22,8 @@
>
> #include "kotext_export.h"
>
> +#include <QMetaType>
> +#include <QList>
> #include <QString>
> #include <QScopedPointer>
>
> @@ -51,4 +53,7 @@ private:
>     Q_DECLARE_PRIVATE(KoSectionEnd)
> };
>
> +Q_DECLARE_METATYPE(KoSectionEnd *)
> +Q_DECLARE_METATYPE(QList<KoSectionEnd *>)
> +
> #endif // KOSECTIONEND_H
> diff --git a/libs/kotext/KoSectionManager.cpp b/libs/kotext/KoSectionManager.cpp
> index df4e535..4143ca8 100644
> --- a/libs/kotext/KoSectionManager.cpp
> +++ b/libs/kotext/KoSectionManager.cpp
> @@ -23,6 +23,7 @@
> #include "KoSectionEnd.h"
> #include <KLocalizedString>
> #include <KoTextDocument.h>
> +#include "KoSectionUtils.h"
>
> #include <QHash>
> #include <QString>
> @@ -31,27 +32,56 @@
>
> #include <kdebug.h>
>
> -KoSectionManagerPrivate::KoSectionManagerPrivate(QTextDocument *_doc)
> -    : doc(_doc)
> -    , valid(false)
> -    , sectionCount(0)
> -    , model(new QStandardItemModel())
> +class KoSectionManagerPrivate
> {
> -    Q_ASSERT(_doc);
> -}
> +public:
> +    KoSectionManagerPrivate(KoSectionManager *parent, QTextDocument *_doc)
> +        : doc(_doc)
> +        , valid(false)
> +        , q_ptr(parent)
> +    {
> +        Q_ASSERT(_doc);
> +    }
>
> -KoSectionManagerPrivate::~KoSectionManagerPrivate()
> -{
> -    QHash<QString, KoSection *>::iterator it = sectionNames.begin();
> -    for (; it != sectionNames.end(); it++) {
> -        delete it.value(); // KoSectionEnd will be deleted in KoSection
> +    ~KoSectionManagerPrivate()
> +    {
> +        QSet<KoSection *>::iterator it = registeredSections.begin();
> +        for (; it != registeredSections.end(); it++) {
> +            delete *it; // KoSectionEnd will be deleted in KoSection
> +        }
>     }
> -}
> +
> +    QTextDocument *doc;
> +    bool valid; //< is current section info is valid
> +    QSet<KoSection *> registeredSections; //< stores pointer to sections that sometime was registered
> +
> +    // used to prevent using sectionNames without update
> +    QHash<QString, KoSection *> &sectionNames()
> +    {
> +        Q_Q(KoSectionManager);
> +        q->update();
> +        return m_sectionNames;
> +    }
> +
> +protected:
> +    KoSectionManager *q_ptr;
> +
> +private:
> +    Q_DISABLE_COPY(KoSectionManagerPrivate)
> +    Q_DECLARE_PUBLIC(KoSectionManager);
> +
> +    QHash<QString, KoSection *> m_sectionNames; //< stores name -> pointer reference, for sections that are visible in document now
> +};
>
> KoSectionManager::KoSectionManager(QTextDocument* doc)
> -    : d_ptr(new KoSectionManagerPrivate(doc))
> +    : d_ptr(new KoSectionManagerPrivate(this, doc))
> +{
> +    KoTextDocument(doc).setSectionManager(this); //FIXME: setting it back from here looks bad
> +}
> +
> +KoSectionManager::~KoSectionManager()
> {
> -    KoTextDocument(doc).setSectionManager(this);
> +    delete d_ptr;
> }
>
> KoSection *KoSectionManager::sectionAtPosition(int pos)
> @@ -61,8 +91,8 @@ KoSection *KoSectionManager::sectionAtPosition(int pos)
>
>     KoSection *result = 0;
>     int smallest = INT_MAX; //smallest in size section will be the deepest
> -    QHash<QString, KoSection *>::iterator it = d->sectionNames.begin();
> -    for (; it != d->sectionNames.end(); it++) {
> +    QHash<QString, KoSection *>::iterator it = d->sectionNames().begin();
> +    for (; it != d->sectionNames().end(); it++) {
>         if (it.value()->bounds().first > pos || it.value()->bounds().second < pos) {
>             continue;
>         }
> @@ -82,21 +112,20 @@ void KoSectionManager::invalidate()
>     d->valid = false;
> }
>
> -bool KoSectionManager::isValidNewName(const QString &name) const
> +bool KoSectionManager::isValidNewName(const QString &name)
> {
> -    Q_D(const KoSectionManager);
> -    return (d->sectionNames.find(name) == d->sectionNames.end());
> +    Q_D(KoSectionManager);
> +    return (d->sectionNames().constFind(name) == d->sectionNames().constEnd());
> }
>
> -QString KoSectionManager::possibleNewName() const
> +QString KoSectionManager::possibleNewName()
> {
> -    Q_D(const KoSectionManager);
> +    Q_D(KoSectionManager);
>
>     QString newName;
> -
> -    int i = d->sectionCount;
> +    int i = d->registeredSections.count();
>     do {
> -        ++i;
> +        i++;
>         newName = i18nc("new numbered section name", "New section %1", i);
>     } while (!isValidNewName(newName));
>
> @@ -106,73 +135,57 @@ QString KoSectionManager::possibleNewName() const
> void KoSectionManager::registerSection(KoSection* section)
> {
>     Q_D(KoSectionManager);
> -    d->sectionCount++;
> -    d->sectionNames[section->name()] = section;
> +    d->registeredSections.insert(section);
>     invalidate();
> }
>
> -void KoSectionManager::sectionRenamed(const QString &oldName, const QString &name)
> -{
> -    Q_D(KoSectionManager);
> -    QHash<QString, KoSection *>::iterator it = d->sectionNames.find(oldName);
> -    KoSection *sec = *it;
> -    d->sectionNames.erase(it);
> -    d->sectionNames[name] = sec;
> -
> -    if (sec->modelItem()) {
> -        sec->modelItem()->setData(name, Qt::DisplayRole);
> -    }
> -}
> -
> void KoSectionManager::unregisterSection(KoSection* section)
> {
>     Q_D(KoSectionManager);
> -
> -    d->sectionCount--;
> -    d->sectionNames.remove(section->name());
> +    d->registeredSections.remove(section);
>     invalidate();
> }
>
> -void KoSectionManager::update()
> +QStandardItemModel *KoSectionManager::update(bool needModel)
> {
>     Q_D(KoSectionManager);
> -    if (d->valid) {
> -        return;
> +    if (d->valid && !needModel) {
> +        return 0;
>     }
> +    d->valid = true;
> +    d->sectionNames().clear();
>
> -    QHash<QString, KoSection *>::iterator it = d->sectionNames.begin();
> -    for (; it != d->sectionNames.end(); it++) {
> -        it.value()->setBeginPos(-1);
> -        it.value()->setEndPos(-1);
> -        it.value()->setLevel(-1);
> +    QSet<KoSection *>::iterator it = d->registeredSections.begin();
> +    for (; it != d->registeredSections.end(); it++) {
> +        (*it)->setBeginPos(-1);
> +        (*it)->setEndPos(-1);
> +        (*it)->setLevel(-1);
>     }
>
>     QTextBlock block = d->doc->begin();
>
> -    QStringList head;
> -    head << i18n("Section");
> -    d->model->clear();
> -    d->model->setHorizontalHeaderLabels(head);
> -    d->model->setColumnCount(1);
> -
> +    QStandardItemModel *model = 0;
>     QStack<QStandardItem *> curChain;
> -    curChain.push(d->model->invisibleRootItem());
> +
> +    if (needModel) {
> +        model = new QStandardItemModel();
> +        curChain.push(model->invisibleRootItem());
> +    }
>
>     int curLevel = -1;
>     do {
>         QTextBlockFormat fmt = block.blockFormat();
>
> -        if (fmt.hasProperty(KoParagraphStyle::SectionStartings)) {
> -            QList<QVariant> starts = fmt.property(KoParagraphStyle::SectionStartings).value< QList<QVariant> >();
> -            foreach (const QVariant &sv, starts) {
> -                curLevel++;
> -                KoSection *sec = static_cast<KoSection *>(sv.value<void *>());
> -                sec->setBeginPos(block.position());
> -                sec->setLevel(curLevel);
> +        foreach (KoSection *sec, KoSectionUtils::sectionStartings(fmt)) {
> +            curLevel++;
> +            sec->setBeginPos(block.position());
> +            sec->setLevel(curLevel);
> +
> +            d->sectionNames()[sec->name()] = sec;
>
> +            if (needModel) {
>                 QStandardItem *item = new QStandardItem(sec->name());
> -                item->setData(qVariantFromValue(static_cast<void *>(sec)), Qt::UserRole + 1);
> -                sec->setModelItem(item);
> +                item->setData(QVariant::fromValue<KoSection *>(sec), Qt::UserRole + 1);
>
>                 curChain.top()->appendRow(item);
>
> @@ -180,24 +193,15 @@ void KoSectionManager::update()
>             }
>         }
>
> -        if (fmt.hasProperty(KoParagraphStyle::SectionEndings)) {
> -            QList<QVariant> ends = fmt.property(KoParagraphStyle::SectionEndings).value< QList<QVariant> >();
> -            foreach (const QVariant &sv, ends) {
> -                curLevel--;
> -                KoSectionEnd *sec = static_cast<KoSectionEnd *>(sv.value<void *>());
> -                sec->correspondingSection()->setEndPos(block.position() + block.length());
> +        foreach (const KoSectionEnd *sec, KoSectionUtils::sectionEndings(fmt)) {
> +            curLevel--;
> +            sec->correspondingSection()->setEndPos(block.position() + block.length());
>
> +            if (needModel) {
>                 curChain.pop();
>             }
>         }
>     } while ((block = block.next()).isValid());
>
> -    d->valid = true;
> -}
> -
> -QStandardItemModel* KoSectionManager::sectionsModel()
> -{
> -    Q_D(KoSectionManager);
> -    update();
> -    return d->model.data();
> +    return model;
> }
> diff --git a/libs/kotext/KoSectionManager.h b/libs/kotext/KoSectionManager.h
> index dc4821f..a3933fe 100644
> --- a/libs/kotext/KoSectionManager.h
> +++ b/libs/kotext/KoSectionManager.h
> @@ -22,23 +22,13 @@
> #include <QTextDocument>
> #include <QMetaType>
> #include <QStandardItemModel>
> +#include <QSet>
>
> #include <kotext_export.h>
>
> class KoSection;
> +class KoSectionManagerPrivate;
>
> -class KoSectionManagerPrivate
> -{
> -public:
> -    explicit KoSectionManagerPrivate(QTextDocument *_doc);
> -    ~KoSectionManagerPrivate();
> -
> -    QTextDocument *doc;
> -    bool valid; //< is current section info is valid
> -    QHash<QString, KoSection *> sectionNames; //< stores name -> pointer reference
> -    int sectionCount; //< how many sections is registered
> -    QScopedPointer<QStandardItemModel> model;
> -};
> /**
>  * Used to handle all the sections in the document
>  *
> @@ -54,6 +44,7 @@ class KOTEXT_EXPORT KoSectionManager
> {
> public:
>     explicit KoSectionManager(QTextDocument* doc);
> +    ~KoSectionManager();
>
>     /**
>      * Returns pointer to the deepest KoSection that covers @p pos
> @@ -64,35 +55,31 @@ public:
>     /**
>      * Returns name for the new section
>      */
> -    QString possibleNewName() const;
> +    QString possibleNewName();
>
>     /**
>      * Returns if this name is possible.
>      */
> -    bool isValidNewName(const QString &name) const;
> -
> -    /**
> -     * Returns tree model of sections to use in views
> -     */
> -    QStandardItemModel *sectionsModel();
> +    bool isValidNewName(const QString &name);
>
> public slots:
>     /**
>      * Call this to recalc all sections information
> +     * @param needModel place @c true to it if you need model to use in GUI and @c false otherwise
> +     * @return pointer to QStandardItemModel, build according to section tree
> +     *         with a pointers to KoSection at Qt::UserRole + 1 and section name
> +     *         for display role.
> +     *         NOTE: it is not updated further by KoSectionManager
>      */
> -    void update();
> +    QStandardItemModel *update(bool needModel = false);
>
>     /**
> -     * Call this to notify manager that info in it is invalidated.
> +     * Call this to notify manager that info in it has invalidated.
>      */
>     void invalidate();
>
>     /**
> -     * Call this to notify that some section changed its name
> -     */
> -    void sectionRenamed(const QString &oldName, const QString &name);
> -
> -    /**
> +     *
>      * Call this to register new section in manager
>      */
>     void registerSection(KoSection *section);
> @@ -103,7 +90,7 @@ public slots:
>     void unregisterSection(KoSection *section);
>
> protected:
> -    const QScopedPointer<KoSectionManagerPrivate> d_ptr;
> +    KoSectionManagerPrivate * const d_ptr;
>
> private:
>     Q_DISABLE_COPY(KoSectionManager)
> diff --git a/libs/kotext/KoSectionUtils.cpp b/libs/kotext/KoSectionUtils.cpp
> index cbcefd5..acb6be1 100644
> --- a/libs/kotext/KoSectionUtils.cpp
> +++ b/libs/kotext/KoSectionUtils.cpp
> @@ -18,8 +18,7 @@
>  */
>
> #include <KoSectionUtils.h>
> -#include <KoSection.h>
> -#include <KoSectionEnd.h>
> +#include <KoParagraphStyle.h>
>
> bool KoSectionUtils::getNextBlock(QTextCursor &cur)
> {
> @@ -38,12 +37,40 @@ bool KoSectionUtils::getNextBlock(QTextCursor &cur)
>     return true;
> }
>
> -QString KoSectionUtils::sectionStartName(const QVariant &q)
> +void KoSectionUtils::setSectionStartings(QTextBlockFormat &fmt, QList<KoSection *> &list)
> {
> -    return static_cast<KoSection *>(q.value<void *>())->name();
> +    if (list.empty()) {
> +        fmt.clearProperty(KoParagraphStyle::SectionStartings);
> +    } else {
> +        fmt.setProperty(KoParagraphStyle::SectionStartings,
> +            QVariant::fromValue< QList<KoSection *> >(list));
> +    }
> +}
> +
> +void KoSectionUtils::setSectionEndings(QTextBlockFormat &fmt, QList<KoSectionEnd *> &list)
> +{
> +    if (list.empty()) {
> +        fmt.clearProperty(KoParagraphStyle::SectionEndings);
> +    } else {
> +        fmt.setProperty(KoParagraphStyle::SectionEndings,
> +            QVariant::fromValue< QList<KoSectionEnd *> >(list));
> +    }
> }
>
> -QString KoSectionUtils::sectionEndName(const QVariant &q)
> +QList<KoSection *> KoSectionUtils::sectionStartings(const QTextBlockFormat &fmt)
> {
> -    return static_cast<KoSectionEnd *>(q.value<void *>())->name();
> +    if (!fmt.hasProperty(KoParagraphStyle::SectionStartings)) {
> +        return QList<KoSection *>();
> +    } else {
> +        return fmt.property(KoParagraphStyle::SectionStartings).value< QList<KoSection *> >();
> +    }
> +}
> +
> +QList<KoSectionEnd *> KoSectionUtils::sectionEndings(const QTextBlockFormat &fmt)
> +{
> +    if (!fmt.hasProperty(KoParagraphStyle::SectionEndings)) {
> +        return QList<KoSectionEnd *>();
> +    } else {
> +        return fmt.property(KoParagraphStyle::SectionEndings).value< QList<KoSectionEnd *> >();
> +    }
> }
> diff --git a/libs/kotext/KoSectionUtils.h b/libs/kotext/KoSectionUtils.h
> index 1bd5eb3..13fa15a 100644
> --- a/libs/kotext/KoSectionUtils.h
> +++ b/libs/kotext/KoSectionUtils.h
> @@ -19,6 +19,9 @@
> #ifndef KOSECTIONUTILS_H
> #define KOSECTIONUTILS_H
>
> +#include <KoSection.h>
> +#include <KoSectionEnd.h>
> +
> #include <QTextCursor>
> #include <QVariant>
> #include <QString>
> @@ -30,26 +33,41 @@ namespace KoSectionUtils {
>      * @return @c false if there is no next block, @c true otherwise
>      */
>     bool getNextBlock(QTextCursor &cur);
> +
>     /**
> -     * Convinient function to get name of a section from QVariant
> -     * that is really a KoSection *.
> -     *
> -     * There is no internal check that \p q is a KoSection *.
> +     * Convinient function to set a list of startings to QTextBlockFormat.
> +     * This checks that list is empty.
>      *
> -     * @param q QVariant version of pointer to a KoSection
> -     * @return name of a specified section
> +     * @param fmt QTextBlockFormat reference to set startings.
> +     * @param list QList<KoSection *> is a list to set.
>      */
> -    QString sectionStartName(const QVariant &q);
> +    KOTEXT_EXPORT void setSectionStartings(QTextBlockFormat &fmt, QList<KoSection *> &list);
> +
>     /**
> -     * Convinient function to get name of a section from QVariant
> -     * that is really a KoSectionEnd *.
> -     *
> -     * There is no internal check that \p q is a KoSectionEnd *.
> +     * Convinient function to set a list of endings to QTextBlockFormat.
> +     * This checks that list is empty.
>      *
> -     * @param q QVariant version of pointer to a KoSectionEnd
> -     * @return name of a specified section
> +     * @param fmt QTextBlockFormat reference to set endings.
> +     * @param list QList<KoSectionEnd *> is a list to set.
> +     */
> +    KOTEXT_EXPORT void setSectionEndings(QTextBlockFormat& fmt, QList<KoSectionEnd *> &list);
> +
> +    /**
> +     * Convinient function to get section startings from QTextBlockFormat.
> +     * @param fmt QTextBlockFormat format to retrieve section startings from.
> +     * @return QList<KoSection *> that contains pointers to sections that start
> +     *                            according to QTextBlockFormat.
> +     */
> +    KOTEXT_EXPORT QList<KoSection *> sectionStartings(const QTextBlockFormat &fmt);
> +
> +    /**
> +     * Convinient function to get section endings from QTextBlockFormat.
> +     * @param fmt QTextBlockFormat format to retrieve section startings from.
> +     * @return QList<KoSectionEnd *> that contains pointers to sections that end
> +     *                               according to QTextBlockFormat.
>      */
> -    QString sectionEndName(const QVariant &q);
> +    KOTEXT_EXPORT QList<KoSectionEnd *> sectionEndings(const QTextBlockFormat& fmt);
> +
> }
>
> #endif //KOSECTIONUTILS_H
> diff --git a/libs/kotext/KoTextPaste.cpp b/libs/kotext/KoTextPaste.cpp
> index 08c6cf8..9f20dbb 100644
> --- a/libs/kotext/KoTextPaste.cpp
> +++ b/libs/kotext/KoTextPaste.cpp
> @@ -30,10 +30,12 @@
> #include <KoTextEditor.h>
> #include <opendocument/KoTextLoader.h>
> #include <KoTextSharedLoadingData.h>
> +#include <KoSectionManager.h>
>
> #include <kdebug.h>
> #ifdef SHOULD_BUILD_RDF
> #include "KoTextRdfCore.h"
> +#include "KoSectionManager.h"
> #include <Soprano/Soprano>
> #endif
>
> @@ -83,6 +85,8 @@ bool KoTextPaste::process(const KoXmlElement &body, KoOdfReadStore &odfStore)
>     // load the paste directly into the editor's cursor -- which breaks encapsulation
>     loader.loadBody(body, *d->editor->cursor(), KoTextLoader::PasteMode);   // now let's load the body from the ODF KoXmlElement.
>
> +    context.sectionManager()->invalidate();
> +
> #ifdef SHOULD_BUILD_RDF
>     kDebug(30015) << "text paste, rdf handling" << d->rdfModel;
>     // RDF: Grab RDF metadata from ODF file if present & load it into rdfModel
> diff --git a/libs/kotext/commands/DeleteCommand.cpp b/libs/kotext/commands/DeleteCommand.cpp
> index 307165b..f62de95 100644
> --- a/libs/kotext/commands/DeleteCommand.cpp
> +++ b/libs/kotext/commands/DeleteCommand.cpp
> @@ -36,6 +36,7 @@
> #include <KoSection.h>
> #include <KoSectionUtils.h>
> #include <KoSectionManager.h>
> +#include <KoSectionEnd.h>
> #include <KoShapeController.h>
> #include <KoDocument.h>
>
> @@ -138,23 +139,20 @@ public:
>         bool doesEndInside = false;
>         if (block.position() >= caret.selectionStart()) { // Begin of the block is inside selection.
>             doesBeginInside = true;
> -            QList<QVariant> openList = block.blockFormat()
> -            .property(KoParagraphStyle::SectionStartings).value< QList<QVariant> >();
> -            foreach (const QVariant &sv, openList) {
> -                m_curSectionDelimiters.push_back(SectionHandle(KoSectionUtils::sectionStartName(sv), SectionOpen, sv));
> +            QList<KoSection *> openList = KoSectionUtils::sectionStartings(block.blockFormat());
> +            foreach (KoSection *sec, openList) {
> +                m_curSectionDelimiters.push_back(SectionHandle(sec->name(), sec));
>             }
>         }
>
>         if (block.position() + block.length() <= caret.selectionEnd()) { // End of the block is inside selection.
>             doesEndInside = true;
> -            QList<QVariant> closeList = block.blockFormat()
> -            .property(KoParagraphStyle::SectionEndings).value< QList<QVariant> >();
> -            foreach (const QVariant &sv, closeList) {
> -                QString secName = KoSectionUtils::sectionEndName(sv);
> -                if (!m_curSectionDelimiters.empty() && m_curSectionDelimiters.last().name == secName) {
> +            QList<KoSectionEnd *> closeList = KoSectionUtils::sectionEndings(block.blockFormat());
> +            foreach (KoSectionEnd *se, closeList) {
> +                if (!m_curSectionDelimiters.empty() && m_curSectionDelimiters.last().name == se->name()) {
>                     m_curSectionDelimiters.pop_back();
>                 } else {
> -                    m_curSectionDelimiters.push_back(SectionHandle(secName, SectionClose, sv));
> +                    m_curSectionDelimiters.push_back(SectionHandle(se->name(), se));
>                 }
>             }
>         }
> @@ -201,12 +199,13 @@ public:
>         KoTextDocument(cur->document()).sectionManager()->invalidate();
>         // It means that selection isn't within one block.
>         if (m_hasEntirelyInsideBlock || m_startBlockNum != -1 || m_endBlockNum != -1) {
> -            QList<QVariant> openList, closeList;
> +            QList<KoSection *> openList;
> +            QList<KoSectionEnd *> closeList;
>             foreach (const SectionHandle &handle, m_curSectionDelimiters) {
>                 if (handle.type == SectionOpen) { // Start of the section.
> -                    openList << handle.data;
> +                    openList << handle.dataSec;
>                 } else { // End of the section.
> -                    closeList << handle.data;
> +                    closeList << handle.dataSecEnd;
>                 }
>             }
>
> @@ -218,33 +217,21 @@ public:
>                 QTextBlockFormat fmt2 = cur->document()->findBlockByNumber(m_endBlockNum + 1).blockFormat();
>                 fmt.clearProperty(KoParagraphStyle::SectionEndings);
>
> -                if (m_endBlockNum != -1) {
> -                    QList<QVariant> closeListEndBlock = cur->document()->findBlockByNumber(m_endBlockNum)
> -                        .blockFormat().property(KoParagraphStyle::SectionEndings).value< QList<QVariant> >();
> -
> -                    while (!openList.empty() && !closeListEndBlock.empty()
> -                        && KoSectionUtils::sectionStartName(openList.last())
> -                        == KoSectionUtils::sectionEndName(closeListEndBlock.first())) {
> -                        openList.pop_back();
> -                        closeListEndBlock.pop_front();
> -                    }
> -                    openList << fmt2.property(KoParagraphStyle::SectionStartings).value< QList<QVariant> >();
> -                    closeList << closeListEndBlock;
> -                } else {
> -                    Q_ASSERT(false); // FIXME: Remove this before release, if there will be no problems.
> +                //m_endBlockNum != -1 in this case.
> +                QList<KoSectionEnd *> closeListEndBlock = KoSectionUtils::sectionEndings(
> +                    cur->document()->findBlockByNumber(m_endBlockNum).blockFormat());
> +
> +                while (!openList.empty() && !closeListEndBlock.empty()
> +                    && openList.last()->name() == closeListEndBlock.first()->name()) {
> +                    openList.pop_back();
> +                    closeListEndBlock.pop_front();
>                 }
> +                openList << KoSectionUtils::sectionStartings(fmt2);
> +                closeList << closeListEndBlock;
>
>                 // We leave open section of start block untouched.
> -                if (!openList.empty()) {
> -                    fmt2.setProperty(KoParagraphStyle::SectionStartings, openList);
> -                } else {
> -                    fmt2.clearProperty(KoParagraphStyle::SectionStartings);
> -                }
> -                if (!closeList.empty()) {
> -                    fmt.setProperty(KoParagraphStyle::SectionEndings, closeList);
> -                } else {
> -                    fmt.clearProperty(KoParagraphStyle::SectionEndings);
> -                }
> +                KoSectionUtils::setSectionStartings(fmt2, openList);
> +                KoSectionUtils::setSectionEndings(fmt, closeList);
>
>                 QTextCursor changer = *cur;
>                 changer.setPosition(cur->document()->findBlockByNumber(m_startBlockNum).position());
> @@ -253,56 +240,18 @@ public:
>                     changer.setPosition(cur->document()->findBlockByNumber(m_endBlockNum + 1).position());
>                     changer.setBlockFormat(fmt2);
>                 }
> -            } else if (m_endBlockNum != -1) { // We're pushing all new section info to the end block.
> +            } else { // m_endBlockNum != -1 in this case. We're pushing all new section info to the end block.
>                 QTextBlockFormat fmt = cur->document()->findBlockByNumber(m_endBlockNum).blockFormat();
>                 fmt.clearProperty(KoParagraphStyle::SectionStartings);
>
> -                closeList << fmt.property(KoParagraphStyle::SectionEndings).value< QList<QVariant> >();
> +                closeList << KoSectionUtils::sectionEndings(fmt);
>
> -                if (!openList.empty()) {
> -                    fmt.setProperty(KoParagraphStyle::SectionStartings, openList);
> -                } else {
> -                    fmt.clearProperty(KoParagraphStyle::SectionStartings);
> -                }
> -                if (!closeList.empty()) {
> -                    fmt.setProperty(KoParagraphStyle::SectionEndings, closeList);
> -                } else {
> -                    fmt.clearProperty(KoParagraphStyle::SectionEndings);
> -                }
> +                KoSectionUtils::setSectionStartings(fmt, openList);
> +                KoSectionUtils::setSectionEndings(fmt, closeList);
>
>                 QTextCursor changer = *cur;
>                 changer.setPosition(cur->document()->findBlockByNumber(m_endBlockNum).position());
>                 changer.setBlockFormat(fmt);
> -            } else {
> -                Q_ASSERT(false); //FIXME: Delete this before release, if there will be no problems.
> -                //             cur.setPosition(caret->selectionStart());
> -                //             if (cur.movePosition(QTextCursor::Left)) {
> -                //                 QList<QVariant> closeListHave = cur.blockFormat()
> -                //                     .property(KoParagraphStyle::SectionEndings).value< QList<QVariant> >();
> -                //                 closeList = (closeListHave << closeList);
> -                //
> -                //                 QTextBlockFormat fmt = cur.blockFormat();
> -                //                 if (closeList.empty()) {
> -                //                     fmt.clearProperty(KoParagraphStyle::SectionEndings);
> -                //                 } else {
> -                //                     fmt.setProperty(KoParagraphStyle::SectionEndings, closeList);
> -                //                 }
> -                //                 cur.setBlockFormat(fmt);
> -                //             }
> -                //
> -                //             cur.setPosition(caret->selectionEnd());
> -                //             {
> -                //                 openList << cur.blockFormat()
> -                //                     .property(KoParagraphStyle::SectionStartings).value< QList<QVariant> >();
> -                //
> -                //                 QTextBlockFormat fmt = cur.blockFormat();
> -                //                 if (openList.empty()) {
> -                //                     fmt.clearProperty(KoParagraphStyle::SectionStartings);
> -                //                 } else {
> -                //                     fmt.setProperty(KoParagraphStyle::SectionStartings, openList);
> -                //                 }
> -                //                 cur.setBlockFormat(fmt);
> -                //             }
>             }
>         }
>     }
> @@ -317,12 +266,23 @@ public:
>     struct SectionHandle {
>         QString name; // Name of the section.
>         SectionHandleAction type; // Action of a SectionHandle.
> -        QVariant data; // QVariant version of pointer to KoSection or KoSectionEnd.
>
> -        SectionHandle(QString _name, SectionHandleAction _type, QVariant _data)
> -        : name(_name)
> -        , type(_type)
> -        , data(_data)
> +        KoSection *dataSec; // Pointer to KoSection.
> +        KoSectionEnd *dataSecEnd; // Pointer to KoSectionEnd.
> +
> +        SectionHandle(QString _name, KoSection *_data)
> +            : name(_name)
> +            , type(SectionOpen)
> +            , dataSec(_data)
> +            , dataSecEnd(0)
> +        {
> +        }
> +
> +        SectionHandle(QString _name, KoSectionEnd *_data)
> +            : name(_name)
> +            , type(SectionClose)
> +            , dataSec(0)
> +            , dataSecEnd(_data)
>         {
>         }
>     };
> @@ -491,7 +451,7 @@ bool DeleteCommand::checkMerge(const KUndo2Command *command)
>         return true;
>     }
>
> -    if ( (other->m_position + other->m_length == m_position)
> +    if ((other->m_position + other->m_length == m_position)
>             && (m_format == other->m_format)) {
>         m_position = other->m_position;
>         m_length += other->m_length;
> diff --git a/libs/kotext/commands/NewSectionCommand.cpp b/libs/kotext/commands/NewSectionCommand.cpp
> index 50ba14d..cadaa95 100644
> --- a/libs/kotext/commands/NewSectionCommand.cpp
> +++ b/libs/kotext/commands/NewSectionCommand.cpp
> @@ -24,6 +24,7 @@
> #include <KoParagraphStyle.h>
> #include <KoSectionManager.h>
> #include <KoTextEditor.h>
> +#include <KoSectionUtils.h>
>
> #include <klocale.h>
> #include <kundo2command.h>
> @@ -63,22 +64,14 @@ void NewSectionCommand::redo()
>         KoSectionEnd *end = new KoSectionEnd(start);
>         QTextBlockFormat fmt = editor->blockFormat();
>
> -        QList< QVariant > sectionStartings;
> -        if (fmt.hasProperty(KoParagraphStyle::SectionStartings)) {
> -            sectionStartings = fmt.property(KoParagraphStyle::SectionStartings)
> -                .value< QList<QVariant> >();
> -        }
> -        QList< QVariant > sectionEndings;
> -        if (fmt.hasProperty(KoParagraphStyle::SectionEndings)) {
> -            sectionEndings = fmt.property(KoParagraphStyle::SectionEndings)
> -                .value< QList<QVariant> >();
> -        }
> +        QList<KoSection *> sectionStartings = KoSectionUtils::sectionStartings(fmt);
> +        QList<KoSectionEnd *> sectionEndings = KoSectionUtils::sectionEndings(fmt);
>
> -        sectionStartings.append(qVariantFromValue<void *>(static_cast<void *>(start)));
> -        sectionEndings.prepend(qVariantFromValue<void *>(static_cast<void *>(end)));
> +        sectionStartings.append(start);
> +        sectionEndings.prepend(end);
>
> -        fmt.setProperty(KoParagraphStyle::SectionStartings, sectionStartings);
> -        fmt.setProperty(KoParagraphStyle::SectionEndings, sectionEndings);
> +        KoSectionUtils::setSectionStartings(fmt, sectionStartings);
> +        KoSectionUtils::setSectionEndings(fmt, sectionEndings);
>
>         editor->setBlockFormat(fmt);
>     }
> diff --git a/libs/kotext/opendocument/KoTextLoader.cpp b/libs/kotext/opendocument/KoTextLoader.cpp
> index 2301a96..48388a9 100644
> --- a/libs/kotext/opendocument/KoTextLoader.cpp
> +++ b/libs/kotext/opendocument/KoTextLoader.cpp
> @@ -83,6 +83,7 @@
> #include "styles/KoTableColumnStyle.h"
> #include "styles/KoTableCellStyle.h"
> #include "styles/KoSectionStyle.h"
> +#include <KoSectionUtils.h>
>
> #include <klocale.h>
> #include <kdebug.h>
> @@ -139,7 +140,7 @@ public:
>     int loadSpanInitialPos;
>
>     QVector<QString> nameSpacesList;
> -    QList<QVariant> openingSections;
> +    QList<KoSection *> openingSections;
>
>     QMap<QString, KoList *> xmlIdToListMap;
>     QVector<KoList *> m_previousList;
> @@ -313,25 +314,18 @@ void KoTextLoader::loadBody(const KoXmlElement &bodyElem, QTextCursor &cursor, L
>     // If we are pasting text, we should handle sections correctly
>     // we are saving which sections end in current block
>     // and put their ends after the inserted text.
> -    QList<QVariant> oldSectionEndings;
> +    QList<KoSectionEnd *> oldSectionEndings;
>     if (mode == PasteMode) {
>         QTextBlockFormat fmt = cursor.blockFormat();
> -        if (fmt.hasProperty(KoParagraphStyle::SectionEndings)) {
> -            oldSectionEndings = fmt.property(KoParagraphStyle::SectionEndings)
> -                .value< QList<QVariant> >();
> -        }
> +        oldSectionEndings = KoSectionUtils::sectionEndings(fmt);
>         fmt.clearProperty(KoParagraphStyle::SectionEndings);
>         cursor.setBlockFormat(fmt);
>     }
>
>     if (!d->openingSections.isEmpty()) {
> -        QTextBlock block = cursor.block();
> -        QTextBlockFormat format = block.blockFormat();
> -        QVariant v;
> -        v = format.property(KoParagraphStyle::SectionStartings);
> -        d->openingSections.append(v.value<QList<QVariant> >()); // if we had some already we need to append the new ones
> -        v.setValue<QList<QVariant> >(d->openingSections);
> -        format.setProperty(KoParagraphStyle::SectionStartings, v);
> +        QTextBlockFormat format = cursor.block().blockFormat();
> +        d->openingSections << KoSectionUtils::sectionStartings(format); // if we had some already we need to append the new ones
> +        KoSectionUtils::setSectionStartings(format, d->openingSections);
>         cursor.setBlockFormat(format);
>         d->openingSections.clear();
>     }
> @@ -437,15 +431,8 @@ void KoTextLoader::loadBody(const KoXmlElement &bodyElem, QTextCursor &cursor, L
>     // Here we put old endings after text insertion.
>     if (mode == PasteMode) {
>         QTextBlockFormat fmt = cursor.blockFormat();
> -        if (fmt.hasProperty(KoParagraphStyle::SectionEndings)) {
> -            oldSectionEndings = fmt.property(KoParagraphStyle::SectionEndings)
> -                .value< QList<QVariant> >() << oldSectionEndings;
> -        }
> -
> -
> -        if (!oldSectionEndings.empty()) {
> -            fmt.setProperty(KoParagraphStyle::SectionEndings, oldSectionEndings);
> -        }
> +        oldSectionEndings = KoSectionUtils::sectionEndings(fmt);
> +        KoSectionUtils::setSectionEndings(fmt, oldSectionEndings);
>         cursor.setBlockFormat(fmt);
>     }
>
> @@ -848,24 +835,15 @@ void KoTextLoader::loadSection(const KoXmlElement &sectionElem, QTextCursor &cur
>         return;
>     }
>
> -    QVariant v;
> -    v.setValue<void *>(section);
> -    d->openingSections.append(v);
> +    d->openingSections << section;
>
>     loadBody(sectionElem, cursor);
>
>     // Close the section on the last block of text we have loaded just now.
> -    KoSectionEnd *sectionEnd = new KoSectionEnd(section);
> -    v.setValue<void *>(sectionEnd);
> +    QTextBlockFormat format = cursor.block().blockFormat();
> +    KoSectionUtils::setSectionEndings(format,
> +        KoSectionUtils::sectionEndings(format) << new KoSectionEnd(section));
>
> -    QTextBlock block = cursor.block();
> -    QTextBlockFormat format = block.blockFormat();
> -    QVariant listv;
> -    listv = format.property(KoParagraphStyle::SectionEndings);
> -    QList<QVariant> sectionEndings = listv.value<QList<QVariant> >();
> -    sectionEndings.append(v);
> -    listv.setValue<QList<QVariant> >(sectionEndings);
> -    format.setProperty(KoParagraphStyle::SectionEndings, listv);
>     cursor.setBlockFormat(format);
> }
>
> diff --git a/libs/kotext/opendocument/KoTextWriter_p.cpp b/libs/kotext/opendocument/KoTextWriter_p.cpp
> index 0e4ea11..c4e60a5 100644
> --- a/libs/kotext/opendocument/KoTextWriter_p.cpp
> +++ b/libs/kotext/opendocument/KoTextWriter_p.cpp
> @@ -98,19 +98,13 @@ void KoTextWriter::Private::writeBlocks(QTextDocument *document, int from, int t
>     cur.setPosition(from);
>     while (to == -1 || cur.position() <= to) {
>         if (cur.block().position() >= from) { // Begin of the block is inside selection.
> -            QList<QVariant> openList = cur.blockFormat()
> -                .property(KoParagraphStyle::SectionStartings).value< QList<QVariant> >();
> -            foreach (const QVariant &sv, openList) {
> -                KoSection *sec = static_cast<KoSection *>(sv.value<void *>());
> +            foreach (const KoSection *sec, KoSectionUtils::sectionStartings(cur.blockFormat())) {
>                 sectionNamesStack.push_back(sec->name());
>             }
>         }
>
>         if (to == -1 || cur.block().position() + cur.block().length() <= to) { // End of the block is inside selection.
> -            QList<QVariant> closeList = cur.blockFormat()
> -                .property(KoParagraphStyle::SectionEndings).value< QList<QVariant> >();
> -            foreach (const QVariant &sv, closeList) {
> -                KoSectionEnd *sec = static_cast<KoSectionEnd *>(sv.value<void *>());
> +            foreach (const KoSectionEnd *sec, KoSectionUtils::sectionEndings(cur.blockFormat())) {
>                 if (!sectionNamesStack.empty() && sectionNamesStack.top() == sec->name()) {
>                     sectionNamesStack.pop();
>                     entireWithinSectionNames.insert(sec->name());
> @@ -135,19 +129,14 @@ void KoTextWriter::Private::writeBlocks(QTextDocument *document, int from, int t
>         }
>
>         QTextBlockFormat format = block.blockFormat();
> -        if (format.hasProperty(KoParagraphStyle::SectionStartings)) {
> -            QVariant v = format.property(KoParagraphStyle::SectionStartings);
> -            QList<QVariant> sectionStarts = v.value<QList<QVariant> >();
>
> -            foreach (const QVariant &sv, sectionStarts) {
> -                KoSection* section = static_cast<KoSection *>(sv.value<void*>());
> -
> -                // We are writing in only sections, that are completely inside selection.
> -                if (entireWithinSectionNames.contains(section->name())) {
> -                    section->saveOdf(context);
> -                }
> +        foreach (const KoSection *section, KoSectionUtils::sectionStartings(format)) {
> +            // We are writing in only sections, that are completely inside selection.
> +            if (entireWithinSectionNames.contains(section->name())) {
> +                section->saveOdf(context);
>             }
>         }
> +
>         if (format.hasProperty(KoParagraphStyle::HiddenByTable)) {
>             block = block.next();
>             continue;
> @@ -182,16 +171,10 @@ void KoTextWriter::Private::writeBlocks(QTextDocument *document, int from, int t
>
>         saveParagraph(block, from, to);
>
> -        if (format.hasProperty(KoParagraphStyle::SectionEndings)) {
> -            QVariant v = format.property(KoParagraphStyle::SectionEndings);
> -            QList<QVariant> sectionEndings = v.value<QList<QVariant> >();
> -
> -            foreach (QVariant sv, sectionEndings) {
> -                KoSectionEnd *sectionEnd = static_cast<KoSectionEnd *>(sv.value<void *>());
> -                // We are writing in only sections, that are completely inside selection.
> -                if (entireWithinSectionNames.contains(sectionEnd->name())) {
> -                    sectionEnd->saveOdf(context);
> -                }
> +        foreach (const KoSectionEnd *sectionEnd, KoSectionUtils::sectionEndings(format)) {
> +            // We are writing in only sections, that are completely inside selection.
> +            if (entireWithinSectionNames.contains(sectionEnd->name())) {
> +                sectionEnd->saveOdf(context);
>             }
>         }
>
> diff --git a/libs/kotext/tests/TestKoTextEditor.cpp b/libs/kotext/tests/TestKoTextEditor.cpp
> index a4b02c0..bfc40e02 100644
> --- a/libs/kotext/tests/TestKoTextEditor.cpp
> +++ b/libs/kotext/tests/TestKoTextEditor.cpp
> @@ -42,6 +42,7 @@
> #include <KoParagraphStyle.h>
> #include <KoSection.h>
> #include <KoSectionEnd.h>
> +#include <KoSectionUtils.h>
>
> Q_DECLARE_METATYPE(QVector< QVector<int> >)
>
> @@ -139,9 +140,7 @@ void TestKoTextEditor::pushSectionStart(int num, KoSection *sec, KoTextEditor &e
>     QTextBlockFormat fmt = editor.blockFormat();
>     fmt.clearProperty(KoParagraphStyle::SectionStartings);
>     fmt.clearProperty(KoParagraphStyle::SectionEndings);
> -    QList<QVariant> lst;
> -    lst.push_back(QVariant::fromValue<void *>(static_cast<void *>(sec)));
> -    fmt.setProperty(KoParagraphStyle::SectionStartings, lst);
> +    KoSectionUtils::setSectionStartings(fmt, QList<KoSection *>() << sec);
>     editor.setBlockFormat(fmt);
>
>     editor.insertText("\n");
> @@ -157,9 +156,8 @@ void TestKoTextEditor::pushSectionEnd(int num, KoSectionEnd *secEnd, KoTextEdito
>     QTextBlockFormat fmt = editor.blockFormat();
>     fmt.clearProperty(KoParagraphStyle::SectionStartings);
>     fmt.clearProperty(KoParagraphStyle::SectionEndings);
> -    QList<QVariant> lst;
> -    lst.push_back(QVariant::fromValue<void *>(static_cast<void *>(secEnd)));
> -    fmt.setProperty(KoParagraphStyle::SectionEndings, lst);
> +
> +    KoSectionUtils::setSectionEndings(fmt, QList<KoSectionEnd *>() << secEnd);
>     editor.setBlockFormat(fmt);
>
>     editor.insertText("\n");
> @@ -170,19 +168,16 @@ void TestKoTextEditor::pushSectionEnd(int num, KoSectionEnd *secEnd, KoTextEdito
>
> bool TestKoTextEditor::checkStartings(const QVector<int> &needStartings, KoSection **sec, KoTextEditor &editor)
> {
> -    QTextBlockFormat fmt = editor.blockFormat();
> -    QList<QVariant> lst = fmt.property(KoParagraphStyle::SectionStartings).value< QList<QVariant> >();
> +    QList<KoSection *> lst = KoSectionUtils::sectionStartings(editor.blockFormat());
>
>     if (lst.size() != needStartings.size()) {
> -        qDebug() << static_cast<KoSection *>(lst[0].value<void *>())->name();
> -
> -        qDebug() << QString("Startings list size is wrong. Found %1, Expected %2").arg(lst.size()).arg(needStartings.size());
> +        kDebug() << QString("Startings list size is wrong. Found %1, Expected %2").arg(lst.size()).arg(needStartings.size());
>         return false;
>     }
>
>     for (int i = 0; i < needStartings.size(); i++) {
> -        if (static_cast<KoSection *>(lst[i].value<void *>()) != sec[needStartings[i]]) {
> -            qDebug() << QString("Found unexpected section starting. Expected %1 section.").arg(needStartings[i]);
> +        if (lst[i] != sec[needStartings[i]]) {
> +            kDebug() << QString("Found unexpected section starting. Expected %1 section.").arg(needStartings[i]);
>             return false;
>         }
>     }
> @@ -192,17 +187,16 @@ bool TestKoTextEditor::checkStartings(const QVector<int> &needStartings, KoSecti
>
> bool TestKoTextEditor::checkEndings(const QVector<int> &needEndings, KoSectionEnd **secEnd, KoTextEditor &editor)
> {
> -    QTextBlockFormat fmt = editor.blockFormat();
> -    QList<QVariant> lst = fmt.property(KoParagraphStyle::SectionEndings).value< QList<QVariant> >();
> +    QList<KoSectionEnd *> lst = KoSectionUtils::sectionEndings(editor.blockFormat());
>
>     if (lst.size() != needEndings.size()) {
> -        qDebug() << QString("Endings list size is wrong. Found %1, expected %2").arg(lst.size()).arg(needEndings.size());
> +        kDebug() << QString("Endings list size is wrong. Found %1, expected %2").arg(lst.size()).arg(needEndings.size());
>         return false;
>     }
>
>     for (int i = 0; i < needEndings.size(); i++) {
> -        if (static_cast<KoSectionEnd *>(lst[i].value<void *>()) != secEnd[needEndings[i]]) {
> -            qDebug() << QString("Found unexpected section ending. Expected %1 section.").arg(needEndings[i]);
> +        if (lst[i] != secEnd[needEndings[i]]) {
> +            kDebug() << QString("Found unexpected section ending. Expected %1 section.").arg(needEndings[i]);
>             return false;
>         }
>     }
> diff --git a/libs/textlayout/KoTextLayoutArea_paint.cpp b/libs/textlayout/KoTextLayoutArea_paint.cpp
> index d6fa3b8..7cb1b47 100644
> --- a/libs/textlayout/KoTextLayoutArea_paint.cpp
> +++ b/libs/textlayout/KoTextLayoutArea_paint.cpp
> @@ -55,6 +55,7 @@
> #include <kdebug.h>
> #include <KoSection.h>
> #include <KoSectionEnd.h>
> +#include <KoSectionUtils.h>
>
> #include <QPainter>
> #include <QTextTable>
> @@ -659,40 +660,32 @@ void KoTextLayoutArea::decorateParagraphSections(QPainter *painter, QTextBlock &
>
>     const qreal levelShift = 3;
>
> -    if (bf.hasProperty(KoParagraphStyle::SectionStartings)) {
> -        QVariant var = bf.property(KoParagraphStyle::SectionStartings);
> -        QList<QVariant> openList = var.value< QList<QVariant> >();
> -
> -        for (int i = 0; i < openList.size(); i++) {
> -            int sectionLevel = static_cast<KoSection *>(openList[i].value<void *>())->level();
> -            if (i == 0) {
> -                painter->drawLine(xl + sectionLevel * levelShift, yu,
> -                                  xr - sectionLevel * levelShift, yu);
> -            }
> +    QList<KoSection *> openList = KoSectionUtils::sectionStartings(bf);
> +    for (int i = 0; i < openList.size(); i++) {
> +        int sectionLevel = openList[i]->level();
> +        if (i == 0) {
>             painter->drawLine(xl + sectionLevel * levelShift, yu,
> -                              xl + sectionLevel * levelShift, yu + bracketSize);
> -
> -            painter->drawLine(xr - sectionLevel * levelShift, yu,
> -                              xr - sectionLevel * levelShift, yu + bracketSize);
> +                              xr - sectionLevel * levelShift, yu);
>         }
> -    }
> +        painter->drawLine(xl + sectionLevel * levelShift, yu,
> +                          xl + sectionLevel * levelShift, yu + bracketSize);
>
> -    if (bf.hasProperty(KoParagraphStyle::SectionEndings)) {
> -        QVariant var = bf.property(KoParagraphStyle::SectionEndings);
> -        QList<QVariant> closeList = var.value< QList<QVariant> >();
> +        painter->drawLine(xr - sectionLevel * levelShift, yu,
> +                          xr - sectionLevel * levelShift, yu + bracketSize);
> +    }
>
> -        for (int i = 0; i < closeList.size(); i++) {
> -            int sectionLevel = static_cast<KoSectionEnd *>(closeList[i].value<void *>())->correspondingSection()->level();
> -            if (i == closeList.count() - 1) {
> -                painter->drawLine(xl + sectionLevel * levelShift, yd,
> -                                  xr - sectionLevel * levelShift, yd);
> -            }
> +    QList<KoSectionEnd *> closeList = KoSectionUtils::sectionEndings(bf);
> +    for (int i = 0; i < closeList.size(); i++) {
> +        int sectionLevel = closeList[i]->correspondingSection()->level();
> +        if (i == closeList.count() - 1) {
>             painter->drawLine(xl + sectionLevel * levelShift, yd,
> -                              xl + sectionLevel * levelShift, yd - bracketSize);
> -
> -            painter->drawLine(xr - sectionLevel * levelShift, yd,
> -                              xr - sectionLevel * levelShift, yd - bracketSize);
> +                              xr - sectionLevel * levelShift, yd);
>         }
> +        painter->drawLine(xl + sectionLevel * levelShift, yd,
> +                          xl + sectionLevel * levelShift, yd - bracketSize);
> +
> +        painter->drawLine(xr - sectionLevel * levelShift, yd,
> +                          xr - sectionLevel * levelShift, yd - bracketSize);
>     }
>
>     painter->setPen(penBackup);
> diff --git a/plugins/reporting/barcode/koreport_barcodeplugin.desktop b/plugins/reporting/barcode/koreport_barcodeplugin.desktop
> index 9b2457c..ba143bf 100644
> --- a/plugins/reporting/barcode/koreport_barcodeplugin.desktop
> +++ b/plugins/reporting/barcode/koreport_barcodeplugin.desktop
> @@ -19,7 +19,7 @@ Name[ja]=バーコードレポートプラグイン
> Name[kk]=Штрих-кодты баяндау плагині
> Name[nb]=Programtillegg for Strekkode-rapport
> Name[nl]=Plug-in voor Barcoderapport
> -Name[pl]=Wtyczka sprawozdania kodu paskowego
> +Name[pl]=Wtyczka kodów paskowych dla raportów
> Name[pt]='Plugin' de Relatório de Códigos de Barras
> Name[pt_BR]=Plugin de código de barras para relatório
> Name[ru]=Модуль считывания штрих-кодов
> @@ -48,7 +48,7 @@ Comment[ja]=KoReport バーコードプラグイン
> Comment[kk]=KoReport штрих-код плагині
> Comment[nb]=KoReport strekkode-programtillegg
> Comment[nl]=Plug-in voor KoReport-barcode
> -Comment[pl]=Wtyczka kodu paskowego dla KoReport
> +Comment[pl]=Wtyczka kodów paskowych dla raportów
> Comment[pt]='Plugin' de Códigos de Barras do KoReport
> Comment[pt_BR]=Plugin de códigos de barra do KoReport
> Comment[ru]=Модуль считывания штрих-кодов KoReport
> diff --git a/plugins/reporting/chart/koreport_chartplugin.desktop b/plugins/reporting/chart/koreport_chartplugin.desktop
> index dcb5da2..7d31bed 100644
> --- a/plugins/reporting/chart/koreport_chartplugin.desktop
> +++ b/plugins/reporting/chart/koreport_chartplugin.desktop
> @@ -19,7 +19,7 @@ Name[ja]=チャートレポートプラグイン
> Name[kk]=Диаграмманы баяндау плагині
> Name[nb]=Programtillegg for diagramrapport
> Name[nl]=Plug-in voor grafiekrapport
> -Name[pl]=Wtyczka sprawozdania z wykresami
> +Name[pl]=Wtyczka wykresów dla raportów
> Name[pt]='Plugin' Web de Relatórios de Gráficos
> Name[pt_BR]=Plugin de mapas para relatório
> Name[ru]=Модуль диаграмм для отчётов
> @@ -30,6 +30,7 @@ Name[x-test]=xxChart Report Pluginxx
> Name[zh_TW]=圖表報告外掛程式
> Comment=Calligra Reports Chart Plugin
> Comment[ca]=Connector d'informes de diagrames del Calligra
> +Comment[da]=Diagram-plugin til Calligra Reports
> Comment[de]=Diagrammberichtmodul für Calligra
> Comment[en_GB]=Calligra Reports Chart Plugin
> Comment[fi]=Calligra Reportsin kaavioliitännäinen
> @@ -37,10 +38,11 @@ Comment[it]=Estensione per grafici dei rapporti di Calligra
> Comment[ja]=Calligra レポートチャートプラグイン
> Comment[nb]=Diagran-tillegg for Calligra-rapporter
> Comment[nl]=Plug-in voor Calligra Reports Chart
> -Comment[pl]=Wtyczka sprawozdania z wykresami dla Calligry
> +Comment[pl]=Wtyczka wykresów dla raportów
> Comment[pt]='Plugin' de Gráficos dos Relatórios do Calligra
> Comment[pt_BR]=Plugin de gráficos de relatórios do Calligra
> Comment[sk]=Grafový plugin Calligra Reports
> +Comment[sv]=Calligra-insticksprogram för diagramrapport
> Comment[uk]=Додаток діаграм у звітах Calligra
> Comment[x-test]=xxCalligra Reports Chart Pluginxx
> X-KDE-Library=koreport_chartplugin
> diff --git a/plugins/reporting/maps/koreport_mapsplugin.desktop b/plugins/reporting/maps/koreport_mapsplugin.desktop
> index bad750f..98925c0 100644
> --- a/plugins/reporting/maps/koreport_mapsplugin.desktop
> +++ b/plugins/reporting/maps/koreport_mapsplugin.desktop
> @@ -19,7 +19,7 @@ Name[ja]=マップレポートプラグイン
> Name[kk]=Картаны баяндау плагині
> Name[nb]=Programtillegg for kartrapport
> Name[nl]=Plug-in voor Maps Report
> -Name[pl]=Wtyczka sprawozdania map
> +Name[pl]=Wtyczka map dla raportów
> Name[pt]='Plugin' de Relatório de Mapas
> Name[pt_BR]=Plugin de mapas para relatório
> Name[ru]=Модуль карт для отчётов
> @@ -48,7 +48,7 @@ Comment[ja]=Calligra レポートマッププラグイン
> Comment[kk]=Calligra-ның картаны баяндау плагині
> Comment[nb]=Kart-programtillegg for Calligra-rapporter
> Comment[nl]=Plug-in voor Calligra Reports Maps
> -Comment[pl]=Wtyczka sprawozdania map dla Calligry
> +Comment[pl]=Wtyczka map dla raportów
> Comment[pt]='Plugin' de Mapas dos Relatórios do Calligra
> Comment[pt_BR]=Plugin de mapas dos relatórios do Calligra
> Comment[ru]=Модуль карт Calligra для отчётов
> diff --git a/plugins/reporting/web/koreport_webplugin.desktop b/plugins/reporting/web/koreport_webplugin.desktop
> index dd62de8..6b1e91e 100644
> --- a/plugins/reporting/web/koreport_webplugin.desktop
> +++ b/plugins/reporting/web/koreport_webplugin.desktop
> @@ -19,7 +19,7 @@ Name[ja]=ウェブレポートプラグイン
> Name[kk]=Веб баяндау плагині
> Name[nb]=Programtillegg for vevrapport
> Name[nl]=Plug-in voor Webrapport
> -Name[pl]=Wtyczka sprawozdania sieci
> +Name[pl]=Wtyczka strony internetowej dla raportów
> Name[pt]='Plugin' de Relatório Web
> Name[pt_BR]=Plugin de Web para relatório
> Name[ru]=Модуль веб-отчётов
> @@ -31,6 +31,7 @@ Name[x-test]=xxWeb Report Pluginxx
> Name[zh_TW]=網頁報告外掛程式
> Comment=Calligra Reports Web Plugin
> Comment[ca]=Connector d'informes web del Calligra
> +Comment[da]=Webplugin til Calligra Reports
> Comment[de]=Webbericht-Modul für Calligra
> Comment[en_GB]=Calligra Reports Web Plugin
> Comment[fi]=Calligra Reports -WWW-liitännäinen
> @@ -38,10 +39,11 @@ Comment[it]=Estensione web dei rapporti di Calligra
> Comment[ja]=Calligra レポートウェブプラグイン
> Comment[nb]=Vev-programtillegg for Calligra-rapporter
> Comment[nl]=Plug-in voor Calligra Reports Web
> -Comment[pl]=Wtyczka sprawozdania sieci dla Calligry
> +Comment[pl]=Wtyczka strony internetowej dla raportów
> Comment[pt]='Plugin' Web de Relatórios do Calligra
> Comment[pt_BR]=Plugin Web para relatórios do Calligra
> Comment[sk]=Webový plugin Calligra Reports
> +Comment[sv]=Calligra-insticksprogram för webbrapport
> Comment[uk]=Інтернет-додаток звітів Calligra
> Comment[x-test]=xxCalligra Reports Web Pluginxx
> X-KDE-Library=koreport_webplugin
> diff --git a/plugins/semanticitems/event/KoRdfCalendarEvent.h b/plugins/semanticitems/event/KoRdfCalendarEvent.h
> index 33e9c2b..2363ed3 100644
> --- a/plugins/semanticitems/event/KoRdfCalendarEvent.h
> +++ b/plugins/semanticitems/event/KoRdfCalendarEvent.h
> @@ -29,6 +29,8 @@
> class KJob;
> #endif
>
> +#include <KDateTime>
> +
> #include <ui_KoRdfCalendarEventEditWidget.h>
>
> /**
> diff --git a/plugins/textshape/dialogs/SectionFormatDialog.cpp b/plugins/textshape/dialogs/SectionFormatDialog.cpp
> index c825fd2..ef5c145 100644
> --- a/plugins/textshape/dialogs/SectionFormatDialog.cpp
> +++ b/plugins/textshape/dialogs/SectionFormatDialog.cpp
> @@ -31,9 +31,9 @@ class SectionFormatDialog::SectionNameValidator : public QValidator
> {
> public:
>     SectionNameValidator(QObject *parent, KoSectionManager *sectionManager, KoSection *section)
> -        : QValidator(parent)
> -        , m_sectionManager(sectionManager)
> -        , m_section(section)
> +    : QValidator(parent)
> +    , m_sectionManager(sectionManager)
> +    , m_section(section)
>     {
>     }
>
> @@ -63,7 +63,12 @@ SectionFormatDialog::SectionFormatDialog(QWidget *parent, KoTextEditor *editor)
>     setMainWidget(form);
>
>     m_sectionManager = KoTextDocument(editor->document()).sectionManager();
> -    m_widget.sectionTree->setModel(m_sectionManager->sectionsModel());
> +    QStandardItemModel *model = m_sectionManager->update(true);
> +    model->setColumnCount(1);
> +    QStringList header;
> +    header << i18n("Section name");
> +    model->setHorizontalHeaderLabels(header);
> +    m_widget.sectionTree->setModel(model);
>     m_widget.sectionTree->expandAll();
>
>     m_widget.sectionNameLineEdit->setEnabled(false);
> @@ -78,7 +83,8 @@ SectionFormatDialog::SectionFormatDialog(QWidget *parent, KoTextEditor *editor)
> void SectionFormatDialog::sectionNameChanged()
> {
>     m_editor->renameSection(sectionFromModel(m_curIdx), m_widget.sectionNameLineEdit->text());
> -    m_widget.sectionNameLineEdit->setModified(false);
> +    m_widget.sectionTree->model()->setData(m_curIdx, m_widget.sectionNameLineEdit->text(), Qt::DisplayRole);
> +    m_widget.sectionNameLineEdit->setModified(false); // value is set to line edit isn't modified (has new default value)
> }
>
> void SectionFormatDialog::sectionSelected(QModelIndex idx)
> @@ -106,7 +112,7 @@ void SectionFormatDialog::updateTreeState()
>         m_widget.sectionNameLineEdit->setPalette(pal);
>
>         QToolTip::showText(m_widget.sectionNameLineEdit->mapToGlobal(QPoint()),
> -            i18n("Invalid characters or section with such name exists."));
> +                           i18n("Invalid characters or section with such name exists."));
>
>         allOk = false;
>     } else {
> @@ -120,8 +126,7 @@ void SectionFormatDialog::updateTreeState()
>
> inline KoSection* SectionFormatDialog::sectionFromModel(QModelIndex idx)
> {
> -    return static_cast<KoSection *>(m_widget.sectionTree->model()
> -        ->itemData(idx)[Qt::UserRole + 1].value<void *>());
> +    return m_widget.sectionTree->model()->itemData(idx)[Qt::UserRole + 1].value<KoSection *>();
> }
>
> #include <SectionFormatDialog.moc>
> diff --git a/plugins/textshape/dialogs/SimpleInsertWidget.cpp b/plugins/textshape/dialogs/SimpleInsertWidget.cpp
> index b5500ae..6eebd3e 100644
> --- a/plugins/textshape/dialogs/SimpleInsertWidget.cpp
> +++ b/plugins/textshape/dialogs/SimpleInsertWidget.cpp
> @@ -42,6 +42,8 @@ SimpleInsertWidget::SimpleInsertWidget(TextTool *tool, QWidget *parent)
>     connect(widget.insertVariable, SIGNAL(clicked(bool)), this, SIGNAL(doneWithFocus()));
>     connect(widget.insertSpecialChar, SIGNAL(clicked(bool)), this, SIGNAL(doneWithFocus()));
>     connect(widget.insertPageBreak, SIGNAL(clicked(bool)), this, SIGNAL(doneWithFocus()));
> +    connect(widget.insertSection, SIGNAL(clicked(bool)), this, SIGNAL(doneWithFocus()));
> +    connect(widget.configureSection, SIGNAL(clicked(bool)), this, SIGNAL(doneWithFocus()));
>
>     connect(widget.quickTable, SIGNAL(create(int, int)), this, SIGNAL(insertTableQuick(int, int)));
>     connect(widget.quickTable, SIGNAL(create(int, int)), this, SIGNAL(doneWithFocus()));
> diff --git a/servicetypes/calligra_deferred_plugin.desktop b/servicetypes/calligra_deferred_plugin.desktop
> index f65e174..b2a1a43 100644
> --- a/servicetypes/calligra_deferred_plugin.desktop
> +++ b/servicetypes/calligra_deferred_plugin.desktop
> @@ -16,7 +16,7 @@ Name[it]=Estensione di caricamento differito di Calligra
> Name[kk]=Calligra-ның кідірытіп жүктеу плагині
> Name[nb]= Calligra programtillegg utsatt innlasting
> Name[nl]=Plugin voor Calligra uitgesteld laden
> -Name[pl]=Wtyczka wczytywania odstawionych dla Calligry
> +Name[pl]=Wtyczka opóźnionego wczytywania dla Calligry
> Name[pt]='Plugin' de Carregamento Posterior do Calligra
> Name[pt_BR]=Plugin de carregamento posterior do Calligra
> Name[ru]=Модуль отложенной загрузки Calligra
> diff --git a/stage/data/kpr_tool.desktop b/stage/data/kpr_tool.desktop
> index 16b515f..728d03c 100644
> --- a/stage/data/kpr_tool.desktop
> +++ b/stage/data/kpr_tool.desktop
> @@ -4,10 +4,12 @@ X-KDE-ServiceType=CalligraStage/Tool
> Comment=Tool for Calligra Stage
> Comment[ca]=Eina pel Stage del Calligra
> Comment[cs]=Nástroj pro Calligra Stage
> +Comment[da]=Værktøj til Calligra Stage
> Comment[de]=Hilfsprogramm für Calligra Stage
> Comment[en_GB]=Tool for Calligra Stage
> Comment[es]=Herramienta para Calligra Stage
> Comment[fi]=Calligra Stage -työkalu
> +Comment[ia]=Instrumento proCalligra Stage
> Comment[it]=Strumento per Calligra Stage
> Comment[ja]=Calligra Stage のためのツール
> Comment[nb]=Verktøy for Calligra Stage
> diff --git a/stage/templates/odf/cohere-blue.desktop b/stage/templates/odf/cohere-blue.desktop
> index dbd5100..e557109 100644
> --- a/stage/templates/odf/cohere-blue.desktop
> +++ b/stage/templates/odf/cohere-blue.desktop
> @@ -2,6 +2,7 @@
> Icon=cohere-blue
> Name=Cohere
> Name[ca]=Cohere
> +Name[da]=Cohere
> Name[de]=Cohere
> Name[en_GB]=Cohere
> Name[it]=Cohere
> @@ -10,10 +11,12 @@ Name[pl]=Cohere
> Name[pt]=Cohere
> Name[pt_BR]=Cohere
> Name[sk]=Cohere
> +Name[sv]=Sammanfoga
> Name[uk]=Cohere
> Name[x-test]=xxCoherexx
> Comment=Cohere designed presentation template
> Comment[ca]=Plantilles de presentacions dissenyades pel Cohere
> +Comment[da]=Cohere-designet præsentationsskabelon
> Comment[en_GB]=Cohere designed presentation template
> Comment[it]=Modello di presentazione progettato da Cohere
> Comment[nl]=Met Cohere ontworpen presentatiesjabloon
> @@ -21,6 +24,7 @@ Comment[pl]=Szablon prezentacji Cohere
> Comment[pt]=Modelo de apresentações desenhadas pela Cohere
> Comment[pt_BR]=Modelo de apresentações desenhados pelo Cohere
> Comment[sk]=Šablóna prezentácie Cohere
> +Comment[sv]=Sammanfoga skapad presentationsmall
> Comment[uk]=Шаблон презентацій, розроблений Cohere
> Comment[x-test]=xxCohere designed presentation templatexx
> X-KDE-Color=blue
> diff --git a/stage/templates/odf/cohere-gold.desktop b/stage/templates/odf/cohere-gold.desktop
> index 479d21f..cbd092a 100644
> --- a/stage/templates/odf/cohere-gold.desktop
> +++ b/stage/templates/odf/cohere-gold.desktop
> @@ -2,6 +2,7 @@
> Icon=cohere-gold
> Name=Cohere
> Name[ca]=Cohere
> +Name[da]=Cohere
> Name[de]=Cohere
> Name[en_GB]=Cohere
> Name[it]=Cohere
> @@ -10,10 +11,12 @@ Name[pl]=Cohere
> Name[pt]=Cohere
> Name[pt_BR]=Cohere
> Name[sk]=Cohere
> +Name[sv]=Sammanfoga
> Name[uk]=Cohere
> Name[x-test]=xxCoherexx
> Comment=Cohere designed presentation template
> Comment[ca]=Plantilles de presentacions dissenyades pel Cohere
> +Comment[da]=Cohere-designet præsentationsskabelon
> Comment[en_GB]=Cohere designed presentation template
> Comment[it]=Modello di presentazione progettato da Cohere
> Comment[nl]=Met Cohere ontworpen presentatiesjabloon
> @@ -21,6 +24,7 @@ Comment[pl]=Szablon prezentacji Cohere
> Comment[pt]=Modelo de apresentações desenhadas pela Cohere
> Comment[pt_BR]=Modelo de apresentações desenhados pelo Cohere
> Comment[sk]=Šablóna prezentácie Cohere
> +Comment[sv]=Sammanfoga skapad presentationsmall
> Comment[uk]=Шаблон презентацій, розроблений Cohere
> Comment[x-test]=xxCohere designed presentation templatexx
> X-KDE-Color=gold
> diff --git a/stage/templates/odf/cohere-magenta.desktop b/stage/templates/odf/cohere-magenta.desktop
> index c0aa0b8..5791b32 100644
> --- a/stage/templates/odf/cohere-magenta.desktop
> +++ b/stage/templates/odf/cohere-magenta.desktop
> @@ -2,6 +2,7 @@
> Icon=cohere-magenta
> Name=Cohere
> Name[ca]=Cohere
> +Name[da]=Cohere
> Name[de]=Cohere
> Name[en_GB]=Cohere
> Name[it]=Cohere
> @@ -10,10 +11,12 @@ Name[pl]=Cohere
> Name[pt]=Cohere
> Name[pt_BR]=Cohere
> Name[sk]=Cohere
> +Name[sv]=Sammanfoga
> Name[uk]=Cohere
> Name[x-test]=xxCoherexx
> Comment=Cohere designed presentation template
> Comment[ca]=Plantilles de presentacions dissenyades pel Cohere
> +Comment[da]=Cohere-designet præsentationsskabelon
> Comment[en_GB]=Cohere designed presentation template
> Comment[it]=Modello di presentazione progettato da Cohere
> Comment[nl]=Met Cohere ontworpen presentatiesjabloon
> @@ -21,6 +24,7 @@ Comment[pl]=Szablon prezentacji Cohere
> Comment[pt]=Modelo de apresentações desenhadas pela Cohere
> Comment[pt_BR]=Modelo de apresentações desenhados pelo Cohere
> Comment[sk]=Šablóna prezentácie Cohere
> +Comment[sv]=Sammanfoga skapad presentationsmall
> Comment[uk]=Шаблон презентацій, розроблений Cohere
> Comment[x-test]=xxCohere designed presentation templatexx
> X-KDE-Color=magenta
> diff --git a/stage/templates/odf/cohere-red.desktop b/stage/templates/odf/cohere-red.desktop
> index 53a5a38..c17f592 100644
> --- a/stage/templates/odf/cohere-red.desktop
> +++ b/stage/templates/odf/cohere-red.desktop
> @@ -2,6 +2,7 @@
> Icon=cohere-red
> Name=Cohere
> Name[ca]=Cohere
> +Name[da]=Cohere
> Name[de]=Cohere
> Name[en_GB]=Cohere
> Name[it]=Cohere
> @@ -10,10 +11,12 @@ Name[pl]=Cohere
> Name[pt]=Cohere
> Name[pt_BR]=Cohere
> Name[sk]=Cohere
> +Name[sv]=Sammanfoga
> Name[uk]=Cohere
> Name[x-test]=xxCoherexx
> Comment=Cohere designed presentation template
> Comment[ca]=Plantilles de presentacions dissenyades pel Cohere
> +Comment[da]=Cohere-designet præsentationsskabelon
> Comment[en_GB]=Cohere designed presentation template
> Comment[it]=Modello di presentazione progettato da Cohere
> Comment[nl]=Met Cohere ontworpen presentatiesjabloon
> @@ -21,6 +24,7 @@ Comment[pl]=Szablon prezentacji Cohere
> Comment[pt]=Modelo de apresentações desenhadas pela Cohere
> Comment[pt_BR]=Modelo de apresentações desenhados pelo Cohere
> Comment[sk]=Šablóna prezentácie Cohere
> +Comment[sv]=Sammanfoga skapad presentationsmall
> Comment[uk]=Шаблон презентацій, розроблений Cohere
> Comment[x-test]=xxCohere designed presentation templatexx
> X-KDE-Color=red
> diff --git a/stage/templates/odf/skyline_monotone.desktop b/stage/templates/odf/skyline_monotone.desktop
> index c0efa2b..3db2ae2 100644
> --- a/stage/templates/odf/skyline_monotone.desktop
> +++ b/stage/templates/odf/skyline_monotone.desktop
> @@ -3,15 +3,17 @@ Icon=skyline_monotone
> Name=Skyline
> Name[ca]=Horitzó
> Name[cs]=Panorama
> +Name[da]=Skyline
> Name[de]=Horizont
> Name[en_GB]=Skyline
> Name[fi]=Taivaanranta
> Name[it]=Orizzonte
> Name[nl]=Horizon
> -Name[pl]=Linia nieba
> +Name[pl]=Horyzont
> Name[pt]=Linha Celeste Nocturna
> Name[pt_BR]=Linha celeste
> Name[sk]=Panoráma
> +Name[sv]=Nattsiluett
> Name[uk]=Горизонт
> Name[x-test]=xxSkylinexx
> Comment=Skyline Monotone
> diff --git a/stage/templates/odf/skyline_monotone_wide.desktop b/stage/templates/odf/skyline_monotone_wide.desktop
> index 5c8de81..3eb754e 100644
> --- a/stage/templates/odf/skyline_monotone_wide.desktop
> +++ b/stage/templates/odf/skyline_monotone_wide.desktop
> @@ -3,14 +3,16 @@ Icon=skyline_monotone_wide
> Name=Skyline Wide
> Name[ca]=Horitzó ample
> Name[cs]=Široké panorama
> +Name[da]=Skyline bred
> Name[en_GB]=Skyline Wide
> Name[fi]=Taivaanranta, leveä
> Name[it]=Orizzonte ampio
> Name[nl]=Brede horizon
> -Name[pl]=Szeroka linia nieba
> +Name[pl]=Szeroki horyzont
> Name[pt]=Linha Celeste Nocturna Ampla
> Name[pt_BR]=Linha celeste ampla
> Name[sk]=Široká panoráma
> +Name[sv]=Nattsiluett bred
> Name[uk]=Широкий горизонт
> Name[x-test]=xxSkyline Widexx
> Comment=Skyline Monotone Wide
> diff --git a/stage/templates/odf/skyline_morning.desktop b/stage/templates/odf/skyline_morning.desktop
> index ea77d3a..e5924bd 100644
> --- a/stage/templates/odf/skyline_morning.desktop
> +++ b/stage/templates/odf/skyline_morning.desktop
> @@ -3,15 +3,17 @@ Icon=skyline_morning
> Name=Skyline
> Name[ca]=Horitzó
> Name[cs]=Panorama
> +Name[da]=Skyline
> Name[de]=Horizont
> Name[en_GB]=Skyline
> Name[fi]=Taivaanranta
> Name[it]=Orizzonte
> Name[nl]=Horizon
> -Name[pl]=Linia nieba
> +Name[pl]=Horyzont
> Name[pt]=Linha Celeste Nocturna
> Name[pt_BR]=Linha celeste
> Name[sk]=Panoráma
> +Name[sv]=Nattsiluett
> Name[uk]=Горизонт
> Name[x-test]=xxSkylinexx
> Comment=Skyline Morning
> @@ -34,7 +36,7 @@ Comment[kk]=Таңғы көкжиек
> Comment[nb]=Morgensilhuett
> Comment[nds]=Kimmümreet an'n Morgen
> Comment[nl]=Morgenhorizon
> -Comment[pl]=Poranna linia nieba
> +Comment[pl]=Poranny horyzont
> Comment[pt]=Linha Celeste Matinal
> Comment[pt_BR]=Linha celeste matinal
> Comment[ru]=Утреннее небо
> diff --git a/stage/templates/odf/skyline_morning_wide.desktop b/stage/templates/odf/skyline_morning_wide.desktop
> index 0151c53..b26ec8b 100644
> --- a/stage/templates/odf/skyline_morning_wide.desktop
> +++ b/stage/templates/odf/skyline_morning_wide.desktop
> @@ -3,14 +3,16 @@ Icon=skyline_morning_wide
> Name=Skyline Wide
> Name[ca]=Horitzó ample
> Name[cs]=Široké panorama
> +Name[da]=Skyline bred
> Name[en_GB]=Skyline Wide
> Name[fi]=Taivaanranta, leveä
> Name[it]=Orizzonte ampio
> Name[nl]=Brede horizon
> -Name[pl]=Szeroka linia nieba
> +Name[pl]=Szeroki horyzont
> Name[pt]=Linha Celeste Nocturna Ampla
> Name[pt_BR]=Linha celeste ampla
> Name[sk]=Široká panoráma
> +Name[sv]=Nattsiluett bred
> Name[uk]=Широкий горизонт
> Name[x-test]=xxSkyline Widexx
> Comment=Skyline Morning Wide
> @@ -33,7 +35,7 @@ Comment[kk]=Кең таңғы көкжиек
> Comment[nb]=Bred morgensilhuett
> Comment[nds]=Breed Kimmümreet an'n Morgen
> Comment[nl]=Brede morgenhorizon
> -Comment[pl]=Szeroka poranna linia nieba
> +Comment[pl]=Szeroki poranny horyzont
> Comment[pt]=Linha Celeste Matinal Ampla
> Comment[pt_BR]=Linha celeste matinal ampla
> Comment[ru]=Утреннее небо широкое
> diff --git a/stage/templates/odf/skyline_night.desktop b/stage/templates/odf/skyline_night.desktop
> index d9c5692..af45a44 100644
> --- a/stage/templates/odf/skyline_night.desktop
> +++ b/stage/templates/odf/skyline_night.desktop
> @@ -3,15 +3,17 @@ Icon=skyline_night
> Name=Skyline
> Name[ca]=Horitzó
> Name[cs]=Panorama
> +Name[da]=Skyline
> Name[de]=Horizont
> Name[en_GB]=Skyline
> Name[fi]=Taivaanranta
> Name[it]=Orizzonte
> Name[nl]=Horizon
> -Name[pl]=Linia nieba
> +Name[pl]=Horyzont
> Name[pt]=Linha Celeste Nocturna
> Name[pt_BR]=Linha celeste
> Name[sk]=Panoráma
> +Name[sv]=Nattsiluett
> Name[uk]=Горизонт
> Name[x-test]=xxSkylinexx
> Comment=Skyline Night
> @@ -34,7 +36,7 @@ Comment[kk]=Түнгі көкжиек
> Comment[nb]=Nattsilhuett
> Comment[nds]=Kimmümreet bi Nacht
> Comment[nl]=Nachthorizon
> -Comment[pl]=Nocna linia nieba
> +Comment[pl]=Nocny horyzont
> Comment[pt]=Linha Celeste Nocturna
> Comment[pt_BR]=Linha celeste noturna
> Comment[ru]=Ночное небо
> diff --git a/stage/templates/odf/skyline_night_wide.desktop b/stage/templates/odf/skyline_night_wide.desktop
> index a9e20fc..81c4b78 100644
> --- a/stage/templates/odf/skyline_night_wide.desktop
> +++ b/stage/templates/odf/skyline_night_wide.desktop
> @@ -3,14 +3,16 @@ Icon=skyline_night_wide
> Name=Skyline Wide
> Name[ca]=Horitzó ample
> Name[cs]=Široké panorama
> +Name[da]=Skyline bred
> Name[en_GB]=Skyline Wide
> Name[fi]=Taivaanranta, leveä
> Name[it]=Orizzonte ampio
> Name[nl]=Brede horizon
> -Name[pl]=Szeroka linia nieba
> +Name[pl]=Szeroki horyzont
> Name[pt]=Linha Celeste Nocturna Ampla
> Name[pt_BR]=Linha celeste ampla
> Name[sk]=Široká panoráma
> +Name[sv]=Nattsiluett bred
> Name[uk]=Широкий горизонт
> Name[x-test]=xxSkyline Widexx
> Comment=Skyline Night Wide
> @@ -33,7 +35,7 @@ Comment[kk]=Кең түнгі көкжиек
> Comment[nb]=Bred nattsilhuett
> Comment[nds]=Breed Kimmümreet bi Nacht
> Comment[nl]=Brede nachthorizon
> -Comment[pl]=Szeroka nocna linia nieba
> +Comment[pl]=Szeroki nocny horyzont
> Comment[pt]=Linha Celeste Nocturna Ampla
> Comment[pt_BR]=Linha celeste noturna ampla
> Comment[ru]=Ночное небо широкое
> diff --git a/words/app/words.appdata.xml b/words/app/words.appdata.xml
> index af09306..2191fc8 100644
> --- a/words/app/words.appdata.xml
> +++ b/words/app/words.appdata.xml
> @@ -104,6 +104,7 @@
>       <li xml:lang="en-GB">Allows embedding of Documents</li>
>       <li xml:lang="es">Permite incrustar documentos</li>
>       <li xml:lang="fi">Tiedostojen upottamisen tuki</li>
> +      <li xml:lang="ia">Il permitte insertar documentos</li>
>       <li xml:lang="it">Consente l'integrazione di documenti</li>
>       <li xml:lang="ja">文書への埋め込みを許可</li>
>       <li xml:lang="nb">Tillater innebygde dokumenter</li>
> @@ -121,6 +122,7 @@
>       <li xml:lang="en-GB">Customisation of user interface</li>
>       <li xml:lang="es">Personalización de la interfaz de usuario</li>
>       <li xml:lang="fi">Käyttöliittymä mukautettavissa</li>
> +      <li xml:lang="ia">Prsonalisation de le Interfacie de usator</li>
>       <li xml:lang="it">Personalizzazion e dell'interfaccia utente</li>
>       <li xml:lang="ja">ユーザインターフェースのカスタマイズ</li>
>       <li xml:lang="nb">Tilpassing av brukerflaten</li>
> diff --git a/words/part/author/author.desktop b/words/part/author/author.desktop
> index df275c5..225e9f7 100644
> --- a/words/part/author/author.desktop
> +++ b/words/part/author/author.desktop
> @@ -58,7 +58,7 @@ GenericName[lt]=Rašytojo įrankis
> GenericName[mr]=लेखक साधन
> GenericName[nb]=Forfatterverktøy
> GenericName[nl]=Author hulpmiddel
> -GenericName[pl]=Narzędzie prezentacji
> +GenericName[pl]=Narzędzie autorskie
> GenericName[pt]=Ferramenta do Author
> GenericName[pt_BR]=Ferramenta de autoria
> GenericName[sk]=Nástroj Author
> diff --git a/words/part/author/authorpart.desktop b/words/part/author/authorpart.desktop
> index b83085b..8e491ab 100644
> --- a/words/part/author/authorpart.desktop
> +++ b/words/part/author/authorpart.desktop
> @@ -58,7 +58,7 @@ GenericName[lt]=Rašytojo įrankis
> GenericName[mr]=लेखक साधन
> GenericName[nb]=Forfatterverktøy
> GenericName[nl]=Author hulpmiddel
> -GenericName[pl]=Narzędzie prezentacji
> +GenericName[pl]=Narzędzie autorskie
> GenericName[pt]=Ferramenta do Author
> GenericName[pt_BR]=Ferramenta de autoria
> GenericName[sk]=Nástroj Author
> diff --git a/words/part/dockers/KWDebugWidget.cpp b/words/part/dockers/KWDebugWidget.cpp
> index 2aa53c0..6b3bc7b 100644
> --- a/words/part/dockers/KWDebugWidget.cpp
> +++ b/words/part/dockers/KWDebugWidget.cpp
> @@ -22,6 +22,7 @@
> #include <KoParagraphStyle.h>
> #include <KoSection.h>
> #include <KoSectionEnd.h>
> +#include <KoSectionUtils.h>
>
> #include <QHBoxLayout>
> #include <QTimer>
> @@ -69,30 +70,17 @@ void KWDebugWidget::updateData()
>     QTextBlock curBlock = editor->block();
>     QTextBlockFormat fmt = curBlock.blockFormat();
>
> -    QString willShow;
> -    if (fmt.hasProperty(KoParagraphStyle::SectionStartings)) {
> -        willShow = "This sections starts here :";
> -        QVariant var = fmt.property(KoParagraphStyle::SectionStartings);
> -        QList<QVariant> openList = var.value< QList<QVariant> >();
> -        foreach (const QVariant &sv, openList)
> -        {
> -            KoSection *sec = static_cast<KoSection *>(sv.value<void *>());
> -            willShow += sec->name() + " ";
> -        }
> -        willShow.append("\n");
> +    QString willShow = "This sections starts here :";
> +    foreach (const KoSection *sec, KoSectionUtils::sectionStartings(fmt)) {
> +        willShow += " \"" + sec->name() + "\"";
>     }
> +    willShow.append("\n");
>
> -    if (fmt.hasProperty(KoParagraphStyle::SectionEndings)) {
> -        willShow += "This sections end here :";
> -        QVariant var = fmt.property(KoParagraphStyle::SectionEndings);
> -        QList<QVariant> closeList = var.value< QList<QVariant> >();
> -        foreach (const QVariant &sv, closeList)
> -        {
> -            KoSectionEnd *sec = static_cast<KoSectionEnd *>(sv.value<void *>());
> -            willShow += sec->name() + " ";
> -        }
> -        willShow.append("\n");
> +    willShow += "This sections end here :";
> +    foreach (const KoSectionEnd *sec, KoSectionUtils::sectionEndings(fmt)) {
> +        willShow += " \"" + sec->name() + "\"";
>     }
> +    willShow.append("\n");
>
>     willShow += "block number is " + QString::number(editor->constCursor().block().blockNumber()) + "\n";
>     willShow += "cur pos " + QString::number(editor->constCursor().position()) + "\n";
>


More information about the calligra-devel mailing list