aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlofi <lofi@FreeBSD.org>2005-07-11 01:45:56 +0800
committerlofi <lofi@FreeBSD.org>2005-07-11 01:45:56 +0800
commit4ef965c9cd967e484c8a294967f983bfd10c98fd (patch)
treebfd98b0680ed11900a3a76071dd76d7fdd1886cc
parent3e8e158a58cbe6ad409d3e560ef8e43e0a309e65 (diff)
downloadfreebsd-ports-gnome-4ef965c9cd967e484c8a294967f983bfd10c98fd.tar.gz
freebsd-ports-gnome-4ef965c9cd967e484c8a294967f983bfd10c98fd.tar.zst
freebsd-ports-gnome-4ef965c9cd967e484c8a294967f983bfd10c98fd.zip
Various bugfixes from the KOffice-1.4.x branch.
Submitted by: Raphael Langerhorst <raphael-langerhorst@gmx.at>
-rw-r--r--editors/calligra/Makefile1
-rw-r--r--editors/calligra/files/patch-1.4.0_patchset_1.diff5060
-rw-r--r--editors/calligra/files/patch-filters-kspread-excel-sidewinder-excel.cpp11
-rw-r--r--editors/calligra/files/patch-krita-plugins-cimg-CImg.h11
-rw-r--r--editors/calligra/files/patch-kspread-dialogs-kspread_dlg_database.cc13
-rw-r--r--editors/koffice-kde3/Makefile1
-rw-r--r--editors/koffice-kde3/files/patch-1.4.0_patchset_1.diff5060
-rw-r--r--editors/koffice-kde3/files/patch-filters-kspread-excel-sidewinder-excel.cpp11
-rw-r--r--editors/koffice-kde3/files/patch-krita-plugins-cimg-CImg.h11
-rw-r--r--editors/koffice-kde3/files/patch-kspread-dialogs-kspread_dlg_database.cc13
-rw-r--r--editors/koffice-kde4/Makefile1
-rw-r--r--editors/koffice-kde4/files/patch-1.4.0_patchset_1.diff5060
-rw-r--r--editors/koffice-kde4/files/patch-filters-kspread-excel-sidewinder-excel.cpp11
-rw-r--r--editors/koffice-kde4/files/patch-krita-plugins-cimg-CImg.h11
-rw-r--r--editors/koffice-kde4/files/patch-kspread-dialogs-kspread_dlg_database.cc13
15 files changed, 15183 insertions, 105 deletions
diff --git a/editors/calligra/Makefile b/editors/calligra/Makefile
index 36889951226f..e85d413c5897 100644
--- a/editors/calligra/Makefile
+++ b/editors/calligra/Makefile
@@ -7,6 +7,7 @@
PORTNAME= koffice
PORTVERSION= 1.4.0a
+PORTREVISION= 1
PORTEPOCH= 1
CATEGORIES= editors kde
MASTER_SITES= ${MASTER_SITE_KDE}
diff --git a/editors/calligra/files/patch-1.4.0_patchset_1.diff b/editors/calligra/files/patch-1.4.0_patchset_1.diff
new file mode 100644
index 000000000000..bf61a1b9ba41
--- /dev/null
+++ b/editors/calligra/files/patch-1.4.0_patchset_1.diff
@@ -0,0 +1,5060 @@
+Index: kformula/kformulapart.desktop
+===================================================================
+--- kformula/kformulapart.desktop (revision 427945)
++++ kformula/kformulapart.desktop (working copy)
+@@ -19,6 +19,7 @@
+ Name[pt]=Componente de Fórmulas do KOffice
+ Name[pt_BR]=Componente de Fórmulas do KOffice
+ Name[ru]=Компонент формул KOffice
++Name[sl]=Komponenta za enačbe za KOffice
+ Name[sr]=KOffice-ова компонента за формуле
+ Name[sr@Latn]=KOffice-ova komponenta za formule
+ Name[sv]=Koffice-formelkomponent
+Index: servicetypes/koplugin.desktop
+===================================================================
+--- servicetypes/koplugin.desktop (revision 427945)
++++ servicetypes/koplugin.desktop (working copy)
+@@ -22,6 +22,7 @@
+ Comment[fi]=KOffice-laajennus
+ Comment[fo]=KSkrivstovu-ístingur
+ Comment[fr]=Module externe de KOffice
++Comment[ga]=Breiseán KOffice
+ Comment[he]=תוסף של KOffice
+ Comment[hr]=KOffice dodatak
+ Comment[hu]=KOffice-bővítőmodul
+Index: servicetypes/kofficepart.desktop
+===================================================================
+--- servicetypes/kofficepart.desktop (revision 427945)
++++ servicetypes/kofficepart.desktop (working copy)
+@@ -22,6 +22,7 @@
+ Comment[fa]=KOffice اجزای
+ Comment[fi]=KOffice-komponentti
+ Comment[fr]=Composant KOffice
++Comment[ga]=Comhpháirt KOffice
+ Comment[he]=רכיב של KOffice
+ Comment[hr]=KOffice komponenta
+ Comment[hu]=KOffice-komponens
+Index: servicetypes/kofilter.desktop
+===================================================================
+--- servicetypes/kofilter.desktop (revision 427945)
++++ servicetypes/kofilter.desktop (working copy)
+@@ -22,6 +22,7 @@
+ Comment[fi]=KOffice-suodin
+ Comment[fo]=KSkrivstovu-filtur
+ Comment[fr]=Filtre KOffice
++Comment[ga]=Scagaire KOffice
+ Comment[he]=מסנן של KOffice
+ Comment[hr]=KOffice filter
+ Comment[hu]=KOffice-szűrő
+Index: kword/kwordpart.desktop
+===================================================================
+--- kword/kwordpart.desktop (revision 427945)
++++ kword/kwordpart.desktop (working copy)
+@@ -20,6 +20,7 @@
+ Name[pt]=Componente de Processamento de Texto do KOffice
+ Name[pt_BR]=Componente de Processamento de Texto do KOffice
+ Name[ru]=Компонент текстового редактора KOffice
++Name[sl]=Komponenta za obdelovanje besedil za KOffice
+ Name[sr]=KOffice-ова компонента за обраду текста
+ Name[sr@Latn]=KOffice-ova komponenta za obradu teksta
+ Name[sv]=Koffice-ordbehandlingskomponent
+Index: kword/kwmailmerge.desktop
+===================================================================
+--- kword/kwmailmerge.desktop (revision 427945)
++++ kword/kwmailmerge.desktop (working copy)
+@@ -17,6 +17,7 @@
+ Comment[et]=KWordi kirjakoosteplugin
+ Comment[fi]=KWord-postituslaajennus
+ Comment[fr]=Module fusion de courrier pour KWord
++Comment[ga]=Breiseán postchumaisc KWord
+ Comment[he]=תוסף מיזוג דואר ל־KWord
+ Comment[hr]=KWord dodatak za mailmerge
+ Comment[hu]=KWord körlevél-bővítőmodul
+Index: kword/configfootnotedia.h
+===================================================================
+--- kword/configfootnotedia.h (revision 427945)
++++ kword/configfootnotedia.h (working copy)
+@@ -28,7 +28,7 @@
+ class QRadioButton;
+ class KIntNumInput;
+ class QComboBox;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+
+ class KWConfigFootNoteDia : public KDialogBase
+ {
+@@ -47,7 +47,7 @@
+ QRadioButton *rbPosCentered;
+ QRadioButton *rbPosRight;
+ KIntNumInput *spLength;
+- KoUnitDoubleSpinBox *spWidth;
++ KoBuggyUnitDoubleSpinBox *spWidth;
+ QComboBox *m_cbLineType;
+ protected slots:
+ virtual void slotOk();
+Index: kword/kwconfig.cc
+===================================================================
+--- kword/kwconfig.cc (revision 427945)
++++ kword/kwconfig.cc (working copy)
+@@ -301,7 +301,7 @@
+
+ QHBox* hbGridX = new QHBox( gbInterfaceGroup );
+ QLabel* labelGridX = new QLabel( i18n("&Horizontal grid size:"), hbGridX );
+- gridX=new KoUnitDoubleSpinBox( hbGridX,
++ gridX=new KoBuggyUnitDoubleSpinBox( hbGridX,
+ 0.1,
+ 50,
+ 0.1,
+@@ -313,7 +313,7 @@
+
+ QHBox* hbGridY = new QHBox( gbInterfaceGroup );
+ QLabel* labelGridY = new QLabel( i18n("&Vertical grid size:"), hbGridY );
+- gridY=new KoUnitDoubleSpinBox( hbGridY,
++ gridY=new KoBuggyUnitDoubleSpinBox( hbGridY,
+ 0.1,
+ 50,
+ 0.1,
+@@ -326,7 +326,7 @@
+
+ QHBox* hbIndent = new QHBox( gbInterfaceGroup );
+ QLabel* labelIdent = new QLabel( i18n("&Paragraph indent by toolbar buttons:"), hbIndent );
+- indent = new KoUnitDoubleSpinBox( hbIndent,
++ indent = new KoBuggyUnitDoubleSpinBox( hbIndent,
+ 0.1,
+ 50,
+ 0.1,
+@@ -662,7 +662,7 @@
+
+ QHBox* hbColumnSpacing = new QHBox( gbDocumentDefaults );
+ QLabel* columnSpacingLabel = new QLabel( i18n("Default column spacing:"), hbColumnSpacing );
+- m_columnSpacing = new KoUnitDoubleSpinBox( hbColumnSpacing,
++ m_columnSpacing = new KoBuggyUnitDoubleSpinBox( hbColumnSpacing,
+ 0.1,
+ 50,
+ 0.1,
+@@ -764,7 +764,7 @@
+
+ QHBox* hbTabStop = new QHBox( gbDocumentSettings );
+ tabStop = new QLabel(i18n("Tab stop (%1):").arg(doc->unitName()), hbTabStop);
+- m_tabStopWidth = new KoUnitDoubleSpinBox( hbTabStop,
++ m_tabStopWidth = new KoBuggyUnitDoubleSpinBox( hbTabStop,
+ MM_TO_POINT(2),
+ doc->ptPaperWidth(),
+ 0.1,
+Index: kword/framedia.cc
+===================================================================
+--- kword/framedia.cc (revision 427945)
++++ kword/framedia.cc (working copy)
+@@ -956,7 +956,7 @@
+ lx->resize( lx->sizeHint() );
+ pGrid->addWidget( lx, 1, 0 );
+
+- sx = new KoUnitDoubleSpinBox( grp1, 0, 9999, 1, 0.0, doc->unit() );
++ sx = new KoBuggyUnitDoubleSpinBox( grp1, 0, 9999, 1, 0.0, doc->unit() );
+
+ sx->resize( sx->sizeHint() );
+ pGrid->addWidget( sx, 1, 1 );
+@@ -965,7 +965,7 @@
+ ly->resize( ly->sizeHint() );
+ pGrid->addWidget( ly, 1, 2 );
+
+- sy = new KoUnitDoubleSpinBox( grp1, 0, 9999, 1, 0.0, doc->unit() );
++ sy = new KoBuggyUnitDoubleSpinBox( grp1, 0, 9999, 1, 0.0, doc->unit() );
+ sy->resize( sy->sizeHint() );
+ pGrid->addWidget( sy, 1, 3 );
+
+@@ -973,7 +973,7 @@
+ lw->resize( lw->sizeHint() );
+ pGrid->addWidget( lw, 2, 0 );
+
+- sw = new KoUnitDoubleSpinBox( grp1, 0, 9999, 1, 0.0, doc->unit() );
++ sw = new KoBuggyUnitDoubleSpinBox( grp1, 0, 9999, 1, 0.0, doc->unit() );
+
+ sw->resize( sw->sizeHint() );
+ connect( sw, SIGNAL(valueChanged(double)),
+@@ -985,7 +985,7 @@
+ lh->resize( lh->sizeHint() );
+ pGrid->addWidget( lh, 2, 2 );
+
+- sh = new KoUnitDoubleSpinBox( grp1, 0, 9999, 1, 0.0, doc->unit() );
++ sh = new KoBuggyUnitDoubleSpinBox( grp1, 0, 9999, 1, 0.0, doc->unit() );
+ connect( sh, SIGNAL(valueChanged(double)),
+ this, SLOT(slotUpdateWidthForHeight(double)) );
+
+@@ -1095,7 +1095,7 @@
+
+ f=allFrames.next();
+ }
+- // TODO port to KoUnitDoubleSpinBox
++ // TODO port to KoBuggyUnitDoubleSpinBox
+ // and TODO show a special value when frames have a different width/height
+ if ( sw->isEnabled() )
+ sw->setValue( KoUnit::toUserValue( commonWidth, doc->unit() ) );
+@@ -2103,7 +2103,7 @@
+ //lml->resize( lml->sizeHint() );
+ mGrid->addWidget( lml, 2, 0 );
+
+- m_inputLeft = new KoUnitDoubleSpinBox( grp2, 0, 9999, 1, 0.0, doc->unit() );
++ m_inputLeft = new KoBuggyUnitDoubleSpinBox( grp2, 0, 9999, 1, 0.0, doc->unit() );
+
+ mGrid->addWidget( m_inputLeft, 2, 1 );
+
+@@ -2111,7 +2111,7 @@
+ //lmt->resize( lmt->sizeHint() );
+ mGrid->addWidget( lmt, 2, 2 );
+
+- m_inputTop = new /*KDoubleNumInput*/KoUnitDoubleSpinBox( grp2, 0, 9999, 1, 0.0, doc->unit() );
++ m_inputTop = new /*KDoubleNumInput*/KoBuggyUnitDoubleSpinBox( grp2, 0, 9999, 1, 0.0, doc->unit() );
+
+ //m_inputTop->resize( m_inputTop->sizeHint() );
+
+@@ -2121,7 +2121,7 @@
+ //lmr->resize( lmr->sizeHint() );
+ mGrid->addWidget( lmr, 3, 0 );
+
+- m_inputRight = new KoUnitDoubleSpinBox( grp2, 0, 9999, 1, 0.0, doc->unit() );
++ m_inputRight = new KoBuggyUnitDoubleSpinBox( grp2, 0, 9999, 1, 0.0, doc->unit() );
+
+ //m_inputRight->resize( m_inputRight->sizeHint() );
+ mGrid->addWidget( m_inputRight, 3, 1 );
+@@ -2130,7 +2130,7 @@
+ //lmb->resize( lmb->sizeHint() );
+ mGrid->addWidget( lmb, 3, 2 );
+
+- m_inputBottom = new KoUnitDoubleSpinBox( grp2, 0, 9999, 1, 0.0, doc->unit() );
++ m_inputBottom = new KoBuggyUnitDoubleSpinBox( grp2, 0, 9999, 1, 0.0, doc->unit() );
+
+ //m_inputBottom->resize( m_inputBottom->sizeHint() );
+ mGrid->addWidget( m_inputBottom, 3, 3 );
+Index: kword/resizetabledia.cc
+===================================================================
+--- kword/resizetabledia.cc (revision 427945)
++++ kword/resizetabledia.cc (working copy)
+@@ -77,7 +77,7 @@
+ else
+ value->setValue( type == ROW ? (rowSelected+1) : (colSelected+1) );
+ rc = new QLabel( type == ROW ? i18n( "Height (%1):" ).arg(doc->unitName()) : i18n( "Width (%1):" ).arg(doc->unitName()), page );
+- position= new KoUnitDoubleSpinBox( page, 0.01, table->anchorFrameset()->isFloating() ? table->anchorFrameset()->frame(0)->width(): 9999, 1, 0.0, doc->unit(), doc->unit() );
++ position= new KoBuggyUnitDoubleSpinBox( page, 0.01, table->anchorFrameset()->isFloating() ? table->anchorFrameset()->frame(0)->width(): 9999, 1, 0.0, doc->unit(), doc->unit() );
+ slotValueChanged( value->value());
+ connect( value, SIGNAL( valueChanged ( int )), this, SLOT( slotValueChanged( int )));
+
+Index: kword/mailmerge/sql/kwserialletter_qtsqldb.desktop
+===================================================================
+--- kword/mailmerge/sql/kwserialletter_qtsqldb.desktop (revision 427945)
++++ kword/mailmerge/sql/kwserialletter_qtsqldb.desktop (working copy)
+@@ -4,6 +4,7 @@
+ ServiceTypes=KWord/MailMergePlugin
+
+ Name=Qt-SQL Source (single table)
++Name[cy]=Ffynhonell Qt-SQL (tabl sengl)
+ Name[da]=Qt-SQL-kilde (enkelt tabel)
+ Name[de]=Qt-SQL (Einzeltabelle)
+ Name[el]=Qt-SQL πηγή (μονός πίνακας)
+Index: kword/mailmerge/kspread/kwmailmerge_kspread.desktop
+===================================================================
+--- kword/mailmerge/kspread/kwmailmerge_kspread.desktop (revision 427945)
++++ kword/mailmerge/kspread/kwmailmerge_kspread.desktop (working copy)
+@@ -22,6 +22,7 @@
+ Name[pt]=Fonte de Tabela do KSpread
+ Name[pt_BR]=Fonte de Tabela do KSpread
+ Name[ru]=Источник таблиц KSpread
++Name[sl]=Vir tabel KSpread
+ Name[sr]=KSpread-ов извор табеле
+ Name[sr@Latn]=KSpread-ov izvor tabele
+ Name[sv]=Kspread-tabellkällfil
+Index: kword/framedia.h
+===================================================================
+--- kword/framedia.h (revision 427945)
++++ kword/framedia.h (working copy)
+@@ -81,7 +81,7 @@
+ void slotValueChanged( double );
+
+ private:
+- KoUnitDoubleSpinBox *m_inputLeft, *m_inputRight, *m_inputTop, *m_inputBottom;
++ KoBuggyUnitDoubleSpinBox *m_inputLeft, *m_inputRight, *m_inputTop, *m_inputBottom;
+ QCheckBox *m_synchronize;
+ KWDocument *doc;
+ bool m_changed;
+@@ -168,7 +168,7 @@
+ QWidget *tab4;
+ QGroupBox *grp1;
+ QLabel *lx, *ly, *lw, *lh;
+- KoUnitDoubleSpinBox *sx, *sy, *sw, *sh;
++ KoBuggyUnitDoubleSpinBox *sx, *sy, *sw, *sh;
+ KWFourSideConfigWidget* m_paddingConfigWidget;
+ QCheckBox *floating;
+ QCheckBox *protectSize;
+Index: kword/kwconfig.h
+===================================================================
+--- kword/kwconfig.h (revision 427945)
++++ kword/kwconfig.h (working copy)
+@@ -29,7 +29,7 @@
+ class KWView;
+ class QCheckBox;
+ class KIntNumInput;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+ class KConfig;
+ class QComboBox;
+ class KIntNumInput;
+@@ -69,8 +69,8 @@
+ KWView* m_pView;
+ KConfig* config;
+ QComboBox *m_unitCombo;
+- KoUnitDoubleSpinBox* gridX,*gridY;
+- KoUnitDoubleSpinBox* indent;
++ KoBuggyUnitDoubleSpinBox* gridX,*gridY;
++ KoBuggyUnitDoubleSpinBox* indent;
+ KIntNumInput* recentFiles;
+ QCheckBox *showStatusBar, *showScrollBar, *pgUpDownMovesCaret;
+ int oldNbRecentFiles;
+@@ -114,7 +114,7 @@
+ QLabel *fontName;
+ QLabel *tabStop;
+
+- KoUnitDoubleSpinBox* m_columnSpacing;
++ KoBuggyUnitDoubleSpinBox* m_columnSpacing;
+
+ KIntNumInput* autoSave;
+ int oldAutoSaveValue;
+@@ -123,7 +123,7 @@
+ int m_oldStartingPage;
+ bool m_oldBackupFile;
+ KIntNumInput* m_variableNumberOffset;
+- KoUnitDoubleSpinBox *m_tabStopWidth;
++ KoBuggyUnitDoubleSpinBox *m_tabStopWidth;
+ QCheckBox *m_cursorInProtectedArea;
+ QCheckBox *m_createBackupFile;
+ // QCheckBox *m_directInsertCursor;
+Index: kword/configfootnotedia.cc
+===================================================================
+--- kword/configfootnotedia.cc (revision 427945)
++++ kword/configfootnotedia.cc (working copy)
+@@ -106,7 +106,7 @@
+
+ QGridLayout *layout = new QGridLayout( 0, 1, 1, 0, 6);
+
+- spWidth = new KoUnitDoubleSpinBox(page, 0, 5, 0.5, 1.0, m_doc->unit(), 1);
++ spWidth = new KoBuggyUnitDoubleSpinBox(page, 0, 5, 0.5, 1.0, m_doc->unit(), 1);
+ spWidth->setValue( m_doc->footNoteSeparatorLineWidth());
+ layout->addWidget( spWidth, 1, 1 );
+
+Index: kword/templates/DTP/SimpleLayout.desktop
+===================================================================
+--- kword/templates/DTP/SimpleLayout.desktop (revision 427945)
++++ kword/templates/DTP/SimpleLayout.desktop (working copy)
+@@ -21,6 +21,7 @@
+ Name[fa]=نمونه طرح بندی
+ Name[fi]=Yksinkertainen taittomalli
+ Name[fr]=Mise en page simple
++Name[ga]=Leagan Amach Simplí
+ Name[he]=פריסה פשוטה
+ Name[hr]=Jednostavni raspored
+ Name[hu]=Egyszerű elrendezés
+Index: kword/templates/DTP/Empty.desktop
+===================================================================
+--- kword/templates/DTP/Empty.desktop (revision 427945)
++++ kword/templates/DTP/Empty.desktop (working copy)
+@@ -17,6 +17,7 @@
+ Name[fa]=صفحه خالی
+ Name[fi]=Tyhjä sivu
+ Name[fr]=Page vide
++Name[ga]=Leathanach Folamh
+ Name[he]=דף ריק
+ Name[hr]=Prazna stranica
+ Name[hu]=Üres oldal
+Index: kword/templates/DTP/fax.desktop
+===================================================================
+--- kword/templates/DTP/fax.desktop (revision 427945)
++++ kword/templates/DTP/fax.desktop (working copy)
+@@ -20,6 +20,7 @@
+ Name[fa]=نمونه دورنگار
+ Name[fi]=Faksipohja
+ Name[fr]=Modèle de fax
++Name[ga]=Teimpléad Facs
+ Name[he]=תבנית פקס
+ Name[hr]=Fax predložak
+ Name[hu]=Faxsablon
+@@ -63,6 +64,7 @@
+ Comment[et]=Faks päisega
+ Comment[fi]=Faksiasiakirja otsikolla
+ Comment[fr]=Document de fax. avec en-tête
++Comment[ga]=Cáipéis fhacs, le ceanntásc
+ Comment[he]=מסמך פקס עם כותרת
+ Comment[hr]=Faks dokument, sa zaglavljem
+ Comment[hu]=Fax dokumentum (fejléccel)
+Index: kword/templates/Wordprocessing/TwoColumns.desktop
+===================================================================
+--- kword/templates/Wordprocessing/TwoColumns.desktop (revision 427945)
++++ kword/templates/Wordprocessing/TwoColumns.desktop (working copy)
+@@ -22,6 +22,7 @@
+ Name[fi]=Kaksi palstaa
+ Name[fo]=Tveir teigar
+ Name[fr]=Deux colonnes
++Name[ga]=Dhá Cholún
+ Name[he]=שני טורים
+ Name[hr]=Dva stupca
+ Name[hu]=Kétoszlopos
+Index: kword/resizetabledia.h
+===================================================================
+--- kword/resizetabledia.h (revision 427945)
++++ kword/resizetabledia.h (working copy)
+@@ -31,7 +31,7 @@
+ class QRadioButton;
+ class QLabel;
+ class QSpinBox;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+
+ class KWResizeTableDia : public KDialogBase
+ {
+@@ -48,7 +48,7 @@
+ KWDocument *doc;
+ ResizeType type;
+ KWCanvas *canvas;
+- KoUnitDoubleSpinBox *position;
++ KoBuggyUnitDoubleSpinBox *position;
+ double resetValue;
+ protected slots:
+ virtual void slotOk();
+Index: kexi/plugins/forms/kexilabel.cpp
+===================================================================
+--- kexi/plugins/forms/kexilabel.cpp (revision 427945)
++++ kexi/plugins/forms/kexilabel.cpp (working copy)
+@@ -33,6 +33,20 @@
+ #define SHADOW_DIAGONAL_FACTOR 1.0
+ #define SHADOW_THICKNESS 1
+
++class KexiLabelPrivate : public QLabel {
++ friend class KexiLabel;
++ public:
++ KexiLabelPrivate( KexiLabel* );
++ virtual ~KexiLabelPrivate();
++ private:
++ QImage makeShadow( const QImage& textImage, const QColor &bgColor, const QRect& boundingRect );
++ QRect getBounding( const QImage &image, const QRect& startRect );
++// double defaultDecay( QImage& source, int i, int j );
++ KPixmap getShadowPixmap();
++
++ QRect p_shadowRect;
++};
++
+ KexiLabelPrivate::KexiLabelPrivate( KexiLabel* parent )
+ : QLabel( parent )
+ {
+@@ -404,6 +418,40 @@
+ QLabel::paintEvent( e );
+ }
+
++void KexiLabel::fontChange( const QFont& font ) {
++ p_pixmapDirty = true;
++ p_privateLabel->setFont( font );
++ QLabel::fontChange( font );
++}
++
++void KexiLabel::styleChange( QStyle& style ) {
++ p_pixmapDirty = true;
++ QLabel::styleChange( style );
++}
++
++void KexiLabel::enabledChange( bool enabled ) {
++ p_pixmapDirty = true;
++ p_privateLabel->setEnabled( enabled );
++ QLabel::enabledChange( enabled );
++}
++
++void KexiLabel::paletteChange( const QPalette& pal ) {
++ p_pixmapDirty = true;
++ p_privateLabel->setPalette( pal );
++ QLabel::paletteChange( pal );
++}
++
++void KexiLabel::frameChanged() {
++ p_pixmapDirty = true;
++ p_privateLabel->frameChanged();
++ QFrame::frameChanged();
++}
++
++void KexiLabel::showEvent( QShowEvent* e ) {
++ p_pixmapDirty = true;
++ QLabel::showEvent( e );
++}
++
+ void KexiLabel::setValueInternal( const QVariant& add, bool removeOld ) {
+ if (removeOld)
+ setText(add.toString());
+Index: kexi/plugins/forms/kexilabel.h
+===================================================================
+--- kexi/plugins/forms/kexilabel.h (revision 427945)
++++ kexi/plugins/forms/kexilabel.h (working copy)
+@@ -32,20 +32,10 @@
+ class QTimer;
+ class KexiLabel;
+
+-class KexiLabelPrivate : public QLabel {
+- friend class KexiLabel;
+- public:
+- KexiLabelPrivate( KexiLabel* );
+- virtual ~KexiLabelPrivate();
+- private:
+- QImage makeShadow( const QImage& textImage, const QColor &bgColor, const QRect& boundingRect );
+- QRect getBounding( const QImage &image, const QRect& startRect );
+-// double defaultDecay( QImage& source, int i, int j );
+- KPixmap getShadowPixmap();
++class KexiLabelPrivate;
+
+- QRect p_shadowRect;
+-};
+
++
+ /**
+ An extended, data-aware, read-only text label.
+ It's text may have a drop-shadow.
+@@ -139,40 +129,14 @@
+ */
+ virtual void setValueInternal( const QVariant& add, bool removeOld );
+
+- virtual void fontChange( const QFont& font ) {
+- p_pixmapDirty = true;
+- p_privateLabel->setFont( font );
+- QLabel::fontChange( font );
+- }
++ virtual void fontChange( const QFont& font );
++ virtual void styleChange( QStyle& style );
++ virtual void enabledChange( bool enabled );
+
+- virtual void styleChange( QStyle& style ) {
+- p_pixmapDirty = true;
+- QLabel::styleChange( style );
+- }
++ virtual void paletteChange( const QPalette& pal );
++ virtual void frameChanged();
++ virtual void showEvent( QShowEvent* e );
+
+- virtual void enabledChange( bool enabled ) {
+- p_pixmapDirty = true;
+- p_privateLabel->setEnabled( enabled );
+- QLabel::enabledChange( enabled );
+- }
+-
+- virtual void paletteChange( const QPalette& pal ) {
+- p_pixmapDirty = true;
+- p_privateLabel->setPalette( pal );
+- QLabel::paletteChange( pal );
+- }
+-
+- virtual void frameChanged() {
+- p_pixmapDirty = true;
+- p_privateLabel->frameChanged();
+- QFrame::frameChanged();
+- }
+-
+- virtual void showEvent( QShowEvent* e ) {
+- p_pixmapDirty = true;
+- QLabel::showEvent( e );
+- }
+-
+ private:
+ void updatePixmapLater();
+
+Index: kexi/plugins/kugar/kexikugarhandler.desktop
+===================================================================
+--- kexi/plugins/kugar/kexikugarhandler.desktop (revision 427945)
++++ kexi/plugins/kugar/kexikugarhandler.desktop (working copy)
+@@ -60,7 +60,7 @@
+ Comment[nn]=Integrasjon av Kugar-basert rapportgenerering
+ Comment[pt]=Integração da geração de relatórios do Kugar
+ Comment[pt_BR]=Integração do Kugar baseada na geração de relatório
+-Comment[ru]=Интеграция с Kugar для построения отчётов
++Comment[ru]=Отчёт посредством Kugar
+ Comment[sk]=Integrácia generovaných správ založených na Kugar
+ Comment[sl]=Integracija ustvarjanja poročil na osnovi Kugarja
+ Comment[sr]=Интеграција прављења извештаја заснованог на Kugar-у
+Index: kexi/plugins/reports/kexireportfactory.desktop
+===================================================================
+--- kexi/plugins/reports/kexireportfactory.desktop (revision 427945)
++++ kexi/plugins/reports/kexireportfactory.desktop (working copy)
+@@ -19,6 +19,7 @@
+ Name[pt]=Elementos de Relatório do Kexi
+ Name[pt_BR]=Widgets de Relatório do Kexi
+ Name[ru]=Элементы управления для отчётов Kexi
++Name[sl]=Gradniki za poročila za Kexi
+ Name[sr]=Kexi-јеве контроле за извештаје
+ Name[sr@Latn]=Kexi-jeve kontrole za izveštaje
+ Name[sv]=Kexi-rapportkomponenter
+Index: kexi/kexipart.desktop
+===================================================================
+--- kexi/kexipart.desktop (revision 427945)
++++ kexi/kexipart.desktop (working copy)
+@@ -19,6 +19,7 @@
+ Name[pt]=Componente de Bases de Dados do KOffice
+ Name[pt_BR]=Componente de Banco de Dados do KOffice
+ Name[ru]=Компонент баз данных KOffice
++Name[sl]=Komponenta za zbirke podatkov za KOffice
+ Name[sr]=KOffice-ова компонента за базе података
+ Name[sr@Latn]=KOffice-ova komponenta za baze podataka
+ Name[sv]=Koffice-databaskomponent
+Index: kexi/filters/import/csv/kexicsvimport.desktop
+===================================================================
+--- kexi/filters/import/csv/kexicsvimport.desktop (revision 427945)
++++ kexi/filters/import/csv/kexicsvimport.desktop (working copy)
+@@ -42,7 +42,7 @@
+ Comment[pl]=Import pliku CVS...
+ Comment[pt]=Importar um Ficheiro CSV...
+ Comment[pt_BR]=Importar Arquivo CSV...
+-Comment[ru]=Импорт данных из CSV...
++Comment[ru]=Импорт из CSV...
+ Comment[sk]=Import súborov CSV...
+ Comment[sl]=Uvoz datoteke CSV ...
+ Comment[sr]=Увози се CSV фајл...
+Index: kexi/filters/import/kspread_chain/kexikspreadimport.desktop
+===================================================================
+--- kexi/filters/import/kspread_chain/kexikspreadimport.desktop (revision 427945)
++++ kexi/filters/import/kspread_chain/kexikspreadimport.desktop (working copy)
+@@ -38,7 +38,7 @@
+ Comment[nn]=Importer KSpread-lesbar fil ...
+ Comment[pt]=Importar um ficheiro KSpread...
+ Comment[pt_BR]=Importar arquivo legível do KSpread...
+-Comment[ru]=Импорт в KSpread...
++Comment[ru]=Импорт данных из KSpread...
+ Comment[sk]=Import súboru podporovaného KSpread...
+ Comment[sl]=Uvoz datoteke za KSpread ...
+ Comment[sr]=Увози се фајл који се може читати KSpread-ом...
+Index: kexi/data/x-kexiproject-sqlite2.desktop
+===================================================================
+--- kexi/data/x-kexiproject-sqlite2.desktop (revision 427945)
++++ kexi/data/x-kexiproject-sqlite2.desktop (working copy)
+@@ -21,6 +21,7 @@
+ Comment[pt]=Projecto do Kexi em Ficheiro de Base de Dados
+ Comment[pt_BR]=Projeto Baseado em Arquivo de Banco de Dados do Kexi
+ Comment[ru]=Проект Kexi с хранилищем данных в файлах
++Comment[sl]=Na datotekah zasnovan projekt zbirke podatkov Kexi
+ Comment[sr]=Kexi-јев пројекат базе података заснован на фајлу
+ Comment[sr@Latn]=Kexi-jev projekat baze podataka zasnovan na fajlu
+ Comment[sv]=Kexi filbaserat databasprojekt
+Index: kexi/data/x-kexiproject-sqlite3.desktop
+===================================================================
+--- kexi/data/x-kexiproject-sqlite3.desktop (revision 427945)
++++ kexi/data/x-kexiproject-sqlite3.desktop (working copy)
+@@ -21,6 +21,7 @@
+ Comment[pt]=Projecto do Kexi em Ficheiro de Base de Dados
+ Comment[pt_BR]=Projeto Baseado em Arquivo de Banco de Dados do Kexi
+ Comment[ru]=Проект Kexi с хранилищем данных в файлах
++Comment[sl]=Na datotekah zasnovan projekt zbirke podatkov Kexi
+ Comment[sr]=Kexi-јев пројекат базе података заснован на фајлу
+ Comment[sr@Latn]=Kexi-jev projekat baze podataka zasnovan na fajlu
+ Comment[sv]=Kexi filbaserat databasprojekt
+Index: kexi/data/x-kexiproject-sqlite.desktop
+===================================================================
+--- kexi/data/x-kexiproject-sqlite.desktop (revision 427945)
++++ kexi/data/x-kexiproject-sqlite.desktop (working copy)
+@@ -22,6 +22,7 @@
+ Comment[pt]=Projecto do Kexi em Ficheiro de Base de Dados
+ Comment[pt_BR]=Projeto Baseado em Arquivo de Banco de Dados do Kexi
+ Comment[ru]=Проект Kexi с хранилищем данных в файлах
++Comment[sl]=Na datotekah zasnovan projekt zbirke podatkov Kexi
+ Comment[sr]=Kexi-јев пројекат базе података заснован на фајлу
+ Comment[sr@Latn]=Kexi-jev projekat baze podataka zasnovan na fajlu
+ Comment[sv]=Kexi filbaserat databasprojekt
+Index: kexi/data/kde32compat/x-sqlite2.desktop
+===================================================================
+--- kexi/data/kde32compat/x-sqlite2.desktop (revision 427945)
++++ kexi/data/kde32compat/x-sqlite2.desktop (working copy)
+@@ -21,6 +21,7 @@
+ Comment[pt]=Ficheiro de Base de Dados do SQLite2
+ Comment[pt_BR]=Ficheiro de Base de Dados do SQLite2
+ Comment[ru]=База данных SQLite2
++Comment[sl]=Datoteka zbirke podatkov SQLite2
+ Comment[sr]=Фајл базе података SQLite2
+ Comment[sr@Latn]=Fajl baze podataka SQLite2
+ Comment[sv]=SQLite2-databasfil
+Index: kexi/data/kde32compat/x-sqlite3.desktop
+===================================================================
+--- kexi/data/kde32compat/x-sqlite3.desktop (revision 427945)
++++ kexi/data/kde32compat/x-sqlite3.desktop (working copy)
+@@ -20,6 +20,7 @@
+ Comment[pt]=Ficheiro de Base de Dados do SQLite3
+ Comment[pt_BR]=Ficheiro de Base de Dados do SQLite3
+ Comment[ru]=База данных SQLite3
++Comment[sl]=Datoteka zbirke podatkov SQLite3
+ Comment[sr]=Фајл базе података SQLite3
+ Comment[sr@Latn]=Fajl baze podataka SQLite3
+ Comment[sv]=SQLite3-databasfil
+Index: kexi/data/kexiscripthandler.desktop
+===================================================================
+--- kexi/data/kexiscripthandler.desktop (revision 427945)
++++ kexi/data/kexiscripthandler.desktop (working copy)
+@@ -5,6 +5,7 @@
+
+ GenericName=Scripts
+ GenericName[br]=Urzhiaouegoù
++GenericName[cy]=Sgriptiau
+ GenericName[da]=Scripter
+ GenericName[de]=Skripte
+ GenericName[el]=Σενάρια
+@@ -27,6 +28,7 @@
+ GenericName[zh_CN]=脚本
+ Name=Scripts
+ Name[br]=Urzhiaouegoù
++Name[cy]=Sgriptiau
+ Name[da]=Scripter
+ Name[de]=Skripte
+ Name[el]=Σενάρια
+Index: kexi/formeditor/kdevelop_plugin/kformdesigner_kdev_part.desktop
+===================================================================
+--- kexi/formeditor/kdevelop_plugin/kformdesigner_kdev_part.desktop (revision 427945)
++++ kexi/formeditor/kdevelop_plugin/kformdesigner_kdev_part.desktop (working copy)
+@@ -17,6 +17,7 @@
+ Name[pt]='Plugin' para o KDevelop de Desenho de Formulários
+ Name[pt_BR]=Plugin do Desenhista de Formulário do KDevelop
+ Name[ru]=Модуль форм KDevelop
++Name[sl]=Vstavek za oblikovanje obrazcev za KDevelop
+ Name[sr]=Прикључак дизајнера форми за KDevelop
+ Name[sr@Latn]=Priključak dizajnera formi za KDevelop
+ Name[sv]=KDevelop insticksprogram för formulärkonstruktion
+Index: tools/thumbnail/kofficethumbnail.desktop
+===================================================================
+--- tools/thumbnail/kofficethumbnail.desktop (revision 427945)
++++ tools/thumbnail/kofficethumbnail.desktop (working copy)
+@@ -20,6 +20,7 @@
+ Name[fi]=KOffice-tiedostot
+ Name[fo]=KSkrivstovu-fílir
+ Name[fr]=Fichiers KOffice
++Name[ga]=Comhaid KOffice
+ Name[he]=קבצי KOffice
+ Name[hr]=KOffice datoteke
+ Name[hu]=KOffice-fájlok
+Index: tools/kfile-plugins/koffice/kfile_koffice.desktop
+===================================================================
+--- tools/kfile-plugins/koffice/kfile_koffice.desktop (revision 427945)
++++ tools/kfile-plugins/koffice/kfile_koffice.desktop (working copy)
+@@ -5,6 +5,7 @@
+ Name[af]=Koffice Inligting
+ Name[ar]=معلومات KOffice
+ Name[bg]=Информация за KOffice
++Name[br]=Titouroù diwar-benn KOffice
+ Name[ca]=Informació KOffice
+ Name[cs]=KOffice info
+ Name[cy]=Gwybodaeth KOffice
+@@ -18,6 +19,7 @@
+ Name[fi]=KOffice tiedot
+ Name[fo]=KSkrivstovu-upplýsingar
+ Name[fr]=Informations sur KOffice
++Name[ga]=Eolas faoi KOffice
+ Name[he]=מידע KOffice
+ Name[hu]=KOffice-információ
+ Name[it]=Informazioni KOffice
+@@ -32,7 +34,7 @@
+ Name[pl]=Dane koffice
+ Name[pt]=Informação do KOffice
+ Name[pt_BR]=Informações do KOffice
+-Name[ru]=Информация о KOffice
++Name[ru]=Информация KOffice
+ Name[se]=KOffice-dieđut
+ Name[sk]=Informácie o KOffice
+ Name[sl]=Informacije o KOffice
+Index: tools/kfile-plugins/ooo/kfile_ooo.desktop
+===================================================================
+--- tools/kfile-plugins/ooo/kfile_ooo.desktop (revision 427945)
++++ tools/kfile-plugins/ooo/kfile_ooo.desktop (working copy)
+@@ -13,6 +13,7 @@
+ Name[et]=OpenOffice.org-i info
+ Name[fi]=KOffice tiedot
+ Name[fr]=Informations sur OpenOffice.org
++Name[ga]=Eolas faoi OpenOffice.org
+ Name[he]=מידע OpenOffice.org
+ Name[hu]=OpenOffice.org-információ
+ Name[it]=Informazioni OpenOffice.org
+@@ -23,7 +24,7 @@
+ Name[pl]=Informacja OpenOffice.org
+ Name[pt]=Informação do OpenOffice.org
+ Name[pt_BR]=Informações do OpenOffice.org
+-Name[ru]=Информация об OpenOffice.org
++Name[ru]=Информация OpenOffice.org
+ Name[se]=OpenOffice.org-dieđut
+ Name[sk]=Informácie o OpenOffice.org
+ Name[sl]=Informacije o OpenOffice.org
+Index: lib/kofficecore/koApplication.cc
+===================================================================
+--- lib/kofficecore/koApplication.cc (revision 427945)
++++ lib/kofficecore/koApplication.cc (working copy)
+@@ -149,7 +149,10 @@
+ shell->setRootDocument( doc );
+ }
+ else
++ {
++ delete doc;
+ return false;
++ }
+
+ QObject::disconnect(doc, SIGNAL(sigProgress(int)), shell, SLOT(slotProgress(int)));
+ } else {
+Index: lib/kofficecore/koMainWindow.cc
+===================================================================
+--- lib/kofficecore/koMainWindow.cc (revision 427945)
++++ lib/kofficecore/koMainWindow.cc (working copy)
+@@ -1033,6 +1033,13 @@
+ if ( !newdoc->initDoc( (KoDocument::InitDocFlags)initDocFlags, this ) )
+ {
+ delete newdoc;
++ // See cancelQuits() in KoTemplateChooseDia.
++ // The quit() must be done here so that the KoDocument got deleted already.
++ bool onlyDoc = !KoDocument::documentList() || KoDocument::documentList()->isEmpty();
++ bool onlyMainWindow = !KMainWindow::memberList || KMainWindow::memberList->count() <= 1;
++ if ( onlyDoc && onlyMainWindow && kapp->instanceName() != "koshell" ) {
++ kapp->quit();
++ }
+ return;
+ }
+ disconnect(newdoc, SIGNAL(sigProgress(int)), this, SLOT(slotProgress(int)));
+Index: lib/kofficecore/koDocument.cc
+===================================================================
+--- lib/kofficecore/koDocument.cc (revision 427945)
++++ lib/kofficecore/koDocument.cc (working copy)
+@@ -890,6 +890,9 @@
+ kdDebug(30003)<<k_funcinfo<<" external (don't save) url:" << childDoc->url().url()<<endl;
+ path = childDoc->url().url();
+ }
++ // OOo uses a trailing slash for the path to embedded objects (== directories)
++ if ( !path.endsWith( "/" ) )
++ path += '/';
+ manifestWriter->addManifestEntry( path, childDoc->nativeOasisMimeType() );
+ }
+ }
+@@ -1793,7 +1796,9 @@
+ //if ( !oasisStore.loadAndParse( "tar:/META-INF/manifest.xml", manifestDoc, d->lastErrorMessage ) )
+ // return false;
+
+- (void)oasisStore.loadAndParse( "settings.xml", settingsDoc, d->lastErrorMessage );
++ if ( store->hasFile( "settings.xml" ) ) {
++ (void)oasisStore.loadAndParse( "settings.xml", settingsDoc, d->lastErrorMessage );
++ }
+ if ( !loadOasis( contentDoc, oasisStyles, settingsDoc, store ) )
+ return false;
+
+@@ -1920,9 +1925,12 @@
+ KoDocument *doc = it.current()->document();
+ if ( doc )
+ {
+- if ( doc->isStoredExtern() ) //###TODO: Handle non-native mimetype docs
++ bool foo = doc->isStoredExtern();
++ kdDebug(36001) << "========== isStoredExtern() returned "
++ << foo << " ==========" << endl;
++
++ if ( foo ) //###TODO: Handle non-native mimetype docs
+ {
+- if ( doc->isModified() )
+ {
+ kdDebug(30003)<<k_funcinfo<<" found modified child: "<<doc->url().url()<<" extern="<<doc->isStoredExtern()<<endl;
+ if ( doc->queryCloseDia() == KMessageBox::Cancel )
+Index: lib/kofficecore/koDocumentChild.cc
+===================================================================
+--- lib/kofficecore/koDocumentChild.cc (revision 427945)
++++ lib/kofficecore/koDocumentChild.cc (working copy)
+@@ -230,6 +230,8 @@
+ QString relPath = KURL( m_tmpURL ).path();
+ path += relPath.mid( 1 ); // remove leading '/'
+ }
++ if ( !path.endsWith( "/" ) )
++ path += '/';
+ const QString mimeType = KoOasisStore::mimeForPath( manifestDoc, path );
+ kdDebug() << k_funcinfo << "path for manifest file=" << path << " mimeType=" << mimeType << endl;
+ if ( mimeType.isEmpty() ) {
+@@ -312,6 +314,8 @@
+ }
+ if ( !res )
+ {
++ // Keep the error message from the attempted loading
++ QString errorMessage = d->m_doc->errorMessage();
+ delete d->m_doc;
+ d->m_doc = 0;
+ QString tmpURL = m_tmpURL; // keep a copy, createUnavailDocument will erase it
+@@ -322,7 +326,7 @@
+ d->m_doc->setProperty( "realURL", tmpURL ); // so that it gets saved correctly
+ d->m_doc->setStoreInternal( true );
+ if ( internalURL )
+- d->m_doc->setProperty( "unavailReason", i18n( "Could not load embedded object." ) );
++ d->m_doc->setProperty( "unavailReason", i18n( "Could not load embedded object." ) + "\n" + errorMessage );
+ else
+ d->m_doc->setProperty( "unavailReason", i18n( "External document not found:\n%1" ).arg( tmpURL ) );
+ }
+Index: lib/kofficeui/koTemplateChooseDia.cc
+===================================================================
+--- lib/kofficeui/koTemplateChooseDia.cc (revision 427945)
++++ lib/kofficeui/koTemplateChooseDia.cc (working copy)
+@@ -210,6 +210,7 @@
+ d=0L;
+ }
+
++// Keep in sync with KoMainWindow::chooseNewDocument
+ static bool cancelQuits() {
+ bool onlyDoc = !KoDocument::documentList() || KoDocument::documentList()->count() <= 1;
+ bool onlyMainWindow = !KMainWindow::memberList || KMainWindow::memberList->count() <= 1;
+@@ -261,10 +262,6 @@
+ }
+
+ delete dlg;
+- if ( rt == Cancel && dialogType == Everything && cancelQuits() )
+- // The button says quit, so let's quit
+- kapp->quit();
+-
+ return rt;
+ }
+
+@@ -458,8 +455,8 @@
+ d->m_jwidget->showPage(templateNum);
+ else if ( defaultTemplateGroup != -1)
+ d->m_jwidget->showPage(defaultTemplateGroup);
+-
+
++
+ // Set the initially selected template, possibly from the last usage of the dialog
+ currentChanged(itemtoselect);
+
+Index: lib/kofficeui/koUnitWidgets.h
+===================================================================
+--- lib/kofficeui/koUnitWidgets.h (revision 427945)
++++ lib/kofficeui/koUnitWidgets.h (working copy)
+@@ -77,7 +77,7 @@
+ */
+ QString getVisibleText( double value ) const;
+ /**
+- * Transfrom a string inot a double, while taking care of locale specific symbols.
++ * Transfrom a string into a double, while taking care of locale specific symbols.
+ * @param str the string to transform into a number
+ * @param ok true, if the conversion was succesful
+ * @return the value as double
+@@ -94,11 +94,11 @@
+ * Spin box for double precision numbers with unit display
+ * \since 1.4 (change of behavior)
+ */
+-class KOFFICEUI_EXPORT KoUnitDoubleSpinBox : public KDoubleSpinBox, public KoUnitDoubleBase
++class KOFFICEUI_EXPORT KoBuggyUnitDoubleSpinBox : public KDoubleSpinBox, public KoUnitDoubleBase
+ {
+ public:
+ // lower, upper, step and value are in pt
+- KoUnitDoubleSpinBox( QWidget *parent, double lower, double upper, double step, double value = 0.0,
++ KoBuggyUnitDoubleSpinBox( QWidget *parent, double lower, double upper, double step, double value = 0.0,
+ KoUnit::Unit unit = KoUnit::U_PT, unsigned int precision = 2, const char *name = 0 );
+
+ virtual void changeValue( double );
+@@ -123,6 +123,22 @@
+ };
+
+ /**
++ * Temporary class that will be merged with koBuggyUnitDoubleSpinBox
++ * and renamed into KoUnitDoubleSpinBox when all the users of that
++ * class have been converted.
++ */
++class KOFFICEUI_EXPORT KoUnitDoubleSpinBox2 : public KoBuggyUnitDoubleSpinBox
++{
++public:
++ // lower, upper, step and value are in pt
++ KoUnitDoubleSpinBox2( QWidget *parent, double lower, double upper, double step, double value = 0.0,
++ KoUnit::Unit unit = KoUnit::U_PT, unsigned int precision = 2, const char *name = 0 );
++
++ virtual void changeValue( double );
++};
++
++
++/**
+ * Line edit for double precision numbers with unit display
+ * \since 1.4 (change of behavior)
+ */
+Index: lib/kofficeui/kolinewidthaction.cpp
+===================================================================
+--- lib/kofficeui/kolinewidthaction.cpp (revision 427945)
++++ lib/kofficeui/kolinewidthaction.cpp (working copy)
+@@ -160,7 +160,7 @@
+ {
+ public:
+ KoUnit::Unit m_unit;
+- KoUnitDoubleSpinBox* m_lineWidthUSBox;
++ KoBuggyUnitDoubleSpinBox* m_lineWidthUSBox;
+ };
+
+ KoLineWidthChooser::KoLineWidthChooser(QWidget* parent, const char* name)
+@@ -174,7 +174,7 @@
+ setMainWidget(mainWidget);
+ QGridLayout* gl = new QGridLayout(mainWidget, 1, 2, KDialog::marginHint(), KDialog::spacingHint());
+ QLabel* textLbl = new QLabel(i18n("Line width:"), mainWidget);
+- d->m_lineWidthUSBox = new KoUnitDoubleSpinBox(mainWidget, 0.0, 1000.0, 0.1, 1.0, d->m_unit, 2);
++ d->m_lineWidthUSBox = new KoBuggyUnitDoubleSpinBox(mainWidget, 0.0, 1000.0, 0.1, 1.0, d->m_unit, 2);
+ gl->addWidget(textLbl, 0, 0);
+ gl->addWidget(d->m_lineWidthUSBox, 0, 1);
+ }
+Index: lib/kofficeui/koUnitWidgets.cc
+===================================================================
+--- lib/kofficeui/koUnitWidgets.cc (revision 427945)
++++ lib/kofficeui/koUnitWidgets.cc (working copy)
+@@ -25,6 +25,7 @@
+ #include <qpushbutton.h>
+ #include <qlayout.h>
+
++
+ KoUnitDoubleValidator::KoUnitDoubleValidator( KoUnitDoubleBase *base, QObject *parent, const char *name )
+ : KDoubleValidator( parent, name ), m_base( base )
+ {
+@@ -108,7 +109,10 @@
+ }
+
+
+-KoUnitDoubleSpinBox::KoUnitDoubleSpinBox( QWidget *parent, double lower, double upper, double step, double value, KoUnit::Unit unit, unsigned int precision, const char *name )
++// ----------------------------------------------------------------
++
++
++KoBuggyUnitDoubleSpinBox::KoBuggyUnitDoubleSpinBox( QWidget *parent, double lower, double upper, double step, double value, KoUnit::Unit unit, unsigned int precision, const char *name )
+ : KDoubleSpinBox( lower, upper, step, value, precision, parent, name ), KoUnitDoubleBase( unit, precision ),
+ m_lowerInPoints( lower ), m_upperInPoints( upper ), m_stepInPoints( step )
+ {
+@@ -120,7 +124,7 @@
+ }
+
+ void
+-KoUnitDoubleSpinBox::changeValue( double val )
++KoBuggyUnitDoubleSpinBox::changeValue( double val )
+ {
+ KDoubleSpinBox::setValue( val );
+ // TODO: emit valueChanged ONLY if the value was out-of-bounds
+@@ -129,7 +133,7 @@
+ }
+
+ void
+-KoUnitDoubleSpinBox::setUnit( KoUnit::Unit unit )
++KoBuggyUnitDoubleSpinBox::setUnit( KoUnit::Unit unit )
+ {
+ double oldvalue = KoUnit::fromUserValue( KDoubleSpinBox::value(), m_unit );
+ KDoubleSpinBox::setMinValue( KoUnit::toUserValue( m_lowerInPoints, unit ) );
+@@ -140,31 +144,53 @@
+ setSuffix( KoUnit::unitName( unit ).prepend( ' ' ) );
+ }
+
+-double KoUnitDoubleSpinBox::value( void ) const
++double KoBuggyUnitDoubleSpinBox::value( void ) const
+ {
+ return KoUnit::fromUserValue( KDoubleSpinBox::value(), m_unit );
+ }
+
+-void KoUnitDoubleSpinBox::setMinValue( double min )
++void KoBuggyUnitDoubleSpinBox::setMinValue( double min )
+ {
+ m_lowerInPoints = min;
+ KDoubleSpinBox::setMinValue( KoUnit::toUserValue( m_lowerInPoints, m_unit ) );
+ }
+
+-void KoUnitDoubleSpinBox::setMaxValue( double max )
++void KoBuggyUnitDoubleSpinBox::setMaxValue( double max )
+ {
+ m_upperInPoints = max;
+ KDoubleSpinBox::setMaxValue( KoUnit::toUserValue( m_upperInPoints, m_unit ) );
+ }
+
+-void KoUnitDoubleSpinBox::setLineStep( double step )
++void KoBuggyUnitDoubleSpinBox::setLineStep( double step )
+ {
+ m_stepInPoints = step;
+ KDoubleSpinBox::setLineStep( KoUnit::toUserValue( m_stepInPoints, m_unit ) );
+ }
+
+
++// ----------------------------------------------------------------
+
++
++KoUnitDoubleSpinBox2::KoUnitDoubleSpinBox2( QWidget *parent, double lower, double upper, double step, double value, KoUnit::Unit unit, unsigned int precision, const char *name )
++ : KoBuggyUnitDoubleSpinBox( parent, lower, upper, step, value, unit, precision, name )
++{
++ m_validator = new KoUnitDoubleValidator( this, this );
++ QSpinBox::setValidator( m_validator );
++ setAcceptLocalizedNumbers( true );
++ setUnit( unit );
++ changeValue( value );
++}
++
++void
++KoUnitDoubleSpinBox2::changeValue( double val )
++{
++ KDoubleSpinBox::setValue( KoUnit::toUserValue( val, m_unit ) );
++}
++
++
++// ----------------------------------------------------------------
++
++
+ KoUnitDoubleLineEdit::KoUnitDoubleLineEdit( QWidget *parent, double lower, double upper, double value, KoUnit::Unit unit,
+ unsigned int precision, const char *name )
+ : KLineEdit( parent, name ), KoUnitDoubleBase( unit, precision ), m_value( value ), m_lower( lower ), m_upper( upper ),
+Index: lib/CHANGES
+===================================================================
+--- lib/CHANGES (revision 427945)
++++ lib/CHANGES (working copy)
+@@ -1,6 +1,15 @@
++Changes after KOffice-1.4
++=========================
++KOfficeCore:
++- OASIS loading/saving fix for embedded objects
++- Fix crash when pressing Quit in the initial startup dialog (#107911)
++
++KoText:
++- Fix crash when updating a TOC with a table inside it (#107961)
++
+ Changes after KOffice-1.4-beta1
+ ===============================
+-KForumula:
++KFormula:
+ - Disable the matrix actions when the cursor isn't in a matrix element.
+ - Do not crash when exporting to PNG.
+
+Index: lib/kotext/kotextdocument.cc
+===================================================================
+--- lib/kotext/kotextdocument.cc (revision 427945)
++++ lib/kotext/kotextdocument.cc (working copy)
+@@ -135,6 +135,7 @@
+ flow_->clear();
+ while ( fParag ) {
+ KoTextParag *p = fParag->next();
++ fParag->string()->clear(); // avoid the "unregister custom items" code, not needed
+ delete fParag;
+ fParag = p;
+ }
+@@ -142,6 +143,7 @@
+ if ( createEmptyParag )
+ fParag = lParag = createParag( this );
+ selections.clear();
++ customItems.clear();
+ }
+
+ /*
+Index: lib/kotext/kotextparag.cc
+===================================================================
+--- lib/kotext/kotextparag.cc (revision 427945)
++++ lib/kotext/kotextparag.cc (working copy)
+@@ -109,6 +109,17 @@
+ KoTextParag::~KoTextParag()
+ {
+ //kdDebug(32500) << "KoTextParag::~KoTextParag " << this << " id=" << paragId() << endl;
++
++ // #107961: unregister custom items; KoTextString::clear() will delete them
++ const int len = str->length();
++ for ( int i = 0; i < len; ++i ) {
++ KoTextStringChar *c = at( i );
++ if ( doc && c->isCustom() ) {
++ doc->unregisterCustomItem( c->customItem(), this );
++ //removeCustomItem();
++ }
++ }
++
+ delete str;
+ str = 0;
+ // if ( doc && p == doc->minwParag ) {
+Index: filters/kword/ascii/kword_ascii_import.desktop
+===================================================================
+--- filters/kword/ascii/kword_ascii_import.desktop (revision 427945)
++++ filters/kword/ascii/kword_ascii_import.desktop (working copy)
+@@ -5,6 +5,7 @@
+ Name[br]=Sil Enporzh ASCII KWord
+ Name[ca]=Filtre d'importació ASCII per a KWord
+ Name[cs]=KWord ASCII importní filtr
++Name[cy]=Hidlen Fewnforio Ascii KWord
+ Name[da]=KWord ASCII-importfilter
+ Name[de]=ASCII-Importfilter für KWord
+ Name[el]=Φίλτρο εισαγωγής ascii του KWord
+Index: filters/kspread/excel/sidewinder/excel.cpp
+===================================================================
+--- filters/kspread/excel/sidewinder/excel.cpp (revision 427945)
++++ filters/kspread/excel/sidewinder/excel.cpp (working copy)
+@@ -5412,7 +5412,7 @@
+ case 10: valueFormat = "0.00%"; break;
+ case 11: valueFormat = "0.00E+00"; break;
+ case 12: valueFormat = "#?/?"; break;
+- case 13: valueFormat = "#\?\?\/\?\?"; break;
++ case 13: valueFormat = "#\?\?/\?\?"; break;
+ case 14: valueFormat = "M/D/YY"; break;
+ case 15: valueFormat = "D-MMM-YY"; break;
+ case 16: valueFormat = "D-MMM"; break;
+Index: filters/karbon/svg/svgexport.cc
+===================================================================
+--- filters/karbon/svg/svgexport.cc (revision 427945)
++++ filters/karbon/svg/svgexport.cc (working copy)
+@@ -36,8 +36,10 @@
+ #include "vfill.h"
+ #include "vgradient.h"
+ #include "vgroup.h"
++#include "vimage.h"
+ #include "vlayer.h"
+ #include "vpath.h"
++#include "vpattern.h"
+ #include "vsegment.h"
+ #include "vselection.h"
+ #include "vstroke.h"
+@@ -119,11 +121,9 @@
+ "\"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd\">"
+ << endl;
+
+- // add some PR
++ // add some PR. one line is more than enough.
+ *m_defs <<
+- "<!-- This file was created using the SVG export filter from Karbon14, a free vector drawing app. -->" << endl;
+- *m_defs <<
+- "<!-- It is part of koffice, the free, integrated office suite for KDE (http://www.koffice.org/). -->" << endl;
++ "<!-- Created using Karbon14, part of koffice: http://www.koffice.org/karbon -->" << endl;
+
+ *m_defs <<
+ "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"" <<
+@@ -164,7 +164,30 @@
+ *m_body << "</g>" << endl;
+ }
+
++// horrible but at least something gets exported now
++// will need this for patterns
+ void
++SvgExport::visitVImage( VImage& image )
++{
++ *m_body << "<image ";
++ VVisitor::visitVImage( image );
++ *m_body << "x=\"" << "\" ";
++ *m_body << "y=\"" << "\" ";
++ *m_body << "width=\"" << "\" ";
++ *m_body << "height=\"" << "\" ";
++ *m_body << "xlink:href=\"" << "\"";
++ *m_body << " />" << endl;
++}
++
++void
++SvgExport::visitVLayer( VLayer& layer )
++{
++ *m_body << "<g" << getID( &layer ) << ">" << endl;
++ VVisitor::visitVLayer( layer );
++ *m_body << "</g>" << endl;
++}
++
++void
+ SvgExport::visitVPath( VPath& composite )
+ {
+ *m_body << "<path" << getID( &composite );
+@@ -261,9 +284,50 @@
+ *m_defs << "</radialGradient>" << endl;
+ *m_body << "url(#" << uid << ")";
+ }
++ // gah! pointless abbreviation of conical to conic
++ else if( grad.type() == VGradient::conic )
++ {
++ // fake conical grad as radial.
++ // fugly but better than data loss.
++ *m_defs << "<radialGradient id=\"" << uid << "\" ";
++ *m_defs << "gradientUnits=\"userSpaceOnUse\" ";
++ *m_defs << "cx=\"" << grad.origin().x() << "\" ";
++ *m_defs << "cy=\"" << grad.origin().y() << "\" ";
++ *m_defs << "fx=\"" << grad.focalPoint().x() << "\" ";
++ *m_defs << "fy=\"" << grad.focalPoint().y() << "\" ";
++ double r = sqrt( pow( grad.vector().x() - grad.origin().x(), 2 ) + pow( grad.vector().y() - grad.origin().y(), 2 ) );
++ *m_defs << "r=\"" << QString().setNum( r ) << "\" ";
++ if( grad.repeatMethod() == VGradient::reflect )
++ *m_defs << "spreadMethod=\"reflect\" ";
++ else if( grad.repeatMethod() == VGradient::repeat )
++ *m_defs << "spreadMethod=\"repeat\" ";
++ *m_defs << ">" << endl;
++
++ // color stops
++ getColorStops( grad.colorStops() );
++
++ *m_defs << "</radialGradient>" << endl;
++ *m_body << "url(#" << uid << ")";
++ }
+ }
+
++// better than nothing
+ void
++SvgExport::getPattern( const VPattern & patt )
++{
++ QString uid = createUID();
++ *m_defs << "<pattern id=\"" << uid << "\" ";
++ *m_defs << "width=\"" << "\" ";
++ *m_defs << "height=\"" << "\" ";
++ *m_defs << "patternUnits=\"userSpaceOnUse\" ";
++ *m_defs << "patternContentUnits=\"userSpaceOnUse\" ";
++ *m_defs << " />" << endl;
++ // TODO: insert hard work here ;)
++ *m_defs << "</pattern>" << endl;
++ *m_body << "url(#" << uid << ")";
++}
++
++void
+ SvgExport::getFill( const VFill& fill )
+ {
+ *m_body << " fill=\"";
+@@ -271,6 +335,8 @@
+ *m_body << "none";
+ else if( fill.type() == VFill::grad )
+ getGradient( fill.gradient() );
++ else if( fill.type() == VFill::patt )
++ getPattern( fill.pattern() );
+ else
+ getHexColor( m_body, fill.color() );
+ *m_body << "\"";
+Index: filters/karbon/svg/svgexport.h
+===================================================================
+--- filters/karbon/svg/svgexport.h (revision 427945)
++++ filters/karbon/svg/svgexport.h (working copy)
+@@ -35,6 +35,7 @@
+ class VDocument;
+ class VFill;
+ class VGroup;
++class VImage;
+ class VLayer;
+ class VSubpath;
+ class VStroke;
+@@ -55,6 +56,8 @@
+ virtual void visitVPath( VPath& composite );
+ virtual void visitVDocument( VDocument& document );
+ virtual void visitVGroup( VGroup& group );
++ virtual void visitVImage( VImage& image );
++ virtual void visitVLayer( VLayer& layer );
+ virtual void visitVSubpath( VSubpath& path );
+ virtual void visitVText( VText& text );
+
+@@ -62,6 +65,7 @@
+ void getColorStops( const QPtrVector<VColorStop> &colorStops );
+ void getFill( const VFill& fill );
+ void getGradient( const VGradient& grad );
++ void getPattern( const VPattern& patt );
+ void getHexColor( QTextStream *, const VColor& color );
+ QString getID( VObject *obj );
+
+Index: filters/generic_wrapper/generic_filter.desktop
+===================================================================
+--- filters/generic_wrapper/generic_filter.desktop (revision 427945)
++++ filters/generic_wrapper/generic_filter.desktop (working copy)
+@@ -3,6 +3,7 @@
+ Name=Generic KOffice Filter
+ Name[ca]=Filtre genèric de KOffice
+ Name[cs]=Obecný filtr KOffice
++Name[cy]=Hidlen generig KOffice
+ Name[da]=Generisk KOffice-filter
+ Name[de]=Generischer KOffice-Filter
+ Name[el]=Γενικό φίλτρο του KOffice
+Index: krita/plugins/cimg/CImg.h
+===================================================================
+--- krita/plugins/cimg/CImg.h (revision 427945)
++++ krita/plugins/cimg/CImg.h (working copy)
+@@ -5135,7 +5135,7 @@
+ if (ny1<0 || ny0>=dimy()) return *this;
+ if (ny0<0) { nx0-=ny0*(nx1-nx0)/(ny1-ny0); ny0=0; }
+ if (ny1>=dimy()) { nx1+=(ny1-dimy())*(nx0-nx1)/(ny1-ny0); ny1=dimy()-1;}
+- const unsigned int dmax = (unsigned int)cimg::max(std::abs(nx1-nx0),ny1-ny0), whz = width*height*depth;
++ const unsigned int dmax = (unsigned int)cimg::max(std::abs((long int)(nx1-nx0)),(long int)(ny1-ny0)), whz = width*height*depth;
+ const float px = dmax?(nx1-nx0)/(float)dmax:0, py = dmax?(ny1-ny0)/(float)dmax:0;
+ float x = (float)nx0, y = (float)ny0;
+ if (opacity>=1) for (unsigned int t=0; t<=dmax; t++) {
+Index: krita/plugins/tool_polygon/kritatoolpolygon.desktop
+===================================================================
+--- krita/plugins/tool_polygon/kritatoolpolygon.desktop (revision 427945)
++++ krita/plugins/tool_polygon/kritatoolpolygon.desktop (working copy)
+@@ -2,6 +2,7 @@
+ Encoding=UTF-8
+ Name=Polygon Tool
+ Name[br]=Ostilh liestueg
++Name[cy]=Erfyn Polygon
+ Name[da]=Polygonværktøj
+ Name[de]=Polygon-Werkzeug
+ Name[el]=Εργαλείο πολυγώνου
+Index: krita/plugins/tool_polyline/kritatoolpolyline.desktop
+===================================================================
+--- krita/plugins/tool_polyline/kritatoolpolyline.desktop (revision 427945)
++++ krita/plugins/tool_polyline/kritatoolpolyline.desktop (working copy)
+@@ -1,6 +1,7 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+ Name=Polyline Tool
++Name[cy]=Erfyn Polylinell
+ Name[da]=Flerlinjeværktøj
+ Name[de]=Polylinien-Werkzeug
+ Name[el]=Εργαλείο Polyline
+Index: krita/plugins/imagemagick/kritamagick.desktop
+===================================================================
+--- krita/plugins/imagemagick/kritamagick.desktop (revision 427945)
++++ krita/plugins/imagemagick/kritamagick.desktop (working copy)
+@@ -14,7 +14,8 @@
+ Name[nn]=ImageMagick-omslag
+ Name[pt]=Interface para ImageMagick
+ Name[pt_BR]=Wrapper do ImageMagick
+-Name[ru]=Интерфейс к ImageMagick
++Name[ru]=Оболочка к ImageMagick
++Name[sl]=Ovojnik za ImageMagick
+ Name[sr]=Омотач ImageMagick-а
+ Name[sr@Latn]=Omotač ImageMagick-a
+ Name[sv]=ImageMagick-gränssnitt
+@@ -35,7 +36,7 @@
+ Comment[nn]=ImageMagick-basert import, eksport og filkonvertering
+ Comment[pt]=Importação/exportação e conversão de ficheiro com o ImageMagick
+ Comment[pt_BR]=Conversão de arquivos e filtro de importação/exportação baseado no ImageMagick
+-Comment[ru]=Фильтр импорта/экспорта рисунков посредством ImageMagick
++Comment[ru]=Фильтр импорта/экспорта и преобразования формата посредством ImageMagick
+ Comment[sr]=Увоз, извоз и конверзија фајлова помоћу ImageMagick-а
+ Comment[sr@Latn]=Uvoz, izvoz i konverzija fajlova pomoću ImageMagick-a
+ Comment[sv]=ImageMagick-baserad import, export och filkonvertering
+Index: krita/plugins/tool_crop/kritatoolcrop.desktop
+===================================================================
+--- krita/plugins/tool_crop/kritatoolcrop.desktop (revision 427945)
++++ krita/plugins/tool_crop/kritatoolcrop.desktop (working copy)
+@@ -16,7 +16,7 @@
+ Name[nn]=Beskjæringsverktøy
+ Name[pt]=Ferramenta de Recorte
+ Name[pt_BR]=Ferramenta de Recorte
+-Name[ru]=Инструмент обрезки
++Name[ru]=Обрезка
+ Name[sl]=Orodje za obrezavo
+ Name[sr]=Алат за сасецање
+ Name[sr@Latn]=Alat za sasecanje
+Index: krita/plugins/selectiontools/kritaselectiontools.desktop
+===================================================================
+--- krita/plugins/selectiontools/kritaselectiontools.desktop (revision 427945)
++++ krita/plugins/selectiontools/kritaselectiontools.desktop (working copy)
+@@ -2,12 +2,14 @@
+ Encoding=UTF-8
+ Name=Selection Tools
+ Name[ca]=Eines de selecció
++Name[cy]=Offer Detholi
+ Name[da]=Markeringsværktøj
+ Name[de]=Auswahlwerkzeuge
+ Name[el]=Εργαλεία επιλογής
+ Name[es]=Herramientas de selección
+ Name[et]=Valikutööriistad
+ Name[fr]=Outils de sélection
++Name[ga]=Uirlisí Roghnúcháin
+ Name[he]=כלי בחירה
+ Name[hu]=Kiválasztó eszközök
+ Name[it]=Strumenti di selezione
+Index: krita/plugins/tool_star/kritatoolstar.desktop
+===================================================================
+--- krita/plugins/tool_star/kritatoolstar.desktop (revision 427945)
++++ krita/plugins/tool_star/kritatoolstar.desktop (working copy)
+@@ -2,6 +2,7 @@
+ Encoding=UTF-8
+ Name=Star Tool
+ Name[br]=Ostilh steredenn
++Name[cy]=Erfyn Seren
+ Name[da]=Stjerneværktøj
+ Name[de]=Sterne-Werkzeug
+ Name[el]=Εργαλείο αστέρα
+@@ -18,6 +19,7 @@
+ Name[pt]=Ferramenta de Estrelas
+ Name[pt_BR]=Ferramenta Estrela
+ Name[ru]=Звёзды
++Name[sl]=Zvezdno orodje
+ Name[sr]=Алат за звезде
+ Name[sr@Latn]=Alat za zvezde
+ Name[sv]=Stjärnverktyg
+Index: krita/plugins/tool_transform/kritatooltransform.desktop
+===================================================================
+--- krita/plugins/tool_transform/kritatooltransform.desktop (revision 427945)
++++ krita/plugins/tool_transform/kritatooltransform.desktop (working copy)
+@@ -16,7 +16,7 @@
+ Name[nn]=Beskjæringsverktøy
+ Name[pt]=Ferramenta de Recorte
+ Name[pt_BR]=Ferramenta de Recorte
+-Name[ru]=Инструмент обрезки
++Name[ru]=Обрезка
+ Name[sl]=Orodje za obrezavo
+ Name[sr]=Алат за сасецање
+ Name[sr@Latn]=Alat za sasecanje
+Index: krita/krita.desktop
+===================================================================
+--- krita/krita.desktop (revision 427945)
++++ krita/krita.desktop (working copy)
+@@ -22,6 +22,7 @@
+ GenericName[fa]=برنامه دستکاری تصویر
+ GenericName[fi]=Kuvienmuokkausohjelma
+ GenericName[fr]=Logiciel de manipulation d'images
++GenericName[ga]=Clár Ionramhála na nÍomhánna
+ GenericName[he]=תוכנית לטיפול בתמונות
+ GenericName[hr]=Program za obradu slika
+ GenericName[hu]=Képszerkesztő
+@@ -39,7 +40,7 @@
+ GenericName[pt]=Programa de Manipulação de Imagens
+ GenericName[pt_BR]=Manipulador de Imagens
+ GenericName[ro]=Program de procesare imagini
+-GenericName[ru]=Редактор графических изображений
++GenericName[ru]=Программа редактирования изображений
+ GenericName[sk]=Program pre úpravu obrázkov
+ GenericName[sl]=Program za obdelavo slik
+ GenericName[sr]=Програм за уређивање слика
+Index: krita/core/kis_paint_device.cc
+===================================================================
+--- krita/core/kis_paint_device.cc (revision 427945)
++++ krita/core/kis_paint_device.cc (working copy)
+@@ -791,24 +791,23 @@
+ QRect r = m_selection -> selectedRect();
+ r = r.normalize();
+
++ for (Q_INT32 y = 0; y < r.height(); y++) {
++ KisHLineIterator devIt = createHLineIterator(r.x(), r.y() + y, r.width(), true);
++ KisHLineIterator selectionIt = m_selection -> createHLineIterator(r.x(), r.y() + y, r.width(), false);
+
+- KisRectIterator devIt = createRectIterator(r.x(), r.y(), r.width(), r.height(), true);
+- KisRectIterator selectionIt = m_selection -> createRectIterator(r.x(), r.y(), r.width(), r.height(), false);
++ while (!devIt.isDone()) {
++ KisPixel p = toPixel(devIt.rawData());
++ KisPixel s = m_selection -> toPixel(selectionIt.rawData());
++ Q_UINT16 p_alpha, s_alpha;
++ p_alpha = p.alpha();
++ s_alpha = MAX_SELECTED - s.alpha();
+
+- while (!devIt.isDone()) {
+- KisPixel p = toPixel(devIt.rawData());
+- KisPixel s = m_selection -> toPixel(selectionIt.rawData());
+- Q_UINT16 p_alpha, s_alpha;
+- p_alpha = p.alpha();
+- s_alpha = MAX_SELECTED - s.alpha();
+-
+- p.alpha() = (Q_UINT8) ((p_alpha * s_alpha) >> 8);
++ p.alpha() = (Q_UINT8) ((p_alpha * s_alpha) >> 8);
+
+- ++devIt;
+- ++selectionIt;
++ ++devIt;
++ ++selectionIt;
++ }
+ }
+-
+-
+ }
+
+ void KisPaintDevice::applySelectionMask(KisSelectionSP mask)
+Index: krita/core/kis_selection_manager.cc
+===================================================================
+--- krita/core/kis_selection_manager.cc (revision 427945)
++++ krita/core/kis_selection_manager.cc (working copy)
+@@ -319,20 +319,22 @@
+
+ // Apply selection mask.
+
+- KisRectIterator layerIt = clip -> createRectIterator(0, 0, r.width(), r.height(), true);
+- KisRectIterator selectionIt = selection -> createRectIterator(r.x(), r.y(), r.width(), r.height(), false);
++ for (Q_INT32 y = 0; y < r.height(); y++) {
++ KisHLineIterator layerIt = clip -> createHLineIterator(0, y, r.width(), true);
++ KisHLineIterator selectionIt = selection -> createHLineIterator(r.x(), r.y() + y, r.width(), false);
+
+- while (!layerIt.isDone()) {
+- KisPixel p = clip -> toPixel(layerIt.rawData());
+- KisPixel s = selection -> toPixel(selectionIt.rawData());
+- Q_UINT16 p_alpha, s_alpha;
+- p_alpha = p.alpha();
+- s_alpha = s.alpha();
+-
+- p.alpha() = (Q_UINT8) ((p_alpha * s_alpha) >> 8);
+-
+- ++layerIt;
+- ++selectionIt;
++ while (!layerIt.isDone()) {
++ KisPixel p = clip -> toPixel(layerIt.rawData());
++ KisPixel s = selection -> toPixel(selectionIt.rawData());
++ Q_UINT16 p_alpha, s_alpha;
++ p_alpha = p.alpha();
++ s_alpha = s.alpha();
++
++ p.alpha() = (Q_UINT8) ((p_alpha * s_alpha) >> 8);
++
++ ++layerIt;
++ ++selectionIt;
++ }
+ }
+
+ // kdDebug() << "Selection copied: "
+Index: krita/core/tiles/kis_tiledrectiterator.cc
+===================================================================
+--- krita/core/tiles/kis_tiledrectiterator.cc (revision 427945)
++++ krita/core/tiles/kis_tiledrectiterator.cc (working copy)
+@@ -66,7 +66,8 @@
+ m_xInTile = m_leftInTile;
+ m_yInTile = m_topInTile;
+
+- fetchTileData(m_col, m_row);
++ if (! m_beyondEnd)
++ fetchTileData(m_col, m_row);
+ m_offset = m_pixelSize * (m_yInTile * KisTile::WIDTH + m_xInTile);
+ }
+
+Index: krita/core/builder/kis_image_magick_converter.cc
+===================================================================
+--- krita/core/builder/kis_image_magick_converter.cc (revision 427945)
++++ krita/core/builder/kis_image_magick_converter.cc (working copy)
+@@ -64,10 +64,10 @@
+ */
+ KisStrategyColorSpaceSP getColorSpaceForColorType(ColorspaceType type) {
+ if (type == GRAYColorspace) {
+- KisColorSpaceRegistry::instance() -> get(KisID("CMYK", ""));
++ return KisColorSpaceRegistry::instance() -> get(KisID("GRAYA", ""));
+ }
+ else if (type == CMYKColorspace) {
+- return KisColorSpaceRegistry::instance() -> get(KisID("GRAYA", ""));
++ return KisColorSpaceRegistry::instance() -> get(KisID("CMYK", ""));
+ }
+ else if (type == RGBColorspace || type == sRGBColorspace || type == TransparentColorspace) {
+ return KisColorSpaceRegistry::instance() -> get(KisID("RGBA", ""));
+Index: krita/core/kis_view.cc
+===================================================================
+--- krita/core/kis_view.cc (revision 427945)
++++ krita/core/kis_view.cc (working copy)
+@@ -218,8 +218,7 @@
+ {
+ delete m_dcop;
+ delete m_dockerManager;
+-
+-
++ delete m_selectionManager;
+ }
+
+ DCOPObject* KisView::dcopObject()
+Index: krita/core/kis_iterators_pixel.h
+===================================================================
+--- krita/core/kis_iterators_pixel.h (revision 427945)
++++ krita/core/kis_iterators_pixel.h (working copy)
+@@ -37,6 +37,7 @@
+ public:
+ KisHLineIteratorPixel( KisPaintDevice *ndevice, KisDataManager *dm, KisDataManager *sel_dm, Q_INT32 x , Q_INT32 y , Q_INT32 w, Q_INT32 offsetx, Q_INT32 offsety, bool writable);
+
++ ~KisHLineIteratorPixel() { delete m_selectionIterator; }
+ inline KisHLineIteratorPixel & operator ++() { KisHLineIterator::operator++(); advance(1); return *this;}
+
+ /// Advances a number of pixels until it reaches the end of the line
+@@ -52,6 +53,7 @@
+ {
+ public:
+ KisVLineIteratorPixel( KisPaintDevice *ndevice, KisDataManager *dm, KisDataManager *sel_dm, Q_INT32 xpos , Q_INT32 ypos , Q_INT32 height, Q_INT32 offsetx, Q_INT32 offsety, bool writable);
++ ~KisVLineIteratorPixel() { delete m_selectionIterator; }
+
+ inline KisVLineIteratorPixel & operator ++() { KisVLineIterator::operator++(); advance(1); return *this;}
+
+@@ -65,6 +67,7 @@
+ {
+ public:
+ KisRectIteratorPixel( KisPaintDevice *ndevice, KisDataManager *dm, KisDataManager *sel_dm, Q_INT32 x, Q_INT32 y, Q_INT32 w, Q_INT32 h, Q_INT32 offsetx, Q_INT32 offsety, bool writable);
++ ~KisRectIteratorPixel() { delete m_selectionIterator; }
+
+ inline KisRectIteratorPixel & operator ++() { KisRectIterator::operator++(); advance(1); return *this;}
+
+Index: krita/paintops/kritadefaultpaintops.desktop
+===================================================================
+--- krita/paintops/kritadefaultpaintops.desktop (revision 427945)
++++ krita/paintops/kritadefaultpaintops.desktop (working copy)
+@@ -15,7 +15,7 @@
+ Name[nn]=Standard måleoperasjonar
+ Name[pt]=Operações de Pintura Predefinidas
+ Name[pt_BR]=Operações de pintura padrão
+-Name[ru]=Стандартные действия рисования
++Name[ru]=Стандартные операции рисования
+ Name[sr]=Подразумеване сликарске операције
+ Name[sr@Latn]=Podrazumevane slikarske operacije
+ Name[sv]=Förvalda målningsoperationer
+@@ -36,7 +36,7 @@
+ Comment[nn]=Standard måleoperasjonar
+ Comment[pt]=Operações de pintura predefinidas
+ Comment[pt_BR]=Operações de pintura padrão
+-Comment[ru]=Действия рисования по умолчанию
++Comment[ru]=Операции рисования по умолчанию
+ Comment[sr]=Подразумеване сликарске операције
+ Comment[sr@Latn]=Podrazumevane slikarske operacije
+ Comment[sv]=Förvalda ritåtgärder
+Index: krita/modules/colorspace_ws/kritawsplugin.desktop
+===================================================================
+--- krita/modules/colorspace_ws/kritawsplugin.desktop (revision 427945)
++++ krita/modules/colorspace_ws/kritawsplugin.desktop (working copy)
+@@ -13,7 +13,7 @@
+ Name[nn]=Fargemodell for vått lerret
+ Name[pt]=Modelo de Cores de Tela Molhado e Pegajoso
+ Name[pt_BR]=Modelo de cores de tela Molhada & Pegajosa
+-Name[ru]=Цветовая модель влажности и прилипания
++Name[ru]=Цветовая модель с параметрами влажности и прилипания
+ Name[sr]=Модел боја мокрог и лепљивог платна
+ Name[sr@Latn]=Model boja mokrog i lepljivog platna
+ Name[sv]=Våt och klibbig dukfärgmodell
+Index: krita/modules/colorspace_rgb/templates/transparent_1280x1024.desktop
+===================================================================
+--- krita/modules/colorspace_rgb/templates/transparent_1280x1024.desktop (revision 427945)
++++ krita/modules/colorspace_rgb/templates/transparent_1280x1024.desktop (working copy)
+@@ -4,6 +4,7 @@
+ URL=.source/transparent_1280x1024.kra
+ Icon=template_rgb_empty
+ Name=Transparent 1280 x 1024
++Name[br]=Treuzwelus 1280 x 1024
+ Name[da]=Gennemsigtig 1280 x 1024
+ Name[el]=Διαφανής 1280 x 1024
+ Name[es]=1280 x 1024 transparente
+@@ -16,7 +17,7 @@
+ Name[nn]=Gjennomsiktig 1280 × 1024
+ Name[pt]=Transparente 1280 x 1024
+ Name[pt_BR]=Transparente de 1280 x 1024
+-Name[ru]=Прозрачный 1280x1024
++Name[ru]=Рисунок 1280x1024, прозрачный фон
+ Name[sl]=Prosojna 1280 x 1024
+ Name[sr]=Провидна 1280 x 1024
+ Name[sr@Latn]=Providna 1280 x 1024
+@@ -39,7 +40,7 @@
+ Comment[nn]=Lagar eit gjennomsiktig bilete på 1280 × 1024 pikslar.
+ Comment[pt]=Cria uma imagem transparente com 1280 x 1024 pontos.
+ Comment[pt_BR]=Cria uma imagem transparente de 1280 x 1024 pixels.
+-Comment[ru]=Прозрачное, 1280x1024.
++Comment[ru]=Рисунок 1280x1024, прозрачный фон.
+ Comment[sl]=Ustvari prosojno sliko velikosti 1280 x 1024 točk.
+ Comment[sr]=Прави провидну слику са 1280 x 1024 пиксела.
+ Comment[sr@Latn]=Pravi providnu sliku sa 1280 x 1024 piksela.
+Index: krita/modules/colorspace_rgb/templates/transparent_640x480.desktop
+===================================================================
+--- krita/modules/colorspace_rgb/templates/transparent_640x480.desktop (revision 427945)
++++ krita/modules/colorspace_rgb/templates/transparent_640x480.desktop (working copy)
+@@ -4,6 +4,7 @@
+ URL=.source/transparent_1600x1200.kra
+ Icon=template_rgb_empty
+ Name=Transparent 640 x 480
++Name[br]=Treuzwelus 640 x 480
+ Name[da]=Gennemsigtig 640 x 480
+ Name[el]=Διαφανής 640 x 480
+ Name[es]=640 x 480 transparente
+@@ -16,7 +17,7 @@
+ Name[nn]=Gjennomsiktig 640 × 480
+ Name[pt]=Transparente 640 x 480
+ Name[pt_BR]=Transparente de 640 x 480
+-Name[ru]=Прозрачный 640x480
++Name[ru]=Рисунок 640x480, прозрачный фон
+ Name[sl]=Prosojna 640 x 480
+ Name[sr]=Провидна 640 x 480
+ Name[sr@Latn]=Providna 640 x 480
+@@ -39,7 +40,7 @@
+ Comment[nn]=Lagar eit gjennomsiktig bilete på 640 × 480 pikslar.
+ Comment[pt]=Cria uma imagem transparente com 640 x 480 pontos.
+ Comment[pt_BR]=Cria uma imagem transparente de 640 x 480 pixels.
+-Comment[ru]=Прозрачное, 640x480.
++Comment[ru]=Рисунок 640x480, прозрачный фон.
+ Comment[sl]=Ustvari prosojno sliko velikosti 640 x 480 točk.
+ Comment[sr]=Прави провидну слику са 640 x 480 пиксела.
+ Comment[sr@Latn]=Pravi providnu sliku sa 640 x 480 piksela.
+Index: krita/modules/colorspace_rgb/templates/white_1600x1200.desktop
+===================================================================
+--- krita/modules/colorspace_rgb/templates/white_1600x1200.desktop (revision 427945)
++++ krita/modules/colorspace_rgb/templates/white_1600x1200.desktop (working copy)
+@@ -10,6 +10,7 @@
+ Name[es]=1600 x 1200 blanco
+ Name[et]=Valge 1600 x 1200
+ Name[fr]=Image blanche 1600 x 1200
++Name[ga]=Bán 1600×1200
+ Name[he]=לבן ‎1600 x 1200
+ Name[hu]=Fehér 1600 x 1200
+ Name[it]=Bianco 1600 x 1200
+@@ -17,7 +18,7 @@
+ Name[nn]=Kvitt 1600 × 1200
+ Name[pt]=Branca 1600 x 1200
+ Name[pt_BR]=1600 x 1200 em Branco
+-Name[ru]=Белый 1600x1200
++Name[ru]=Рисунок 1600x1200, белый фон
+ Name[sl]=Bela 1600 x 1200
+ Name[sr]=Бела 1600 x 1200
+ Name[sr@Latn]=Bela 1600 x 1200
+@@ -39,7 +40,7 @@
+ Comment[nn]=Lagar eit kvitt RGB-bilete på 1600 × 1200 pikslar.
+ Comment[pt]=Cria uma imagem RGB branca com 1600 x 1200 pontos.
+ Comment[pt_BR]=Cria uma imagem RGB em branco de 1600 x 1200 pixels.
+-Comment[ru]=Белое в формате RGB, 1600x1200.
++Comment[ru]=Рисунок RGB 1600x1200, белый фон.
+ Comment[sl]=Ustvari belo sliko RGB velikosti 1600 x 1200 točk.
+ Comment[sr]=Прави белу RGB слику са 1600 x 1200 пиксела.
+ Comment[sr@Latn]=Pravi belu RGB sliku sa 1600 x 1200 piksela.
+Index: krita/modules/colorspace_rgb/templates/white_1024x768.desktop
+===================================================================
+--- krita/modules/colorspace_rgb/templates/white_1024x768.desktop (revision 427945)
++++ krita/modules/colorspace_rgb/templates/white_1024x768.desktop (working copy)
+@@ -13,6 +13,7 @@
+ Name[es]=1024 x 768 blanco
+ Name[et]=Valge 1024 x 768
+ Name[fr]=Image blanche 1024 x 768
++Name[ga]=Bán 1024×768
+ Name[he]=לבן ‎1024 x 768
+ Name[hu]=Fehér 1024 x 768
+ Name[it]=Bianco 1024 x 768
+@@ -21,7 +22,7 @@
+ Name[nn]=Kvitt 1024 × 768
+ Name[pt]=Branca 1024 x 768
+ Name[pt_BR]=1024 x 768 em Branco
+-Name[ru]=Белый 1024x768
++Name[ru]=Рисунок 1024x768, белый фон
+ Name[sl]=Bela 1024 x 768
+ Name[sr]=Бела 1024 x 768
+ Name[sr@Latn]=Bela 1024 x 768
+@@ -46,7 +47,7 @@
+ Comment[nn]=Lagar eit kvitt RGB-bilete på 1024 × 768 pikslar.
+ Comment[pt]=Cria uma imagem RGB branca com 1024 x 768 pontos.
+ Comment[pt_BR]=Cria uma imagem RGB em branco de 1024 x 768 pixéis.
+-Comment[ru]=Белое в формате RGB, 1024x768.
++Comment[ru]=Рисунок RGB 1024x768, белый фон.
+ Comment[sl]=Ustvari belo sliko RGB velikosti 1024 x 768 točk.
+ Comment[sr]=Прави белу RGB слику са 1024 x 768 пиксела.
+ Comment[sr@Latn]=Pravi belu RGB sliku sa 1024 x 768 piksela.
+Index: krita/modules/colorspace_rgb/templates/white_1280x1024.desktop
+===================================================================
+--- krita/modules/colorspace_rgb/templates/white_1280x1024.desktop (revision 427945)
++++ krita/modules/colorspace_rgb/templates/white_1280x1024.desktop (working copy)
+@@ -10,6 +10,7 @@
+ Name[es]=1280 x 1024 blanco
+ Name[et]=Valge 1280 x 1024
+ Name[fr]=Image blanche 1280 x 1024
++Name[ga]=Bán 1280×1024
+ Name[he]=לבן ‎1280 x 1024
+ Name[hu]=Fehér 1280 x 1024
+ Name[it]=Bianco 1280 x 1024
+@@ -17,7 +18,7 @@
+ Name[nn]=Kvitt 1280 × 1024
+ Name[pt]=Branca 1280 x 1024
+ Name[pt_BR]=1280 x 1024 em Branco
+-Name[ru]=Белый 1280x1024
++Name[ru]=Рисунок 1280x1024, белый фон
+ Name[sl]=Bela 1280 x 1024
+ Name[sr]=Бела 1280 x 1024
+ Name[sr@Latn]=Bela 1280 x 1024
+@@ -39,7 +40,7 @@
+ Comment[nn]=Lagar eit kvitt RGB-bilete på 1280 × 1024 pikslar.
+ Comment[pt]=Cria uma imagem RGB branca com 1280 x 1024 pontos.
+ Comment[pt_BR]=Cria uma imagem RGB em branco de 1280 x 1024 pixels.
+-Comment[ru]=Белое в формате RGB, 1280x1024.
++Comment[ru]=Рисунок RGB 1280x1024, белый фон.
+ Comment[sl]=Ustvari belo sliko RGB velikosti 1280 x 1024 točk.
+ Comment[sr]=Прави белу RGB слику са 1280 x 1024 пиксела.
+ Comment[sr@Latn]=Pravi belu RGB sliku sa 1280 x 1024 piksela.
+Index: krita/modules/colorspace_rgb/templates/white_640x480.desktop
+===================================================================
+--- krita/modules/colorspace_rgb/templates/white_640x480.desktop (revision 427945)
++++ krita/modules/colorspace_rgb/templates/white_640x480.desktop (working copy)
+@@ -13,6 +13,7 @@
+ Name[es]=640x480 blanco
+ Name[et]=Valge 640x480
+ Name[fr]=Image blanche 640 x 480
++Name[ga]=Bán 640×480
+ Name[he]=לבן 640x480
+ Name[hu]=Fehér 640 x 480
+ Name[it]=Bianco 640x480
+@@ -21,7 +22,7 @@
+ Name[nn]=Kvitt 640 × 480
+ Name[pt]=Branca 640x480
+ Name[pt_BR]=640x480 em Branco
+-Name[ru]=Белый 640x480
++Name[ru]=Рисунок 640x480, белый фон
+ Name[sl]=Bela 640x480
+ Name[sr]=Бела 640x480
+ Name[sr@Latn]=Bela 640x480
+@@ -42,11 +43,11 @@
+ Comment[hu]=Létrehoz egy 640 x 480 képpontos fehér RGB képet.
+ Comment[it]=Crea un'immagine RGB bianca di 640 x 480 pixel.
+ Comment[nb]=Lager et hvitt bilde på 640 x 480 piksler.
+-Comment[nl]=Maakt een witte RGB-afbeelding aan van 540 x 480 pixels.
++Comment[nl]=Maakt een witte RGB-afbeelding aan van 640 x 480 pixels.
+ Comment[nn]=Lagar eit kvitt RGB-bilete på 640 × 480 pikslar.
+ Comment[pt]=Cria uma imagem RGB branca com 640 x 480 pontos.
+ Comment[pt_BR]=Cria uma imagem RGB em branco de 640 x 480 pixéis.
+-Comment[ru]=Белое в формате RGB, 640x480.
++Comment[ru]=Рисунок RGB 640x480, белый фон.
+ Comment[sl]=Ustvari belo sliko RGB velikosti 640 x 480 točk.
+ Comment[sr]=Прави белу RGB слику са 640 x 480 пиксела.
+ Comment[sr@Latn]=Pravi belu RGB sliku sa 640 x 480 piksela.
+Index: krita/modules/colorspace_rgb/templates/transparent_1600x1200.desktop
+===================================================================
+--- krita/modules/colorspace_rgb/templates/transparent_1600x1200.desktop (revision 427945)
++++ krita/modules/colorspace_rgb/templates/transparent_1600x1200.desktop (working copy)
+@@ -5,6 +5,7 @@
+ Icon=template_rgb_empty
+ Name=Transparent 1600 x 1200
+ Name[bg]=Прозрачно 1600 x 1200
++Name[br]=Treuzwelus 1600 x 1200
+ Name[da]=Gennemsigtig 1600 x 1200
+ Name[el]=Διαφανής 1600 x 1200
+ Name[es]=1600 x 1200 transparente
+@@ -18,7 +19,7 @@
+ Name[nn]=Gjennomsiktig 1600 × 1200
+ Name[pt]=Transparente 1600 x 1200
+ Name[pt_BR]=Transparente de 1600 x 1200
+-Name[ru]=Прозрачный 1600x1200
++Name[ru]=Рисунок 1600x1200, прозрачный фон
+ Name[sl]=Prosojna 1600 x 1200
+ Name[sr]=Провидна 1600 x 1200
+ Name[sr@Latn]=Providna 1600 x 1200
+@@ -44,7 +45,7 @@
+ Comment[nn]=Lagar eit gjennomsiktig bilete på 1600 × 1200 pikslar.
+ Comment[pt]=Cria uma imagem transparente com 1600 x 1200 pontos.
+ Comment[pt_BR]=Cria uma imagem transparente de 1600 x 1200 pixéis.
+-Comment[ru]=Прозрачное, 1600x1200.
++Comment[ru]=Рисунок 1600x1200, прозрачный фон.
+ Comment[sl]=Ustvari prosojno sliko velikosti 1600 x 1200 točk.
+ Comment[sr]=Прави провидну слику са 1600 x 1200 пиксела.
+ Comment[sr@Latn]=Pravi providnu sliku sa 1600 x 1200 piksela.
+Index: krita/modules/colorspace_rgb/templates/transparent_1024x768.desktop
+===================================================================
+--- krita/modules/colorspace_rgb/templates/transparent_1024x768.desktop (revision 427945)
++++ krita/modules/colorspace_rgb/templates/transparent_1024x768.desktop (working copy)
+@@ -4,6 +4,7 @@
+ URL=.source/transparent_1024x768.kra
+ Icon=template_rgb_empty
+ Name=Transparent 1024 x 768
++Name[br]=Treuzwelus 1024 x 768
+ Name[da]=Gennemsigtig 1024 x 768
+ Name[el]=Διαφανής 1024 x 768
+ Name[es]=1024 x 768 transparente
+@@ -16,7 +17,7 @@
+ Name[nn]=Gjennomsiktig 1024 × 768
+ Name[pt]=Transparente 1024 x 768
+ Name[pt_BR]=Transparente de 1024 x 768
+-Name[ru]=Прозрачный 1024x768
++Name[ru]=Рисунок 1024x768, прозрачный фон
+ Name[sl]=Prosojna 1024 x 768
+ Name[sr]=Провидна 1024 x 768
+ Name[sr@Latn]=Providna 1024 x 768
+@@ -39,7 +40,7 @@
+ Comment[nn]=Lagar eit gjennomsiktig bilete på 1024 × 768 pikslar.
+ Comment[pt]=Cria uma imagem transparente com 1024 x 768 pontos.
+ Comment[pt_BR]=Cria uma imagem transparente de 1024 x 768 pixels.
+-Comment[ru]=Прозрачное, 1024x768.
++Comment[ru]=Рисунок 1024x768, прозрачный фон.
+ Comment[sl]=Ustvari prosojno sliko velikosti 1024 x 768 točk.
+ Comment[sr]=Прави провидну слику са 1024 x 768 пиксела.
+ Comment[sr@Latn]=Pravi providnu sliku sa 1024 x 768 piksela.
+Index: krita/modules/krita_module.desktop
+===================================================================
+--- krita/modules/krita_module.desktop (revision 427945)
++++ krita/modules/krita_module.desktop (working copy)
+@@ -19,6 +19,7 @@
+ Comment[pt]=Módulo de funcionalidade nuclear para o Krita
+ Comment[pt_BR]=Módulo de funcionalidades principais para o Krita
+ Comment[ru]=Движок Krita
++Comment[sl]=Modul za osnovne zmožnosti Krite
+ Comment[sr]=Модел основне функционалности за Krita-у
+ Comment[sr@Latn]=Model osnovne funkcionalnosti za Krita-u
+ Comment[sv]=Modul med kärnfunktioner för Krita
+Index: krita/modules/colorspace_gray/templates/white_640x480.desktop
+===================================================================
+--- krita/modules/colorspace_gray/templates/white_640x480.desktop (revision 427945)
++++ krita/modules/colorspace_gray/templates/white_640x480.desktop (working copy)
+@@ -12,6 +12,7 @@
+ Name[es]=Fondo blanco, 640 x 480
+ Name[et]=Valge taust, 640 x 480
+ Name[fr]=Fond blanc 640 x 480
++Name[ga]=Cúlra Bán, 640×480
+ Name[he]=רקע לבן, ‎640 x 480
+ Name[hu]=Fehér háttér, 640 x 480
+ Name[it]=Sfondo bianco, 640 x 480
+@@ -20,7 +21,7 @@
+ Name[nn]=Kvit bakgrunn, 640 × 480
+ Name[pt]=Fundo Branco, 640 x 480
+ Name[pt_BR]=Fundo em branco, 640 x 480
+-Name[ru]=Белый фон, 640x480
++Name[ru]=Рисунок 640x480, белый фон
+ Name[sl]=Belo ozadje, 640 x 480
+ Name[sr]=Бела позадина, 640 x 480
+ Name[sr@Latn]=Bela pozadina, 640 x 480
+@@ -46,7 +47,7 @@
+ Comment[nn]=Lagar eit bilete på 640 × 480 pikslar med ein kvit bakgrunn.
+ Comment[pt]=Cria uma imagem de 640 x 480 pontos com um fundo branco.
+ Comment[pt_BR]=Cria uma imagem de 640 x 480 pixéis com um fundo branco.
+-Comment[ru]=Белое, 640x480.
++Comment[ru]=Рисунок 640x480, белый фон.
+ Comment[sl]=Ustvari sliko velikosti 640 x 480 točk z belim ozadjem.
+ Comment[sr]=Прави слику од 640 x 480 пиксела са белом позадином.
+ Comment[sr@Latn]=Pravi sliku od 640 x 480 piksela sa belom pozadinom.
+Index: krita/modules/colorspace_cmyk/kritacmykplugin.desktop
+===================================================================
+--- krita/modules/colorspace_cmyk/kritacmykplugin.desktop (revision 427945)
++++ krita/modules/colorspace_cmyk/kritacmykplugin.desktop (working copy)
+@@ -46,7 +46,7 @@
+ Comment[nn]=Fargemodell for CMYK-bilete med 8 bit per kanal
+ Comment[pt]=Modelo de cor para imagens CMYK com 8 bits por canal
+ Comment[pt_BR]=Modelo de cor para imagens com 8-bits de canal CMYK
+-Comment[ru]=Цветовая модель для изображений в CMYK (болотный, пурпурный, жёлтый, чёрный) 8-бит/канал
++Comment[ru]=Цветовая модель для изображений в CMYK (циан, пурпурный, жёлтый, чёрный) 8-бит/канал
+ Comment[sl]=Barvni model za slike CMYK z 8 biti/kanal
+ Comment[sr]=Модел боја за CMYK слике са 8 битова/каналу
+ Comment[sr@Latn]=Model boja za CMYK slike sa 8 bitova/kanalu
+Index: krita/modules/colorspace_cmyk/templates/white_2000x800.desktop
+===================================================================
+--- krita/modules/colorspace_cmyk/templates/white_2000x800.desktop (revision 427945)
++++ krita/modules/colorspace_cmyk/templates/white_2000x800.desktop (working copy)
+@@ -12,6 +12,7 @@
+ Name[es]=2000 x 800 blanco
+ Name[et]=Valge 2000 x 800
+ Name[fr]=Image blanche 2000 x 800
++Name[ga]=Bán 2000×800
+ Name[he]=לבן ‎2000 x 800
+ Name[hu]=fehér 2000 x 800
+ Name[it]=Bianco 2000 x 800
+@@ -45,7 +46,7 @@
+ Comment[nn]=Lagar eit kvitt CMYK-bilete på 2000 × 800 pikslar.
+ Comment[pt]=Cria uma imagem CMYK branca com 2000 x 800 pontos.
+ Comment[pt_BR]=Cria uma imagem CMYK em branco de 2000 x 800 pixéis.
+-Comment[ru]=Белое в формате CMYK, 2000x800.
++Comment[ru]=Рисунок CMYK, 2000x800, белый фон.
+ Comment[sl]=Ustvari belo sliko CMYK velikosti 2000 x 800 točk.
+ Comment[sr]=Прави белу CMYK слику са 2000 x 800 пиксела.
+ Comment[sr@Latn]=Pravi belu CMYK sliku sa 2000 x 800 piksela.
+Index: krita/data/krita_module.desktop
+===================================================================
+--- krita/data/krita_module.desktop (revision 427945)
++++ krita/data/krita_module.desktop (working copy)
+@@ -19,6 +19,7 @@
+ Comment[pt]=Módulo de funcionalidade nuclear para o Krita
+ Comment[pt_BR]=Módulo de funcionalidades principais para o Krita
+ Comment[ru]=Движок Krita
++Comment[sl]=Modul za osnovne zmožnosti Krite
+ Comment[sr]=Модел основне функционалности за Krita-у
+ Comment[sr@Latn]=Model osnovne funkcionalnosti za Krita-u
+ Comment[sv]=Modul med kärnfunktioner för Krita
+Index: krita/data/krita_paintop.desktop
+===================================================================
+--- krita/data/krita_paintop.desktop (revision 427945)
++++ krita/data/krita_paintop.desktop (working copy)
+@@ -17,6 +17,7 @@
+ Comment[pt]=Módulo de operações de pintura do Krita
+ Comment[pt_BR]=plugin de operação de pintura para o Krita
+ Comment[ru]=Модуль рисования Krita
++Comment[sl]=vstavek za dejanja slikanja za Krito
+ Comment[sr]=Прикључак за сликарске операције за Krita-у
+ Comment[sr@Latn]=Priključak za slikarske operacije za Krita-u
+ Comment[sv]=Målningsinsticksprogram för Krita
+Index: krita/kritapart.desktop
+===================================================================
+--- krita/kritapart.desktop (revision 427945)
++++ krita/kritapart.desktop (working copy)
+@@ -18,7 +18,7 @@
+ Name[nn]=KOffice-komponent for biletmanipulering
+ Name[pt]=Componente de Manipulação de Imagens do KOffice
+ Name[pt_BR]=Componente de Manipulação de Imagens do KOffice
+-Name[ru]=Компонент редактирования изображений KOffice
++Name[ru]=Компонент редактирования изображений
+ Name[sl]=Komponenta za obdelavo slik za KOffice
+ Name[sr]=KOffice-ова компонента за манипулацију сликама
+ Name[sr@Latn]=KOffice-ova komponenta za manipulaciju slikama
+@@ -49,7 +49,7 @@
+ GenericName[nn]=Bilethandsaming
+ GenericName[pt]=Manipulação de Imagens
+ GenericName[pt_BR]=Manipulação de Imagens
+-GenericName[ru]=Редактор графических изображений
++GenericName[ru]=Редактирование изображений
+ GenericName[sl]=Obdelava slik
+ GenericName[sr]=Манипулација сликама
+ GenericName[sr@Latn]=Manipulacija slikama
+Index: krita/ui/kis_layerbox.cc
+===================================================================
+--- krita/ui/kis_layerbox.cc (revision 427945)
++++ krita/ui/kis_layerbox.cc (working copy)
+@@ -372,7 +372,7 @@
+ void KisLayerBoxItem::init(const QString& label, QListBox *parent,
+ KisLayerBox::flags f)
+ {
+- KIconLoader il;
++ KIconLoader il( "krita" );
+
+ m_label = label;
+
+Index: krita/ui/kis_dockframedocker.cc
+===================================================================
+--- krita/ui/kis_dockframedocker.cc (revision 427945)
++++ krita/ui/kis_dockframedocker.cc (working copy)
+@@ -125,7 +125,6 @@
+ m_page -> lblCaption -> show();
+ m_page -> bnShade -> show();
+ m_page -> lblCaption -> setText(caption());
+- resize(sizeHint());
+ }
+ else {
+ m_docked = false;
+@@ -133,7 +132,6 @@
+ m_page -> bnShade -> hide();
+ m_page -> tabWidget -> show();
+ m_page -> lblCaption -> setText("");
+- resize(sizeHint());
+ }
+
+ }
+Index: kchart/kchartpart.desktop
+===================================================================
+--- kchart/kchartpart.desktop (revision 427945)
++++ kchart/kchartpart.desktop (working copy)
+@@ -20,6 +20,7 @@
+ Name[pt]=Componente de Gráficos do KOffice
+ Name[pt_BR]=Componente de Gráficos do KOffice
+ Name[ru]=Компонент диаграмм KOffice
++Name[sl]=Komponenta za grafe za KOffice
+ Name[sr]=KOffice-ова компонента за графике
+ Name[sr@Latn]=KOffice-ova komponenta za grafike
+ Name[sv]=Koffice-diagramkomponent
+Index: kchart/kdchart/KDDrawText.cpp
+===================================================================
+--- kchart/kdchart/KDDrawText.cpp (revision 427945)
++++ kchart/kdchart/KDDrawText.cpp (working copy)
+@@ -256,10 +256,12 @@
+ painter->setPen( QColor( Qt::darkGreen ) );
+ painter->drawRect(x,y,txtWidth,txtHeight);
+ }else{
++#if 0
+ // Working around a strange Qt bug: Rotated painter must be
+ // initialized by drawing before text can be painted there.
+ painter->setPen( QColor( Qt::white ) );
+ painter->drawLine( 30000,0,30001,0 );
++#endif
+ }
+ painter->setPen( savePen );
+ }
+Index: kchart/kchartWizardSelectChartTypePage.cc
+===================================================================
+--- kchart/kchartWizardSelectChartTypePage.cc (revision 427945)
++++ kchart/kchartWizardSelectChartTypePage.cc (working copy)
+@@ -16,11 +16,11 @@
+ namespace KChart
+ {
+
+-KChartButton::KChartButton(QWidget *parent, const QString & _text, QPixmap *_pixmap)
++KChartButton::KChartButton(QWidget *parent, const QString & _text, const QPixmap &_pixmap)
+ : QVBox(parent)
+ {
+ m_button = new QPushButton(this);
+- m_button->setPixmap(*_pixmap);
++ m_button->setPixmap(_pixmap);
+ m_button->setToggleButton( true );
+ QLabel *label = new QLabel(_text, this);
+ label->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
+@@ -30,16 +30,16 @@
+ KChartButton::~KChartButton()
+ {
+ }
+-
++
+ void KChartWizardSelectChartTypePage::addButton(const QString &name,
+ const QString &icon_name,
+ int type)
+ {
+- KChartButton *button = new KChartButton( this, name, &BarIcon( icon_name,KIcon::SizeMedium, KIcon::DefaultState,KChartFactory::global() ) );
++ KChartButton *button = new KChartButton( this, name, BarIcon( icon_name,KIcon::SizeMedium, KIcon::DefaultState,KChartFactory::global() ) );
+ _layout->addWidget(button,r_pos,c_pos);
+ _typeBG->insert( button->button(), type );
+
+- if (c_pos == 3)
++ if (c_pos == 3)
+ {
+ c_pos=0;
+ r_pos++; //place the next button in the second row
+Index: kchart/kchartWizardSelectChartTypePage.h
+===================================================================
+--- kchart/kchartWizardSelectChartTypePage.h (revision 427945)
++++ kchart/kchartWizardSelectChartTypePage.h (working copy)
+@@ -23,9 +23,9 @@
+ {
+ Q_OBJECT
+ public:
+- KChartButton(QWidget* parent, const QString &, QPixmap *);
++ KChartButton(QWidget* parent, const QString &, const QPixmap &);
+ ~KChartButton();
+-
++
+ QPushButton *button() const { return m_button;}
+ private:
+ QPushButton *m_button;
+Index: mimetypes/kde32/vnd.stardivision.math.desktop
+===================================================================
+--- mimetypes/kde32/vnd.stardivision.math.desktop (revision 427945)
++++ mimetypes/kde32/vnd.stardivision.math.desktop (working copy)
+@@ -25,7 +25,7 @@
+ Comment[nn]=StarOffice-formel
+ Comment[pt]=Documento Matemático do StarOffice
+ Comment[pt_BR]=Documento do StarOffice Math
+-Comment[ru]=Формулы StarOffice
++Comment[ru]=Формула StarOffice
+ Comment[sl]=Dokument za StarOffice Math
+ Comment[sr]=StarOffice Math-ов документ
+ Comment[sr@Latn]=StarOffice Math-ov dokument
+Index: mimetypes/kde32/vnd.stardivision.writer-global.desktop
+===================================================================
+--- mimetypes/kde32/vnd.stardivision.writer-global.desktop (revision 427945)
++++ mimetypes/kde32/vnd.stardivision.writer-global.desktop (working copy)
+@@ -23,7 +23,7 @@
+ Comment[nn]=StarOffice Writer-hovuddokument
+ Comment[pt]=Documento Mestre do Writer do StarOffice
+ Comment[pt_BR]=Documento Mestre do StarOffice Writer
+-Comment[ru]=Основной документ StarOffice Writer
++Comment[ru]=Мастер-документ StarOffice
+ Comment[sl]=Dokument za StarOffice Writer Master
+ Comment[sr]=StarOffice Writer-ов главни документ
+ Comment[sr@Latn]=StarOffice Writer-ov glavni dokument
+Index: mimetypes/kde32/vnd.sun.xml.writer.master.desktop
+===================================================================
+--- mimetypes/kde32/vnd.sun.xml.writer.master.desktop (revision 427945)
++++ mimetypes/kde32/vnd.sun.xml.writer.master.desktop (working copy)
+@@ -20,7 +20,7 @@
+ Comment[nn]=OpenOffice.org-hovudtekstdokument
+ Comment[pt]=Documento Mestre de Texto do OpenOffice.org
+ Comment[pt_BR]=Documento Mestre de Texto do OpenOffice.org
+-Comment[ru]=Основной текстовый документ OpenOffice.org
++Comment[ru]=Мастер-документ OpenOffice.org
+ Comment[sr]=OpenOffice.org-ов главни текстуални документ
+ Comment[sr@Latn]=OpenOffice.org-ov glavni tekstualni dokument
+ Comment[sv]=Openoffice.org huvudtextdokument
+Index: mimetypes/kde32/vnd.sun.xml.writer.template.desktop
+===================================================================
+--- mimetypes/kde32/vnd.sun.xml.writer.template.desktop (revision 427945)
++++ mimetypes/kde32/vnd.sun.xml.writer.template.desktop (working copy)
+@@ -21,7 +21,7 @@
+ Comment[nn]=OpenOffice.org-tekstdokumentmal
+ Comment[pt]=Modelo de Documento de Texto do OpenOffice.org
+ Comment[pt_BR]=Modelo de Documento de Texto do OpenOffice.org
+-Comment[ru]=Шаблон текстового документа OpenОffice.org
++Comment[ru]=Шаблон документа OpenOffice.org
+ Comment[sl]=Predloga besedilnega dokumenta za OpenOffice.org
+ Comment[sr]=OpenOffice.org-ов шаблон текстуалног документа
+ Comment[sr@Latn]=OpenOffice.org-ov šablon tekstualnog dokumenta
+Index: mimetypes/kde32/vnd.stardivision.draw.desktop
+===================================================================
+--- mimetypes/kde32/vnd.stardivision.draw.desktop (revision 427945)
++++ mimetypes/kde32/vnd.stardivision.draw.desktop (working copy)
+@@ -23,7 +23,7 @@
+ Comment[nn]=StarOffice-teikning
+ Comment[pt]=Desenho do StarOffice
+ Comment[pt_BR]=Desenho do StarOffice
+-Comment[ru]=Изображение StarOffice
++Comment[ru]=Рисунок StarOffice
+ Comment[sl]=Risanje za StarOffice
+ Comment[sr]=StarOffice-ов цртеж
+ Comment[sr@Latn]=StarOffice-ov crtež
+Index: mimetypes/kde32/vnd.sun.xml.draw.template.desktop
+===================================================================
+--- mimetypes/kde32/vnd.sun.xml.draw.template.desktop (revision 427945)
++++ mimetypes/kde32/vnd.sun.xml.draw.template.desktop (working copy)
+@@ -20,7 +20,7 @@
+ Comment[nn]=OpenOffice.org-teikningsmal
+ Comment[pt]=Modelo de Desenho do OpenOffice.org
+ Comment[pt_BR]=Modelo de Desenho do OpenOffice.org
+-Comment[ru]=Шаблон изображения OpenOffice.org
++Comment[ru]=Шаблон рисунка OpenOffice.org
+ Comment[sl]=Predloga risanja za OpenOffice.org
+ Comment[sr]=OpenOffice.org-ов шаблон цртежа
+ Comment[sr@Latn]=OpenOffice.org-ov šablon crteža
+Index: mimetypes/kde32/vnd.sun.xml.calc.template.desktop
+===================================================================
+--- mimetypes/kde32/vnd.sun.xml.calc.template.desktop (revision 427945)
++++ mimetypes/kde32/vnd.sun.xml.calc.template.desktop (working copy)
+@@ -21,7 +21,7 @@
+ Comment[nn]=OpenOffice.org-reknearkmal
+ Comment[pt]=Modelo de Folha de Cálculo do OpenOffice.org
+ Comment[pt_BR]=Modelo de Planilha OpenOffice.org
+-Comment[ru]=Шаблон таблицы OpenOffice.org
++Comment[ru]=Шаблон электронной таблицы OpenOffice.org
+ Comment[sl]=Predloga preglednice za OpenOffice.org
+ Comment[sr]=OpenOffice.org-ов шаблон прорачунског листа
+ Comment[sr@Latn]=OpenOffice.org-ov šablon proračunskog lista
+Index: mimetypes/kde33/vnd.oasis.opendocument.graphics-template.desktop
+===================================================================
+--- mimetypes/kde33/vnd.oasis.opendocument.graphics-template.desktop (revision 427945)
++++ mimetypes/kde33/vnd.oasis.opendocument.graphics-template.desktop (working copy)
+@@ -22,7 +22,7 @@
+ Comment[nn]=OASIS OpenDocument-teikningsmal
+ Comment[pt]=Modelo de Desenho OASIS OpenDocument
+ Comment[pt_BR]=Modelo de Gráfico OpenDocument OASIS
+-Comment[ru]=Шаблон графики OASIS OpenDocument Graphics
++Comment[ru]=Шаблон рисунка OASIS OpenDocument Graphics
+ Comment[sl]=Predloga grafike OASIS OpenDocument
+ Comment[sr]=OASIS-ов OpenDocument графички шаблон
+ Comment[sr@Latn]=OASIS-ov OpenDocument grafički šablon
+Index: mimetypes/kde33/vnd.oasis.opendocument.graphics.desktop
+===================================================================
+--- mimetypes/kde33/vnd.oasis.opendocument.graphics.desktop (revision 427945)
++++ mimetypes/kde33/vnd.oasis.opendocument.graphics.desktop (working copy)
+@@ -22,7 +22,7 @@
+ Comment[nn]=OASIS OpenDocument-teikning
+ Comment[pt]=Desenho OASIS OpenDocument
+ Comment[pt_BR]=Gráfico OpenDocument OASIS
+-Comment[ru]=Графика OASIS OpenDocument
++Comment[ru]=Рисунок OASIS OpenDocument
+ Comment[sl]=Grafika OASIS OpenDocument
+ Comment[sr]=OASIS-ова OpenDocument графика
+ Comment[sr@Latn]=OASIS-ova OpenDocument grafika
+Index: kivio/kiviopart/kivio_stencil_geometry_panel.cpp
+===================================================================
+--- kivio/kiviopart/kivio_stencil_geometry_panel.cpp (revision 427945)
++++ kivio/kiviopart/kivio_stencil_geometry_panel.cpp (working copy)
+@@ -96,10 +96,10 @@
+ lw->setPixmap( QPixmap((const char **)width_xpm) );
+ lh->setPixmap( QPixmap((const char **)height_xpm) );
+
+- m_pX = new KoUnitDoubleSpinBox(this, -1000.0, 1000.0, 0.5, 0.0);
+- m_pY = new KoUnitDoubleSpinBox(this, -1000.0, 1000.0, 0.5, 0.0);
+- m_pW = new KoUnitDoubleSpinBox(this, -1000.0, 1000.0, 0.5, 0.0);
+- m_pH = new KoUnitDoubleSpinBox(this, -1000.0, 1000.0, 0.5, 0.0);
++ m_pX = new KoBuggyUnitDoubleSpinBox(this, -1000.0, 1000.0, 0.5, 0.0);
++ m_pY = new KoBuggyUnitDoubleSpinBox(this, -1000.0, 1000.0, 0.5, 0.0);
++ m_pW = new KoBuggyUnitDoubleSpinBox(this, -1000.0, 1000.0, 0.5, 0.0);
++ m_pH = new KoBuggyUnitDoubleSpinBox(this, -1000.0, 1000.0, 0.5, 0.0);
+ m_rotationSBox = new KIntSpinBox(-360, 360, 1, 0, 10, this);
+ m_rotationSBox->hide();
+
+Index: kivio/kiviopart/kivio_stencil_geometry_panel.h
+===================================================================
+--- kivio/kiviopart/kivio_stencil_geometry_panel.h (revision 427945)
++++ kivio/kiviopart/kivio_stencil_geometry_panel.h (working copy)
+@@ -5,14 +5,14 @@
+ #include <koUnit.h>
+
+ class KoPageLayout;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+ class KIntSpinBox;
+
+ class KivioStencilGeometryPanel : public QWidget
+ {
+ Q_OBJECT
+ protected:
+- KoUnitDoubleSpinBox *m_pX, *m_pY, *m_pW, *m_pH;
++ KoBuggyUnitDoubleSpinBox *m_pX, *m_pY, *m_pW, *m_pH;
+ KIntSpinBox* m_rotationSBox;
+ KoUnit::Unit m_unit;
+ bool m_emitSignals;
+Index: kivio/kiviopart/kivio_view.h
+===================================================================
+--- kivio/kiviopart/kivio_view.h (revision 427945)
++++ kivio/kiviopart/kivio_view.h (working copy)
+@@ -63,7 +63,7 @@
+ class DCOPObject;
+ class KoRuler;
+ class KoZoomHandler;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+ class KStatusBarLabel;
+ class KoLineWidthAction;
+ class KoLineStyleAction;
+Index: kivio/kiviopart/ui/kiviostencilformatdlg.cpp
+===================================================================
+--- kivio/kiviopart/ui/kiviostencilformatdlg.cpp (revision 427945)
++++ kivio/kiviopart/ui/kiviostencilformatdlg.cpp (working copy)
+@@ -46,7 +46,7 @@
+ QGridLayout* gl = new QGridLayout(mainWidget, 3, 2, KDialog::marginHint(), KDialog::spacingHint());
+
+ QLabel* lineWidthLbl = new QLabel(i18n("Line &width:"), mainWidget);
+- m_lineWidthUSBox = new KoUnitDoubleSpinBox(mainWidget, 0.0, 1000.0, 0.1, 1.0, m_unit, 2);
++ m_lineWidthUSBox = new KoBuggyUnitDoubleSpinBox(mainWidget, 0.0, 1000.0, 0.1, 1.0, m_unit, 2);
+ lineWidthLbl->setBuddy(m_lineWidthUSBox);
+ QLabel* lineColorLbl = new QLabel(i18n("Line &color:"), mainWidget);
+ m_lineCBtn = new KColorButton(mainWidget);
+Index: kivio/kiviopart/ui/kiviostencilformatdlg.h
+===================================================================
+--- kivio/kiviopart/ui/kiviostencilformatdlg.h (revision 427945)
++++ kivio/kiviopart/ui/kiviostencilformatdlg.h (working copy)
+@@ -24,7 +24,7 @@
+
+ #include <koUnit.h>
+
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+ class KColorButton;
+ class KComboBox;
+ class KivioView;
+@@ -61,7 +61,7 @@
+ void initLineEndStyles();
+
+ protected:
+- KoUnitDoubleSpinBox* m_lineWidthUSBox;
++ KoBuggyUnitDoubleSpinBox* m_lineWidthUSBox;
+ KColorButton* m_lineCBtn;
+ KColorButton* m_fillCBtn;
+ KComboBox* m_patternCBox;
+Index: kivio/kiviopart/ui/kiviooptionsdialog.cpp
+===================================================================
+--- kivio/kiviopart/ui/kiviooptionsdialog.cpp (revision 427945)
++++ kivio/kiviopart/ui/kiviooptionsdialog.cpp (working copy)
+@@ -178,20 +178,20 @@
+ gridColorLbl->setBuddy(m_gridColorBtn);
+ QGroupBox* spacingGrp = new QGroupBox(2, Qt::Horizontal, i18n("Spacing"), page);
+ QLabel* spaceHorizLbl = new QLabel(i18n("&Horizontal:"), spacingGrp);
+- m_spaceHorizUSpin = new KoUnitDoubleSpinBox(spacingGrp, 0.0, pgw, 0.1,
++ m_spaceHorizUSpin = new KoBuggyUnitDoubleSpinBox(spacingGrp, 0.0, pgw, 0.1,
+ fw, unit);
+ spaceHorizLbl->setBuddy(m_spaceHorizUSpin);
+ QLabel* spaceVertLbl = new QLabel(i18n("&Vertical:"), spacingGrp);
+- m_spaceVertUSpin = new KoUnitDoubleSpinBox(spacingGrp, 0.0, pgh, 0.1,
++ m_spaceVertUSpin = new KoBuggyUnitDoubleSpinBox(spacingGrp, 0.0, pgh, 0.1,
+ fh, unit);
+ spaceVertLbl->setBuddy(m_spaceVertUSpin);
+ QGroupBox* snapGrp = new QGroupBox(2, Qt::Horizontal, i18n("Snap Distance"), page);
+ QLabel* snapHorizLbl = new QLabel(i18n("H&orizontal:"), snapGrp);
+- m_snapHorizUSpin = new KoUnitDoubleSpinBox(snapGrp, 0.0, fw, 0.1,
++ m_snapHorizUSpin = new KoBuggyUnitDoubleSpinBox(snapGrp, 0.0, fw, 0.1,
+ sw, unit);
+ snapHorizLbl->setBuddy(m_snapHorizUSpin);
+ QLabel* snapVertLbl = new QLabel(i18n("V&ertical:"), snapGrp);
+- m_snapVertUSpin = new KoUnitDoubleSpinBox(snapGrp, 0.0, fh, 0.1,
++ m_snapVertUSpin = new KoBuggyUnitDoubleSpinBox(snapGrp, 0.0, fh, 0.1,
+ sh, unit);
+ snapVertLbl->setBuddy(m_snapVertUSpin);
+
+@@ -245,7 +245,7 @@
+ orientBGrp->insert(m_orientVertRBtn);
+ QLabel* posLbl = new QLabel(i18n("&Position:"), m_propertiesGrp);
+ KoUnit::Unit unit = view->doc()->units();
+- m_posUSpin = new KoUnitDoubleSpinBox(m_propertiesGrp, 0.0, 0.0, 0.0, unit);
++ m_posUSpin = new KoBuggyUnitDoubleSpinBox(m_propertiesGrp, 0.0, 0.0, 0.0, unit);
+ posLbl->setBuddy(m_posUSpin);
+
+ QGridLayout* pgl = new QGridLayout(m_propertiesGrp->layout());
+Index: kivio/kiviopart/ui/kivioarrowheadformatdlg.cpp
+===================================================================
+--- kivio/kiviopart/ui/kivioarrowheadformatdlg.cpp (revision 427945)
++++ kivio/kiviopart/ui/kivioarrowheadformatdlg.cpp (working copy)
+@@ -53,10 +53,10 @@
+ loadArrowHeads(m_startAHTypeCBox, false);
+ startAHTypeLbl->setBuddy(m_startAHTypeCBox);
+ QLabel* startAHWidthLbl = new QLabel(i18n("&Width:"), startGBox);
+- m_startAHWidthUSBox = new KoUnitDoubleSpinBox(startGBox, 0.0, 1000.0, 0.1, 1.0, m_unit, 2);
++ m_startAHWidthUSBox = new KoBuggyUnitDoubleSpinBox(startGBox, 0.0, 1000.0, 0.1, 1.0, m_unit, 2);
+ startAHWidthLbl->setBuddy(m_startAHWidthUSBox);
+ QLabel* startAHHeightLbl = new QLabel(i18n("&Length:"), startGBox);
+- m_startAHHeightUSBox = new KoUnitDoubleSpinBox(startGBox, 0.0, 1000.0, 0.1, 1.0, m_unit, 2);
++ m_startAHHeightUSBox = new KoBuggyUnitDoubleSpinBox(startGBox, 0.0, 1000.0, 0.1, 1.0, m_unit, 2);
+ startAHHeightLbl->setBuddy(m_startAHHeightUSBox);
+
+ QGroupBox* endGBox = new QGroupBox(2, Qt::Horizontal, i18n("Arrowhead at End"), mainWidget);
+@@ -65,10 +65,10 @@
+ loadArrowHeads(m_endAHTypeCBox, true);
+ endAHTypeLbl->setBuddy(m_endAHTypeCBox);
+ QLabel* endAHWidthLbl = new QLabel(i18n("W&idth:"), endGBox);
+- m_endAHWidthUSBox = new KoUnitDoubleSpinBox(endGBox, 0.0, 1000.0, 0.1, 1.0, m_unit, 2);
++ m_endAHWidthUSBox = new KoBuggyUnitDoubleSpinBox(endGBox, 0.0, 1000.0, 0.1, 1.0, m_unit, 2);
+ endAHWidthLbl->setBuddy(m_endAHWidthUSBox);
+ QLabel* endAHHeightLbl = new QLabel(i18n("L&ength:"), endGBox);
+- m_endAHHeightUSBox = new KoUnitDoubleSpinBox(endGBox, 0.0, 1000.0, 0.1, 1.0, m_unit, 2);
++ m_endAHHeightUSBox = new KoBuggyUnitDoubleSpinBox(endGBox, 0.0, 1000.0, 0.1, 1.0, m_unit, 2);
+ endAHHeightLbl->setBuddy(m_endAHHeightUSBox);
+
+ gl->addWidget(startGBox, 0, 0);
+Index: kivio/kiviopart/ui/kiviooptionsdialog.h
+===================================================================
+--- kivio/kiviopart/ui/kiviooptionsdialog.h (revision 427945)
++++ kivio/kiviopart/ui/kiviooptionsdialog.h (working copy)
+@@ -32,7 +32,7 @@
+ class QRadioButton;
+ class KColorButton;
+ class KURLRequester;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+ class KivioGuideLineData;
+ class QGroupBox;
+ class QFont;
+@@ -105,17 +105,17 @@
+ KoPageLayout m_layout;
+ QLabel* m_fontTxtLbl;
+ QFont m_font;
+- KoUnitDoubleSpinBox* m_spaceHorizUSpin;
+- KoUnitDoubleSpinBox* m_spaceVertUSpin;
+- KoUnitDoubleSpinBox* m_snapHorizUSpin;
+- KoUnitDoubleSpinBox* m_snapVertUSpin;
++ KoBuggyUnitDoubleSpinBox* m_spaceHorizUSpin;
++ KoBuggyUnitDoubleSpinBox* m_spaceVertUSpin;
++ KoBuggyUnitDoubleSpinBox* m_snapHorizUSpin;
++ KoBuggyUnitDoubleSpinBox* m_snapVertUSpin;
+ QCheckBox* m_gridChBox;
+ QCheckBox* m_snapChBox;
+ KColorButton* m_gridColorBtn;
+ KListView* m_guideList;
+ QRadioButton* m_orientHorizRBtn;
+ QRadioButton* m_orientVertRBtn;
+- KoUnitDoubleSpinBox* m_posUSpin;
++ KoBuggyUnitDoubleSpinBox* m_posUSpin;
+ QCheckBox* m_snapGuideChBox;
+ QCheckBox* m_guidesChBox;
+ KColorButton* m_guideColorBtn;
+Index: kivio/kiviopart/ui/kivioarrowheadformatdlg.h
+===================================================================
+--- kivio/kiviopart/ui/kivioarrowheadformatdlg.h (revision 427945)
++++ kivio/kiviopart/ui/kivioarrowheadformatdlg.h (working copy)
+@@ -24,7 +24,7 @@
+
+ #include <koUnit.h>
+
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+ class KComboBox;
+ class KivioView;
+
+@@ -58,10 +58,10 @@
+ void loadArrowHeads(KComboBox* combo, bool endArrow);
+
+ protected:
+- KoUnitDoubleSpinBox* m_startAHWidthUSBox;
+- KoUnitDoubleSpinBox* m_startAHHeightUSBox;
+- KoUnitDoubleSpinBox* m_endAHWidthUSBox;
+- KoUnitDoubleSpinBox* m_endAHHeightUSBox;
++ KoBuggyUnitDoubleSpinBox* m_startAHWidthUSBox;
++ KoBuggyUnitDoubleSpinBox* m_startAHHeightUSBox;
++ KoBuggyUnitDoubleSpinBox* m_endAHWidthUSBox;
++ KoBuggyUnitDoubleSpinBox* m_endAHHeightUSBox;
+ KComboBox* m_startAHTypeCBox;
+ KComboBox* m_endAHTypeCBox;
+ KoUnit::Unit m_unit;
+Index: kpresenter/kppieobject.h
+===================================================================
+--- kpresenter/kppieobject.h (revision 427945)
++++ kpresenter/kppieobject.h (working copy)
+@@ -1,5 +1,6 @@
+ /* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -79,7 +80,6 @@
+ { return lineEnd; }
+
+ virtual QDomDocumentFragment save( QDomDocument& doc, double offset );
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
+
+ virtual double load(const QDomElement &element);
+ virtual void flip(bool horizontal );
+@@ -89,6 +89,9 @@
+ virtual KoPoint getRealOrig() const;
+
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++
+ virtual void paint( QPainter *_painter, KoZoomHandler*_zoomHandler,
+ int /* pageNum */, bool drawingShadow, bool drawContour );
+
+Index: kpresenter/kpcubicbeziercurveobject.h
+===================================================================
+--- kpresenter/kpcubicbeziercurveobject.h (revision 427945)
++++ kpresenter/kpcubicbeziercurveobject.h (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 2001 Toshitaka Fujioka <fujioka@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -42,10 +43,9 @@
+ virtual QString getTypeString() const { return i18n("Cubic Bezier Curve"); }
+
+ virtual QDomDocumentFragment save( QDomDocument& doc,double offset );
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
+
+ virtual double load( const QDomElement &element );
+- virtual void loadOasis( const QDomElement &element, KoOasisContext & context,KPRLoadingInfo* info );
++ virtual void loadOasis( const QDomElement &element, KoOasisContext & context, KPRLoadingInfo* info );
+
+ virtual void flip(bool horizontal );
+ void closeObject(bool _close);
+@@ -53,6 +53,9 @@
+
+
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++
+ virtual void updatePoints( double _fx, double _fy );
+ virtual KoPointArray getDrawingPoints() const;
+
+Index: kpresenter/kprectobject.h
+===================================================================
+--- kpresenter/kprectobject.h (revision 427945)
++++ kpresenter/kprectobject.h (working copy)
+@@ -53,9 +53,11 @@
+ virtual QDomDocumentFragment save( QDomDocument& doc, double offset );
+ virtual double load(const QDomElement &element);
+ virtual void loadOasis(const QDomElement &element, KoOasisContext &context, KPRLoadingInfo *info);
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
+
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++
+ virtual void paint( QPainter *_painter,KoZoomHandler*_zoomHandler,
+ int /* pageNum */, bool drawingShadow, bool drawContour );
+
+Index: kpresenter/kpellipseobject.h
+===================================================================
+--- kpresenter/kpellipseobject.h (revision 427945)
++++ kpresenter/kpellipseobject.h (working copy)
+@@ -49,9 +49,11 @@
+ { return i18n("Ellipse"); }
+
+ virtual KoSize getRealSize() const;
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
+
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++
+ virtual void paint( QPainter *_painter,KoZoomHandler *_zoomHandler,
+ int /* pageNum */, bool drawingShadow, bool drawContour = FALSE );
+
+Index: kpresenter/kpfreehandobject.h
+===================================================================
+--- kpresenter/kpfreehandobject.h (revision 427945)
++++ kpresenter/kpfreehandobject.h (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 2001 Toshitaka Fujioka <fujioka@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -43,8 +44,11 @@
+
+ virtual QDomDocumentFragment save( QDomDocument& doc,double offset );
+ virtual double load( const QDomElement &element );
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
++ virtual void loadOasis( const QDomElement &element, KoOasisContext & context, KPRLoadingInfo* info );
+
++protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
+ };
+
+ #endif
+Index: kpresenter/kppointobject.cc
+===================================================================
+--- kpresenter/kppointobject.cc (revision 427945)
++++ kpresenter/kppointobject.cc (working copy)
+@@ -1,6 +1,6 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+- Copyright (C) 2004 Thorsten Zachmann <zachmann@kde.org>
++ Copyright (C) 2004-2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -83,71 +83,24 @@
+ return fragment;
+ }
+
+-QString KPPointObject::saveOasisStrokeElement( KoGenStyles& mainStyles ) const
++const char * KPPointObject::getOasisElementName() const
+ {
+- KoGenStyle styleobjectauto( KoGenStyle::STYLE_GRAPHICAUTO, "graphic" );
+- saveOasisMarkerElement( mainStyles, styleobjectauto );
+- saveOasisObjectProtectStyle( styleobjectauto );
+- KPShadowObject::saveOasisStrokeElement( mainStyles, styleobjectauto );
+- return mainStyles.lookup( styleobjectauto, "gr" );
++ return "draw:custom-shape";
+ }
+
+-
+-bool KPPointObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context ) const
+-{
+- QString listOfPoint;
+- int maxX=0;
+- int maxY=0;
+- KoPointArray::ConstIterator it;
+- for ( it = points.begin(); it != points.end(); ++it ) {
+- int tmpX = 0;
+- int tmpY = 0;
+- tmpX = ( int ) ( KoUnit::toMM( ( *it ).x() )*100 );
+- tmpY = ( int ) ( KoUnit::toMM( ( *it ).y() )*100 );
+- if ( !listOfPoint.isEmpty() )
+- listOfPoint += QString( " %1,%2" ).arg( tmpX ).arg( tmpY );
+- else
+- listOfPoint = QString( "%1,%2" ).arg( tmpX ).arg( tmpY );
+- maxX = QMAX( maxX, tmpX );
+- maxY = QMAX( maxY, tmpY );
+- }
+- xmlWriter.addAttribute("draw:points", listOfPoint );
+- xmlWriter.addAttribute("svg:viewBox", QString( "0 0 %1 %2" ).arg( maxX ).arg( maxY ) );
+- return true;
+-}
+-
+ void KPPointObject::loadOasisMarker( KoOasisContext & context )
+ {
+ loadOasisMarkerElement( context, "marker-start", lineBegin );
+ loadOasisMarkerElement( context, "marker-end", lineEnd );
+ }
+
+-void KPPointObject::loadOasis( const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info )
++void KPPointObject::fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const
+ {
+- //kdDebug()<<"void KPPointObject::loadOasis( const QDomElement &element )*************\n";
+- KPShadowObject::loadOasis( element, context, info );
+- //load point.
+- QStringList ptList = QStringList::split(' ', element.attributeNS( KoXmlNS::draw, "points", QString::null));
+- QString pt_x, pt_y;
+- double tmp_x, tmp_y;
+- unsigned int index = 0;
+- for (QStringList::Iterator it = ptList.begin(); it != ptList.end(); ++it)
+- {
+- tmp_x = (*it).section(',',0,0).toInt() / 100;
+- tmp_y = (*it).section(',',1,1).toInt() / 100;
+-
+- pt_x.setNum(tmp_x);
+- pt_x+="mm";
+-
+- pt_y.setNum(tmp_y);
+- pt_y+="mm";
+-
+- points.putPoints( index, 1, KoUnit::parseValue(pt_x),KoUnit::parseValue(pt_y) );
+- ++index;
+- }
+- loadOasisMarker( context );
++ KPShadowObject::fillStyle( styleObjectAuto, mainStyles );
++ saveOasisMarkerElement( mainStyles, styleObjectAuto );
+ }
+
++
+ double KPPointObject::load( const QDomElement &element )
+ {
+ double offset = KPShadowObject::load( element );
+Index: kpresenter/kplineobject.h
+===================================================================
+--- kpresenter/kplineobject.h (revision 427945)
++++ kpresenter/kplineobject.h (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -63,16 +64,18 @@
+ virtual double load(const QDomElement &element);
+ virtual void loadOasis(const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info);
+
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
+-
+ virtual void flip(bool horizontal );
+
+ virtual KoSize getRealSize() const;
+ virtual KoPoint getRealOrig() const;
+
+ protected:
+- QString saveOasisStrokeElement( KoGenStyles& mainStyles ) const;
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++ virtual void saveOasisPosObject( KoXmlWriter &xmlWriter, int indexObj ) const;
+
++ virtual void fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const;
++
+ virtual void paint( QPainter *_painter, KoZoomHandler*_zoomHandler,
+ int /* pageNum */, bool drawingShadow, bool drawContour = FALSE );
+ LineType lineType;
+Index: kpresenter/kppointobject.h
+===================================================================
+--- kpresenter/kppointobject.h (revision 427945)
++++ kpresenter/kppointobject.h (working copy)
+@@ -1,6 +1,6 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+- Copyright (C) 2004 Thorsten Zachmann <zachmann@kde.org>
++ Copyright (C) 2004-2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -34,10 +34,8 @@
+ virtual KoPoint getRealOrig() const;
+
+ virtual QDomDocumentFragment save( QDomDocument& doc, double offset );
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context ) const;
+
+ virtual double load( const QDomElement &element );
+- virtual void loadOasis( const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info );
+
+ virtual void setLineBegin( LineEnd _lineBegin ) { lineBegin = _lineBegin; }
+ virtual void setLineEnd( LineEnd _lineEnd ) { lineEnd = _lineEnd; }
+@@ -53,10 +51,13 @@
+
+ virtual void closeObject( bool close );
+ virtual bool isClosed() const;
+- virtual QString saveOasisStrokeElement( KoGenStyles& mainStyles ) const;
+
+ protected:
++ virtual const char * getOasisElementName() const;
++
+ void loadOasisMarker( KoOasisContext & context );
++ virtual void fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const;
++
+ virtual void paint( QPainter *_painter,KoZoomHandler*_zoomHandler,
+ int /* pageNum */, bool drawingShadow, bool drawContour = FALSE );
+ virtual void updatePoints( double _fx, double _fy );
+Index: kpresenter/kpautoformobject.cc
+===================================================================
+--- kpresenter/kpautoformobject.cc (revision 427945)
++++ kpresenter/kpautoformobject.cc (working copy)
+@@ -76,12 +76,17 @@
+ }
+
+
+-bool KPAutoformObject::saveOasis( KoXmlWriter & xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPAutoformObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- kdDebug()<<"bool KPAutoformObject::saveOasis( KoXmlWriter & xmlWriter ) not implemented\n";
++ kdDebug()<<"bool KPAutoformObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) not implemented\n";
+ return true;
+ }
+
++const char * KPAutoformObject::getOasisElementName() const
++{
++ return "draw:custom-shape";
++}
++
+ QDomDocumentFragment KPAutoformObject::save( QDomDocument& doc, double offset )
+ {
+ QDomDocumentFragment fragment=KP2DObject::save(doc, offset);
+Index: kpresenter/kpgroupobject.h
+===================================================================
+--- kpresenter/kpgroupobject.h (revision 427945)
++++ kpresenter/kpgroupobject.h (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -70,7 +71,6 @@
+ virtual QDomDocumentFragment save( QDomDocument& doc, double offset );
+ virtual double load(const QDomElement &element, KPresenterDoc *doc);
+ virtual void loadOasisGroupObject( KPresenterDoc *doc, KPrPage * newpage, QDomNode &element, KoOasisContext & context, KPRLoadingInfo *info);
+- virtual bool saveOasis(KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj) const;
+
+ virtual void draw( QPainter *_painter, KoZoomHandler *_zoomhandler,
+ int pageNum, SelectionMode selectionMode, bool drawContour = FALSE );
+@@ -101,6 +101,9 @@
+ virtual void decCmdRef();
+
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++
+ void updateSizes( double fx, double fy );
+ void updateCoords( double dx, double dy );
+
+Index: kpresenter/kppixmapobject.h
+===================================================================
+--- kpresenter/kppixmapobject.h (revision 427945)
++++ kpresenter/kppixmapobject.h (working copy)
+@@ -2,6 +2,7 @@
+
+ /* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -72,7 +73,6 @@
+ { return i18n("Picture"); }
+
+ virtual QDomDocumentFragment save( QDomDocument& doc, double offset );
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
+
+ virtual double load(const QDomElement &element);
+ virtual void loadOasis(const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info);
+@@ -113,11 +113,15 @@
+ virtual void flip(bool horizontal );
+
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++
+ KPPixmapObject() {}
+
+ QPixmap changePictureSettings( QPixmap _tmpPixmap );
+- virtual void saveOasisPictureElement( KoGenStyle &styleobjectauto );
++ virtual void saveOasisPictureElement( KoGenStyle &styleobjectauto ) const;
+ void loadOasisPictureEffect(KoOasisContext & context );
++ virtual void fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const;
+
+ /**
+ * @internal
+Index: kpresenter/kppartobject.h
+===================================================================
+--- kpresenter/kppartobject.h (revision 427945)
++++ kpresenter/kppartobject.h (working copy)
+@@ -49,14 +49,15 @@
+
+ KPresenterChild *getChild() const { return child; }
+ void enableDrawing( bool f ) { _enableDrawing = f; }
+- virtual bool saveOasisPart( KoXmlWriter &xmlWriter, KoStore *store, KoSavingContext& context, int indexObj, int partIndexObj, KoXmlWriter* manifestWriter ) const;
+ virtual void loadOasis(const QDomElement &element, KoOasisContext &context, KPRLoadingInfo *info);
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext &context, int indexObj ) const { return true;/* use saveOasisPart*/};
+
+ public slots:
+ void slot_changed( KoChild *_koChild );
+
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++
+ void updateChildGeometry();
+ virtual void paint( QPainter *_painter,KoZoomHandler*_zoomHandler,
+ int /* pageNum */, bool drawingShadow, bool drawContour = FALSE );
+Index: kpresenter/kpobject.cc
+===================================================================
+--- kpresenter/kpobject.cc (revision 427945)
++++ kpresenter/kpobject.cc (working copy)
+@@ -344,7 +344,7 @@
+ xmlWriter.addAttributePt( "svg:width", ext.width() );
+ xmlWriter.addAttributePt( "svg:height", ext.height() );
+
+- if ( angle!=0.0 )
++ if ( kAbs( angle ) > 1E-6 )
+ {
+ double value = -1 * ( ( double )angle* M_PI )/180.0;
+ QString str=QString( "rotate (%1)" ).arg( value );
+@@ -362,6 +362,40 @@
+ }
+ }
+
++QString KPObject::getStyle( KPOasisSaveContext &sc ) const
++{
++ kdDebug(33001) << "KPObject::getStyle" << endl;
++ KoGenStyle styleObjectAuto;
++ KoGenStyles &mainStyles( sc.context.mainStyles() );
++ if ( sc.onMaster )
++ {
++ styleObjectAuto = KoGenStyle( KPresenterDoc::STYLE_PRESENTATIONSTICKYOBJECT, "presentation" );
++ }
++ else
++ {
++ styleObjectAuto = KoGenStyle( KoGenStyle::STYLE_GRAPHICAUTO, "graphic" );
++ }
++ fillStyle( styleObjectAuto, mainStyles );
++ if ( sc.onMaster )
++ {
++ return mainStyles.lookup( styleObjectAuto, "pr" );
++ }
++ return mainStyles.lookup( styleObjectAuto, "gr" );
++}
++
++void KPObject::fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& /* mainStyles */ ) const
++{
++ kdDebug(33001) << "KPObject::fillStyle" << endl;
++ saveOasisObjectProtectStyle( styleObjectAuto );
++ saveOasisShadowElement( styleObjectAuto );
++}
++
++bool KPObject::saveOasisObjectAttributes( KPOasisSaveContext &/* sc */ ) const
++{
++ kdDebug()<<"bool saveOasisObjectAttributes not implemented";
++ return true;
++}
++
+ bool KPObject::haveAnimation() const
+ {
+ //kdDebug()<<" effect :"<<effect<<" effect3 :"<<effect3<<" a_fileName :"<<a_fileName<<" d_fileName :"<<d_fileName<<" appearTimer :"<<appearTimer<<" disappearTimer :"<<disappearTimer<<endl;
+@@ -849,6 +883,20 @@
+ }
+ }
+
++bool KPObject::saveOasisObject( KPOasisSaveContext &sc ) const
++{
++ sc.xmlWriter.startElement( getOasisElementName() );
++ sc.xmlWriter.addAttribute( "draw:style-name", getStyle( sc ) );
++ saveOasisPosObject( sc.xmlWriter, sc.indexObj );
++ if( !objectName.isEmpty())
++ sc.xmlWriter.addAttribute( "draw:name", objectName );
++
++ saveOasisObjectAttributes( sc );
++
++ sc.xmlWriter.endElement();
++ return true;
++}
++
+ void KPObject::saveOasisShadowElement( KoGenStyle &styleobjectauto ) const
+ {
+ //FIXME default value
+@@ -1628,6 +1676,99 @@
+ // <draw:stroke-dash draw:name="Fine Dotted" draw:style="rect" draw:dots1="1" draw:distance="0.457cm"/>
+ }
+
++bool KPShadowObject::saveOasisDrawPoints( const KoPointArray &points, KPOasisSaveContext &sc )
++{
++ QString listOfPoint;
++ int maxX=0;
++ int maxY=0;
++ KoPointArray::ConstIterator it( points.begin() );
++ for ( ; it != points.end(); ++it )
++ {
++ int tmpX = int( ( *it ).x() * 10000 );
++ int tmpY = int( ( *it ).y() * 10000 );
++ //if ( !listOfPoint.isEmpty() )
++ listOfPoint += QString( " %1,%2" ).arg( tmpX ).arg( tmpY );
++ //else
++ // listOfPoint = QString( "%1,%2" ).arg( tmpX ).arg( tmpY );
++ maxX = QMAX( maxX, tmpX );
++ maxY = QMAX( maxY, tmpY );
++ }
++ sc.xmlWriter.addAttribute("draw:points", listOfPoint );
++ sc.xmlWriter.addAttribute("svg:viewBox", QString( "0 0 %1 %2" ).arg( maxX ).arg( maxY ) );
++ return true;
++}
++
++bool KPShadowObject::loadOasisDrawPoints( KoPointArray &points, const QDomElement &element,
++ KoOasisContext & context, KPRLoadingInfo *info )
++{
++ QStringList ptList = QStringList::split(' ', element.attributeNS( KoXmlNS::draw, "points", QString::null));
++ QStringList viewBox = QStringList::split( ' ', element.attributeNS( KoXmlNS::svg, "viewBox", QString::null ) );
++ //for ( QStringList::Iterator it = viewBox.begin(); it != viewBox.end(); ++it )
++ //{
++ // kdDebug(33001) << "viewBox = " << *it << endl;
++ //}
++
++ int left = 0;
++ int top = 0;
++ int right = 0;
++ int bottom = 0;
++
++ if ( viewBox.size() == 4 )
++ {
++ QStringList::Iterator it = viewBox.begin();
++ left = ( *it++ ).toInt();
++ top = ( *it++ ).toInt();
++ right = ( *it++ ).toInt();
++ bottom = ( *it ).toInt();
++ //kdDebug(33001) << "left = " << left
++ // << "top = " << top
++ // << "right =" << right
++ // << "bottom =" << bottom << endl;
++ }
++ else
++ {
++ //if no viewBox is found
++ for (QStringList::Iterator it = ptList.begin(); it != ptList.end(); ++it)
++ {
++ right = QMAX( (*it).section( ',', 0, 0 ).toInt(), right );
++ bottom = QMAX( (*it).section( ',', 1, 1 ).toInt(), bottom );
++ }
++ }
++
++ if ( right - left != 0 && bottom - top != 0 )
++ {
++ double tmp_x, tmp_y;
++ unsigned int index = 0;
++ for (QStringList::Iterator it = ptList.begin(); it != ptList.end(); ++it)
++ {
++ tmp_x = double( (*it).section( ',', 0, 0 ).toInt() + left ) / ( right - left ) * ext.width();
++ tmp_y = double( (*it).section( ',', 1, 1 ).toInt() + top ) / ( bottom - top ) * ext.height();
++
++ //kdDebug(33001) << "p" << index << " x: " << tmp_x << endl;
++ //kdDebug(33001) << "p" << index << " y: " << tmp_y << endl;
++
++ points.putPoints( index, 1, tmp_x, tmp_y );
++ ++index;
++ }
++ }
++ else
++ {
++ kdDebug(33001) << "problem in viewBox values are: "
++ << "left = " << left << ", "
++ << "top = " << top << ", "
++ << "right =" << right << ", "
++ << "bottom =" << bottom << endl;
++ }
++ return true;
++}
++
++void KPShadowObject::fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const
++{
++ kdDebug(33001) << "KPShadowObject::fillStyle" << endl;
++ KPObject::fillStyle( styleObjectAuto, mainStyles );
++ saveOasisStrokeElement( mainStyles, styleObjectAuto );
++}
++
+ void KPShadowObject::loadOasis(const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info)
+ {
+ //kdDebug()<<"void KPShadowObject::loadOasis(const QDomElement &element)**********************\n";
+@@ -1822,14 +1963,15 @@
+ return fragment;
+ }
+
+-QString KP2DObject::saveOasisBackgroundStyle( KoXmlWriter &xmlWriter, KoGenStyles& mainStyles, int indexObj ) const
++void KP2DObject::fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const
+ {
+- saveOasisPosObject( xmlWriter,indexObj );
+- KoGenStyle styleobjectauto;
+- if ( sticky )
+- styleobjectauto = KoGenStyle( KPresenterDoc::STYLE_PRESENTATIONSTICKYOBJECT, "presentation" );
+- else
+- styleobjectauto = KoGenStyle( KoGenStyle::STYLE_GRAPHICAUTO, "graphic" );
++ kdDebug(33001) << "KP2DObject::fillStyle" << endl;
++ KPShadowObject::fillStyle( styleObjectAuto, mainStyles );
++ saveOasisBackgroundElement( styleObjectAuto, mainStyles );
++}
++
++void KP2DObject::saveOasisBackgroundElement( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const
++{
+ switch ( getFillType() )
+ {
+ case FT_BRUSH:
+@@ -1838,34 +1980,22 @@
+ //todo FIXME when text object doesn't have a background
+ if( brush != QBrush() )
+ {
+- KoOasisStyles::saveOasisFillStyle( styleobjectauto, mainStyles, brush );
++ KoOasisStyles::saveOasisFillStyle( styleObjectAuto, mainStyles, brush );
+ }
+ else
+ {
+- styleobjectauto.addProperty( "draw:fill","none" );
++ styleObjectAuto.addProperty( "draw:fill","none" );
+ }
+ break;
+ }
+ case FT_GRADIENT:
+- styleobjectauto.addProperty( "draw:fill","gradient" );
+- styleobjectauto.addProperty( "draw:fill-gradient-name", saveOasisGradientStyle( mainStyles ) );
++ styleObjectAuto.addProperty( "draw:fill","gradient" );
++ styleObjectAuto.addProperty( "draw:fill-gradient-name", saveOasisGradientStyle( mainStyles ) );
+ break;
+ }
+- saveOasisObjectProtectStyle( styleobjectauto );
+-
+- saveOasisStrokeElement( mainStyles, styleobjectauto );
+- saveOasisMarginElement( styleobjectauto );
+- saveOasisShadowElement( styleobjectauto );
+- saveOasisPictureElement( styleobjectauto );
+-
+- if ( sticky )
+- return mainStyles.lookup( styleobjectauto, "pr" );
+- else
+- return mainStyles.lookup( styleobjectauto, "gr" );
+ }
+
+
+-
+ QString KP2DObject::saveOasisGradientStyle( KoGenStyles& mainStyles ) const
+ {
+ KoGenStyle gradientStyle( KPresenterDoc::STYLE_GRADIENT /*no family name*/);
+@@ -2170,6 +2300,56 @@
+ return offset;
+ }
+
++void KP2DObject::draw( QPainter *_painter, KoZoomHandler*_zoomHandler,
++ int pageNum, SelectionMode selectionMode, bool drawContour )
++{
++ double ox = orig.x();
++ double oy = orig.y();
++ _painter->save();
++
++ // Draw the shadow if any
++ if ( shadowDistance > 0 && !drawContour )
++ {
++ _painter->save();
++ QPen tmpPen( pen );
++ pen.setColor( shadowColor );
++ QBrush tmpBrush( m_brush.getBrush() );
++ QBrush shadowBrush( tmpBrush );
++ shadowBrush.setColor( shadowColor );
++ m_brush.setBrush( shadowBrush );
++
++ if ( angle == 0 )
++ {
++ double sx = ox;
++ double sy = oy;
++ getShadowCoords( sx, sy );
++
++ _painter->translate( _zoomHandler->zoomItX( sx ), _zoomHandler->zoomItY( sy ) );
++ paint( _painter, _zoomHandler, pageNum, true, drawContour );
++ }
++ else
++ {
++ _painter->translate( _zoomHandler->zoomItX(ox), _zoomHandler->zoomItY(oy) );
++ rotateObjectWithShadow(_painter, _zoomHandler);
++ paint( _painter, _zoomHandler, pageNum, true, drawContour );
++ }
++
++ pen = tmpPen;
++ m_brush.setBrush( tmpBrush );
++ _painter->restore();
++ }
++
++ _painter->translate( _zoomHandler->zoomItX(ox), _zoomHandler->zoomItY(oy) );
++
++ if ( angle != 0 )
++ rotateObject(_painter,_zoomHandler);
++ paint( _painter, _zoomHandler, pageNum, false, drawContour );
++
++ _painter->restore();
++
++ KPObject::draw( _painter, _zoomHandler, pageNum, selectionMode, drawContour );
++}
++
+ void KP2DObject::flip( bool horizontal ) {
+ KPObject::flip( horizontal );
+
+Index: kpresenter/kppolygonobject.cc
+===================================================================
+--- kpresenter/kppolygonobject.cc (revision 427945)
++++ kpresenter/kppolygonobject.cc (working copy)
+@@ -68,38 +68,24 @@
+ return dcop;
+ }
+
+-bool KPPolygonObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPPolygonObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- //FIXME me wait that it will define into oo spec
+- xmlWriter.startElement( "draw:regular-polygon" );
+- xmlWriter.addAttribute( "draw:style-name", KP2DObject::saveOasisBackgroundStyle( xmlWriter, context.mainStyles(), indexObj ) );
+-
+- QString listOfPoint;
+- int maxX=0;
+- int maxY=0;
+- KoPointArray::ConstIterator it;
+- for ( it = points.begin(); it != points.end(); ++it ) {
+- int tmpX = 0;
+- int tmpY = 0;
+- tmpX = ( int ) ( KoUnit::toMM( ( *it ).x() )*100 );
+- tmpY = ( int ) ( KoUnit::toMM( ( *it ).y() )*100 );
+- if ( !listOfPoint.isEmpty() )
+- listOfPoint += QString( " %1,%2" ).arg( tmpX ).arg( tmpY );
+- else
+- listOfPoint = QString( "%1,%2" ).arg( tmpX ).arg( tmpY );
+- maxX = QMAX( maxX, tmpX );
+- maxY = QMAX( maxY, tmpY );
++ sc.xmlWriter.addAttribute( "draw:corners", cornersValue );
++ sc.xmlWriter.addAttribute( "draw:concave", checkConcavePolygon ? "true" : "false" );
++ if ( checkConcavePolygon )
++ {
++ sc.xmlWriter.addAttribute( "draw:sharpness", QString( "%1%").arg( sharpnessValue ) );
+ }
+- xmlWriter.addAttribute("draw:points", listOfPoint );
+- xmlWriter.addAttribute("svg:viewBox", QString( "0 0 %1 %2" ).arg( maxX ).arg( maxY ) );
+
+- if( !objectName.isEmpty())
+- xmlWriter.addAttribute( "draw:name", objectName );
+- xmlWriter.endElement();
+ return true;
+ }
+
++const char * KPPolygonObject::getOasisElementName() const
++{
++ return "draw:regular-polygon";
++}
+
++
+ QDomDocumentFragment KPPolygonObject::save( QDomDocument& doc, double offset )
+ {
+ QDomDocumentFragment fragment = KP2DObject::save( doc, offset );
+@@ -133,26 +119,14 @@
+ {
+ kdDebug()<<"void KPPolygonObject::loadOasis( const QDomElement &element )***********\n";
+ KP2DObject::loadOasis( element,context, info );
+- //load point.
+- QStringList ptList = QStringList::split(' ', element.attributeNS( KoXmlNS::draw, "points", QString::null));
+-
+- QString pt_x, pt_y;
+- double tmp_x, tmp_y;
+- unsigned int index = 0;
+- for (QStringList::Iterator it = ptList.begin(); it != ptList.end(); ++it)
++ cornersValue = element.attributeNS( KoXmlNS::draw, "corners", QString::null ).toInt();
++ checkConcavePolygon = element.attributeNS( KoXmlNS::draw, "concave", QString::null ) == "true";
++ sharpnessValue = 0;
++ if ( checkConcavePolygon )
+ {
+- tmp_x = (*it).section(',',0,0).toInt() / 100;
+- tmp_y = (*it).section(',',1,1).toInt() / 100;
+-
+- pt_x.setNum(tmp_x);
+- pt_x+="mm";
+-
+- pt_y.setNum(tmp_y);
+- pt_y+="mm";
+-
+- points.putPoints( index, 1, KoUnit::parseValue(pt_x),KoUnit::parseValue(pt_y) );
+- ++index;
++ sharpnessValue = element.attributeNS( KoXmlNS::draw, "sharpness", QString::null ).remove( '%').toInt();
+ }
++ drawPolygon();
+ }
+
+ double KPPolygonObject::load( const QDomElement &element )
+@@ -280,7 +254,8 @@
+
+ void KPPolygonObject::drawPolygon()
+ {
+- KoRect _rect = points.boundingRect();
++ kdDebug()<<"void KPPolygonObject::drawPolygon()***********\n";
++ KoRect _rect( 0, 0, ext.width(), ext.height() );
+ double angle = 2 * M_PI / cornersValue;
+ double diameter = static_cast<double>( QMAX( _rect.width(), _rect.height() ) );
+ double radius = diameter * 0.5;
+Index: kpresenter/kpcubicbeziercurveobject.cc
+===================================================================
+--- kpresenter/kpcubicbeziercurveobject.cc (revision 427945)
++++ kpresenter/kpcubicbeziercurveobject.cc (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 2001 Toshitaka Fujioka <fujioka@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -60,16 +61,17 @@
+ return dcop;
+ }
+
+-bool KPCubicBezierCurveObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPCubicBezierCurveObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- kdDebug()<<"bool KPCubicBezierCurveObject::saveOasis( KoXmlWriter &xmlWriter ) not implemented\n";
+- //saveOasisShadowElement( styleobjectauto );
+- //KPPointObject::saveOasisStrokeElement( KoGenStyles& mainStyles );
+-//
+- //call saveOasisStrokeElement( KoGenStyle &styleobjectauto );
++ kdDebug()<<"bool KPCubicBezierCurveObject::saveOasis( KoXmlWriter & xmlWriter ) not implemented\n";
+ return true;
+ }
+
++const char * KPCubicBezierCurveObject::getOasisElementName() const
++{
++ return "draw:custom-shape";
++}
++
+ void KPCubicBezierCurveObject::loadOasis( const QDomElement &element, KoOasisContext & context, KPRLoadingInfo* info )
+ {
+ //todo
+Index: kpresenter/kpquadricbeziercurveobject.h
+===================================================================
+--- kpresenter/kpquadricbeziercurveobject.h (revision 427945)
++++ kpresenter/kpquadricbeziercurveobject.h (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 2001 Toshitaka Fujioka <fujioka@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -43,7 +44,6 @@
+ virtual QString getTypeString() const { return i18n("Quadric Bezier Curve"); }
+
+ virtual QDomDocumentFragment save( QDomDocument& doc, double offset );
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
+ virtual void loadOasis( const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info );
+
+ virtual double load( const QDomElement &element );
+@@ -53,6 +53,9 @@
+ bool isClosed()const;
+
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++
+ virtual void updatePoints( double _fx, double _fy );
+ virtual KoPointArray getDrawingPoints() const;
+
+Index: kpresenter/autoforms/Arrows/ArrowLeftUp.desktop
+===================================================================
+--- kpresenter/autoforms/Arrows/ArrowLeftUp.desktop (revision 427945)
++++ kpresenter/autoforms/Arrows/ArrowLeftUp.desktop (working copy)
+@@ -3,6 +3,7 @@
+ Type=Link
+ URL=.source/ArrowLeftUp.atf
+ Name=Arrow Left/Up
++Name[cy]=Saeth i'r Chwith/i Fyny
+ Name[da]=Pil til venstre/op
+ Name[de]=Pfeil nach links/oben
+ Name[el]=Αριστερό/πάνω βέλος
+Index: kpresenter/autoforms/Arrows/ArrowRightDown.desktop
+===================================================================
+--- kpresenter/autoforms/Arrows/ArrowRightDown.desktop (revision 427945)
++++ kpresenter/autoforms/Arrows/ArrowRightDown.desktop (working copy)
+@@ -3,6 +3,7 @@
+ Type=Link
+ URL=.source/ArrowRightDown.atf
+ Name=Arrow Right/Down
++Name[cy]=Saeth i'r Dde/i Lawr
+ Name[da]=Pil til højre/ned
+ Name[de]=Pfeil nach rechts/unten
+ Name[el]=Δεξί/κάτω βέλος
+Index: kpresenter/autoforms/Arrows/ArrowDown.desktop
+===================================================================
+--- kpresenter/autoforms/Arrows/ArrowDown.desktop (revision 427945)
++++ kpresenter/autoforms/Arrows/ArrowDown.desktop (working copy)
+@@ -3,6 +3,7 @@
+ Type=Link
+ URL=.source/ArrowDown.atf
+ Name=Arrow Down
++Name[cy]=Saeth i Lawr
+ Name[da]=Pil ned
+ Name[de]=Pfeil nach unten
+ Name[el]=Κάτω βέλος
+Index: kpresenter/autoforms/Arrows/ArrowRight.desktop
+===================================================================
+--- kpresenter/autoforms/Arrows/ArrowRight.desktop (revision 427945)
++++ kpresenter/autoforms/Arrows/ArrowRight.desktop (working copy)
+@@ -3,6 +3,7 @@
+ Type=Link
+ URL=.source/ArrowRight.atf
+ Name=Arrow Right
++Name[cy]=Saeth i'r Dde
+ Name[da]=Pil til højre
+ Name[de]=Pfeil nach rechts
+ Name[el]=Δεξί βέλος
+Index: kpresenter/autoforms/Arrows/ArrowLeftDown.desktop
+===================================================================
+--- kpresenter/autoforms/Arrows/ArrowLeftDown.desktop (revision 427945)
++++ kpresenter/autoforms/Arrows/ArrowLeftDown.desktop (working copy)
+@@ -3,6 +3,7 @@
+ Type=Link
+ URL=.source/ArrowLeftDown.atf
+ Name=Arrow Left/Down
++Name[cy]=Saeth i'r Chwith/i Lawr
+ Name[da]=Pil til venstre/ned
+ Name[de]=Pfeil nach links/unten
+ Name[el]=Αριστερό/κάτω βέλος
+Index: kpresenter/autoforms/Arrows/ArrowRightUp.desktop
+===================================================================
+--- kpresenter/autoforms/Arrows/ArrowRightUp.desktop (revision 427945)
++++ kpresenter/autoforms/Arrows/ArrowRightUp.desktop (working copy)
+@@ -3,6 +3,7 @@
+ Type=Link
+ URL=.source/ArrowRightUp.atf
+ Name=Arrow Right/Up
++Name[cy]=Saeth i'r Chwith/i Fyny
+ Name[da]=Pil til højre/op
+ Name[de]=Pfeil nach rechts/oben
+ Name[el]=Δεξί/πάνω βέλος
+Index: kpresenter/autoforms/Arrows/ArrowUp.desktop
+===================================================================
+--- kpresenter/autoforms/Arrows/ArrowUp.desktop (revision 427945)
++++ kpresenter/autoforms/Arrows/ArrowUp.desktop (working copy)
+@@ -3,6 +3,7 @@
+ Type=Link
+ URL=.source/ArrowUp.atf
+ Name=Arrow Up
++Name[cy]=Saeth i Fyny
+ Name[da]=Pil op
+ Name[de]=Pfeil nach oben
+ Name[el]=Πάνω βέλος
+Index: kpresenter/autoforms/Arrows/ArrowLeft.desktop
+===================================================================
+--- kpresenter/autoforms/Arrows/ArrowLeft.desktop (revision 427945)
++++ kpresenter/autoforms/Arrows/ArrowLeft.desktop (working copy)
+@@ -3,6 +3,7 @@
+ Type=Link
+ URL=.source/ArrowLeft.atf
+ Name=Arrow Left
++Name[cy]=Saeth i'r Chwith
+ Name[da]=Pil til venstre
+ Name[de]=Pfeil nach links
+ Name[el]=Αριστερό βέλος
+Index: kpresenter/kpfreehandobject.cc
+===================================================================
+--- kpresenter/kpfreehandobject.cc (revision 427945)
++++ kpresenter/kpfreehandobject.cc (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 2001 Toshitaka Fujioka <fujioka@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -54,21 +55,26 @@
+ return dcop;
+ }
+
+-bool KPFreehandObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPFreehandObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- kdDebug()<<"bool KPFreehandObject::saveOasis( KoXmlWriter &xmlWriter ) not implemented\n";
+- xmlWriter.startElement( "draw:path" );
+- //FIXME !!!!!!!!!!!!!!!!!!!!!
+-//xmlWriter.addAttribute( "draw:style-name", KP2DObject::saveOasisBackgroundStyle( xmlWriter, mainStyles ) );
+-//call saveOasisStrokeElement( KoGenStyle &styleobjectauto );
+- if( !objectName.isEmpty())
+- xmlWriter.addAttribute( "draw:name", objectName );
+- //save path I don't know how to do.
+- //add "svg:viewBox" add "svg:d"
+- xmlWriter.endElement();
++ kdDebug()<<"bool KPFreehandObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) not implemented\n";
+ return true;
+ }
+
++const char * KPFreehandObject::getOasisElementName() const
++{
++ return "draw:path";
++}
++
++void KPFreehandObject::loadOasis( const QDomElement &element, KoOasisContext & context, KPRLoadingInfo* info )
++{
++ //todo
++ //we use draw:path
++
++ //load marker
++ loadOasisMarker( context );
++}
++
+ QDomDocumentFragment KPFreehandObject::save( QDomDocument& doc,double offset )
+ {
+ return KPPointObject::save( doc, offset );
+Index: kpresenter/kppieobject.cc
+===================================================================
+--- kpresenter/kppieobject.cc (revision 427945)
++++ kpresenter/kppieobject.cc (working copy)
+@@ -1,5 +1,6 @@
+ /* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -86,40 +87,38 @@
+ return fragment;
+ }
+
+-bool KPPieObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPPieObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- xmlWriter.startElement( ( ext.width() == ext.height() ) ? "draw:circle" : "draw:ellipse" );
+- xmlWriter.addAttribute( "draw:style-name", KP2DObject::saveOasisBackgroundStyle( xmlWriter, context.mainStyles(),indexObj ) );
+-
+- if( !objectName.isEmpty())
+- xmlWriter.addAttribute( "draw:name", objectName );
+ switch( pieType )
+ {
+- case PT_PIE:
+- xmlWriter.addAttribute( "draw:kind", "section" );
+- break;
+- case PT_CHORD:
+- xmlWriter.addAttribute( "draw:kind", "cut" );
+- break;
+- case PT_ARC:
+- xmlWriter.addAttribute( "draw:kind", "arc" );
+- break;
+- default:
+- kdDebug()<<" type of pie not supported\n";
++ case PT_PIE:
++ sc.xmlWriter.addAttribute( "draw:kind", "section" );
++ break;
++ case PT_CHORD:
++ sc.xmlWriter.addAttribute( "draw:kind", "cut" );
++ break;
++ case PT_ARC:
++ sc.xmlWriter.addAttribute( "draw:kind", "arc" );
++ break;
++ default:
++ kdDebug() << " type of pie not supported" << endl;
+ }
+- int startangle = 45;
+- if ( p_angle != 0.0 )
+- startangle = ( ( int )p_angle )/16;
+- xmlWriter.addAttribute( "draw:start-angle", startangle );
+- int endangle = endangle = ( ( int ) p_len/16 )+startangle;
+- xmlWriter.addAttribute( "draw:end-angle", endangle );
+
+- //we don't have a simple object
+- xmlWriter.endElement();
++ int startangle = ( (int)p_angle / 16 );
++ sc.xmlWriter.addAttribute( "draw:start-angle", startangle );
++
++ int endangle = ( (int) p_len / 16 ) + startangle;
++ sc.xmlWriter.addAttribute( "draw:end-angle", endangle );
++
+ return true;
+ }
+
++const char * KPPieObject::getOasisElementName() const
++{
++ return ext.width() == ext.height() ? "draw:circle" : "draw:ellipse";
++}
+
++
+ void KPPieObject::loadOasis(const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info)
+ {
+ kdDebug()<<"void KPPieObject::loadOasis(const QDomElement &element) ***************\n";
+Index: kpresenter/kpobject.h
+===================================================================
+--- kpresenter/kpobject.h (revision 427945)
++++ kpresenter/kpobject.h (working copy)
+@@ -136,9 +136,25 @@
+ virtual double load(const QDomElement &element);
+ virtual void loadOasis(const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info);
+
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext &context, int indexObj ) const =0;
++ struct KPOasisSaveContext
++ {
++ KPOasisSaveContext( KoXmlWriter &_xmlWriter, KoSavingContext &_context,
++ int &_indexObj, int &_partIndexObj, bool _onMaster )
++ : xmlWriter( _xmlWriter )
++ , context( _context )
++ , indexObj( _indexObj )
++ , partIndexObj( _partIndexObj )
++ , onMaster( _onMaster ) {};
++
++ KoXmlWriter &xmlWriter;
++ KoSavingContext &context;
++ int &indexObj;
++ int &partIndexObj;
++ bool onMaster;
++ };
+
+- void saveOasisPosObject( KoXmlWriter &xmlWriter, int indexObj ) const;
++ virtual bool saveOasisObject( KPOasisSaveContext &sc ) const;
++
+ //return true if we have a animation into object
+ bool saveOasisObjectStyleShowAnimation( KoXmlWriter &animation, int objectId );
+ bool saveOasisObjectStyleHideAnimation( KoXmlWriter &animation, int objectId );
+@@ -297,8 +313,17 @@
+
+ void saveOasisObjectProtectStyle( KoGenStyle &styleobjectauto ) const;
+ void saveOasisShadowElement( KoGenStyle &styleobjectauto ) const;
+- virtual void saveOasisPictureElement( KoGenStyle& /*styleobjectauto*/ ) const {};
+
++ QString getStyle( KPOasisSaveContext &sc ) const;
++ virtual void fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const;
++ /**
++ * Get the element name for saving the object
++ */
++ virtual const char * getOasisElementName() const = 0;
++ //virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const = 0;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++ virtual void saveOasisPosObject( KoXmlWriter &xmlWriter, int indexObj ) const;
++
+ float angle;
+ KoPoint orig;
+ KoSize ext;
+@@ -378,6 +403,19 @@
+
+ protected:
+ /**
++ * Helper method for saving draw:points. The svg:viewBox is also saved.
++ */
++ static bool saveOasisDrawPoints( const KoPointArray &points, KPOasisSaveContext &sc );
++
++ /**
++ * Helper method for loading draw:points. The svg:viewBox is taken into account.
++ */
++ bool loadOasisDrawPoints( KoPointArray &points, const QDomElement &element,
++ KoOasisContext & context, KPRLoadingInfo *info );
++
++ virtual void fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const;
++
++ /**
+ * @ref save() only saves if the pen is different from the default pen.
+ * The default pen can vary depending on the subclass of KPShadowObject
+ * (e.g. it's a black solidline for lines and rects, but it's NoPen
+@@ -445,14 +483,16 @@
+ virtual QDomDocumentFragment save( QDomDocument& doc, double offset );
+ virtual double load(const QDomElement &element);
+ virtual void loadOasis(const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info);
++ virtual void draw( QPainter *_painter, KoZoomHandler*_zoomHandler,
++ int pageNum, SelectionMode selectionMode, bool drawContour = FALSE );
+
+ virtual void flip(bool horizontal );
+
+ protected:
+ QString saveOasisGradientStyle( KoGenStyles& mainStyles ) const;
+- QString saveOasisBackgroundStyle( KoXmlWriter &xmlWriter, KoGenStyles& mainStyles, int indexObj ) const;
+
+- virtual void saveOasisMarginElement( KoGenStyle& /*styleobjectauto*/ ) const { /* nothing just used into kptextobject*/};
++ virtual void fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const;
++ void saveOasisBackgroundElement( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const;
+
+ KPrBrush m_brush;
+ KPGradient *gradient;
+Index: kpresenter/kptextobject.h
+===================================================================
+--- kpresenter/kptextobject.h (revision 427945)
++++ kpresenter/kptextobject.h (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -81,7 +82,6 @@
+ virtual QDomDocumentFragment save( QDomDocument& doc, double offset );
+ virtual double load(const QDomElement &element);
+ virtual void loadOasis(const QDomElement &element, KoOasisContext& context, KPRLoadingInfo *info);
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
+ virtual void saveOasisMarginElement( KoGenStyle &styleobjectauto ) const;
+
+ virtual void paint( QPainter *_painter, KoZoomHandler*_zoomHandler,
+@@ -180,9 +180,14 @@
+ void slotAfterFormatting( int, KoTextParag*, bool* );
+ void slotParagraphDeleted(KoTextParag*_parag);
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++
+ virtual QDomElement saveKTextObject( QDomDocument& doc );
+ QDomElement saveHelper(const QString &tmpText,KoTextFormat*lastFormat ,QDomDocument &doc);
+
++ virtual void fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const;
++
+ virtual void loadKTextObject( const QDomElement &e );
+ void drawText( QPainter* _painter, KoZoomHandler* zoomHandler, bool onlyChanged, KoTextCursor* cursor, bool resetChanged );
+ void drawParags( QPainter *p, KoZoomHandler* zoomHandler, const QColorGroup& cg, int from, int to );
+Index: kpresenter/kppolygonobject.h
+===================================================================
+--- kpresenter/kppolygonobject.h (revision 427945)
++++ kpresenter/kppolygonobject.h (working copy)
+@@ -59,7 +59,6 @@
+ int getSharpnessValue() const { return sharpnessValue; }
+
+ virtual QDomDocumentFragment save( QDomDocument& doc, double offset );
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
+
+ virtual double load( const QDomElement &element );
+ virtual void loadOasis( const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info );
+@@ -69,6 +68,9 @@
+ virtual KoPoint getRealOrig() const;
+
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++
+ virtual void paint( QPainter *_painter,KoZoomHandler*_zoomHandler,
+ int /* pageNum */, bool drawingShadow, bool drawContour );
+
+Index: kpresenter/kpgroupobject.cc
+===================================================================
+--- kpresenter/kpgroupobject.cc (revision 427945)
++++ kpresenter/kpgroupobject.cc (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -132,24 +133,23 @@
+ }
+
+
+-bool KPGroupObject::saveOasis(KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj) const
++bool KPGroupObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- xmlWriter.startElement( "draw:g" );
+-
+ QPtrListIterator<KPObject> it( objects );
+ for ( ; it.current() ; ++it )
+ {
+-#if 0
+- if ( it.current()->getType() == OT_PART )
+- continue;
+-#endif
+- it.current()->saveOasis( xmlWriter, context, indexObj );
++ //TODO what to do with parts?
++ it.current()->saveOasisObject( sc );
+ }
+- xmlWriter.endElement();
+ return true;
+ }
+
++const char * KPGroupObject::getOasisElementName() const
++{
++ return "draw:g";
++}
+
++
+ void KPGroupObject::loadOasisGroupObject( KPresenterDoc *_doc, KPrPage * newpage, QDomNode &element, KoOasisContext & context, KPRLoadingInfo *info)
+ {
+ //KPObject::loadOasis( element, context, info );
+Index: kpresenter/kprectobject.cc
+===================================================================
+--- kpresenter/kprectobject.cc (revision 427945)
++++ kpresenter/kprectobject.cc (working copy)
+@@ -76,18 +76,19 @@
+ return fragment;
+ }
+
+-bool KPRectObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPRectObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- xmlWriter.startElement( "draw:rect" );
+- xmlWriter.addAttribute( "draw:style-name", KP2DObject::saveOasisBackgroundStyle( xmlWriter, context.mainStyles(), indexObj ) );
+-
+- if( !objectName.isEmpty())
+- xmlWriter.addAttribute( "draw:name", objectName );
+- xmlWriter.endElement();
++ // TODO corner-radius
+ return true;
+ }
+
+
++const char * KPRectObject::getOasisElementName() const
++{
++ return "draw:rect";
++}
++
++
+ void KPRectObject::loadOasis(const QDomElement &element, KoOasisContext&context, KPRLoadingInfo *info)
+ {
+ KP2DObject::loadOasis(element, context, info);
+Index: kpresenter/kpellipseobject.cc
+===================================================================
+--- kpresenter/kpellipseobject.cc (revision 427945)
++++ kpresenter/kpellipseobject.cc (working copy)
+@@ -116,14 +116,14 @@
+ return size;
+ }
+
+-bool KPEllipseObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPEllipseObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- xmlWriter.startElement( ( ext.width() == ext.height() ) ? "draw:circle" : "draw:ellipse" );
+- xmlWriter.addAttribute( "draw:style-name", KP2DObject::saveOasisBackgroundStyle( xmlWriter, context.mainStyles(), indexObj ) );
+-
+- if( !objectName.isEmpty())
+- xmlWriter.addAttribute( "draw:name", objectName );
+- xmlWriter.endElement();
++ // nothing to do
+ return true;
+ }
+
++const char * KPEllipseObject::getOasisElementName() const
++{
++ return ext.width() == ext.height() ? "draw:circle" : "draw:ellipse";
++}
++
+Index: kpresenter/kppolylineobject.h
+===================================================================
+--- kpresenter/kppolylineobject.h (revision 427945)
++++ kpresenter/kppolylineobject.h (working copy)
+@@ -47,8 +47,10 @@
+ virtual QDomDocumentFragment save( QDomDocument& doc, double offset );
+ virtual double load( const QDomElement &element );
+ virtual void loadOasis(const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info);
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
+
++protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
+ };
+
+ #endif
+Index: kpresenter/kpclosedlineobject.cc
+===================================================================
+--- kpresenter/kpclosedlineobject.cc (revision 427945)
++++ kpresenter/kpclosedlineobject.cc (working copy)
+@@ -90,36 +90,18 @@
+ return fragment;
+ }
+
+-bool KPClosedLineObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPClosedLineObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- xmlWriter.startElement( "draw:polygon" );
+- xmlWriter.addAttribute( "draw:style-name", KP2DObject::saveOasisBackgroundStyle( xmlWriter, context.mainStyles(), indexObj ) );
+-
+- QString listOfPoint;
+- int maxX=0;
+- int maxY=0;
+- KoPointArray::ConstIterator it;
+- for ( it = points.begin(); it != points.end(); ++it ) {
+- int tmpX = 0;
+- int tmpY = 0;
+- tmpX = ( int ) ( KoUnit::toMM( ( *it ).x() )*100 );
+- tmpY = ( int ) ( KoUnit::toMM( ( *it ).y() )*100 );
+- if ( !listOfPoint.isEmpty() )
+- listOfPoint += QString( " %1,%2" ).arg( tmpX ).arg( tmpY );
+- else
+- listOfPoint = QString( "%1,%2" ).arg( tmpX ).arg( tmpY );
+- maxX = QMAX( maxX, tmpX );
+- maxY = QMAX( maxY, tmpY );
+- }
+- xmlWriter.addAttribute("draw:points", listOfPoint );
+- xmlWriter.addAttribute("svg:viewBox", QString( "0 0 %1 %2" ).arg( maxX ).arg( maxY ) );
+-
+- if( !objectName.isEmpty())
+- xmlWriter.addAttribute( "draw:name", objectName );
+- xmlWriter.endElement();
++ KPShadowObject::saveOasisDrawPoints( points, sc );
+ return true;
+ }
+
++const char * KPClosedLineObject::getOasisElementName() const
++{
++ return "draw:polygon";
++}
++
++
+ double KPClosedLineObject::load( const QDomElement &element )
+ {
+ double offset = KP2DObject::load( element );
+@@ -269,26 +251,7 @@
+ {
+ kdDebug()<<"void KPClosedLineObject::loadOasis( const QDomElement &element )***********\n";
+ KP2DObject::loadOasis( element,context, info );
+- //load point.
+- QStringList ptList = QStringList::split(' ', element.attributeNS( KoXmlNS::draw, "points", QString::null));
+-
+- QString pt_x, pt_y;
+- double tmp_x, tmp_y;
+- unsigned int index = 0;
+- for (QStringList::Iterator it = ptList.begin(); it != ptList.end(); ++it)
+- {
+- tmp_x = (*it).section(',',0,0).toInt() / 100;
+- tmp_y = (*it).section(',',1,1).toInt() / 100;
+-
+- pt_x.setNum(tmp_x);
+- pt_x+="mm";
+-
+- pt_y.setNum(tmp_y);
+- pt_y+="mm";
+-
+- points.putPoints( index, 1, KoUnit::parseValue(pt_x),KoUnit::parseValue(pt_y) );
+- ++index;
+- }
++ KPShadowObject::loadOasisDrawPoints( points, element, context, info );
+ }
+
+ KoSize KPClosedLineObject::getRealSize() const {
+Index: kpresenter/kpclosedlineobject.h
+===================================================================
+--- kpresenter/kpclosedlineobject.h (revision 427945)
++++ kpresenter/kpclosedlineobject.h (working copy)
+@@ -53,13 +53,14 @@
+ virtual QDomDocumentFragment save( QDomDocument& doc, double offset );
+ virtual double load( const QDomElement &element );
+ virtual void loadOasis( const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info );
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
+
+ virtual void flip(bool horizontal );
+ virtual KoSize getRealSize() const;
+ virtual KoPoint getRealOrig() const;
+
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
+ virtual void paint( QPainter *_painter,KoZoomHandler*_zoomHandler,
+ int /* pageNum */, bool drawingShadow, bool drawContour );
+
+Index: kpresenter/kpresenter_doc.cc
+===================================================================
+--- kpresenter/kpresenter_doc.cc (revision 427945)
++++ kpresenter/kpresenter_doc.cc (working copy)
+@@ -1770,33 +1770,35 @@
+ else
+ newpage->appendObject(kppixmapobject);
+ }
+-
+- QDomNode object = KoDom::namedItemNS( o, KoXmlNS::draw, "object" );
+- kdDebug()<<" object:"<<object.isNull()<<endl;
+- if ( !object.isNull() )
+- {
+- fillStyleStack( o, context );
+- KPresenterChild *ch = new KPresenterChild( this );
+- QRect r;
+- KPPartObject *kppartobject = new KPPartObject( ch );
+- kppartobject->loadOasis( o, context, m_loadingInfo );
+- r = ch->geometry();
+- if ( groupObject )
+- groupObject->addObjects( kppartobject );
+- else
+- newpage->appendObject(kppartobject);
+- insertChild( ch );
+- kppartobject->setOrig( r.x(), r.y() );
+- kppartobject->setSize( r.width(), r.height() );
+- }
+ else
+ {
+- KPTextObject *kptextobject = new KPTextObject( this );
+- kptextobject->loadOasis(o, context, m_loadingInfo);
+- if ( groupObject )
+- groupObject->addObjects( kptextobject );
++ QDomNode object = KoDom::namedItemNS( o, KoXmlNS::draw, "object" );
++ kdDebug()<<" object:"<<object.isNull()<<endl;
++ if ( !object.isNull() )
++ {
++ fillStyleStack( o, context );
++ KPresenterChild *ch = new KPresenterChild( this );
++ QRect r;
++ KPPartObject *kppartobject = new KPPartObject( ch );
++ kppartobject->loadOasis( o, context, m_loadingInfo );
++ r = ch->geometry();
++ if ( groupObject )
++ groupObject->addObjects( kppartobject );
++ else
++ newpage->appendObject(kppartobject);
++ insertChild( ch );
++ kppartobject->setOrig( r.x(), r.y() );
++ kppartobject->setSize( r.width(), r.height() );
++ }
+ else
+- newpage->appendObject(kptextobject);
++ {
++ KPTextObject *kptextobject = new KPTextObject( this );
++ kptextobject->loadOasis(o, context, m_loadingInfo);
++ if ( groupObject )
++ groupObject->addObjects( kptextobject );
++ else
++ newpage->appendObject(kptextobject);
++ }
+ }
+ }
+ else if ( name == "rect" && isDrawNS) // rectangle
+@@ -1836,7 +1838,10 @@
+ fillStyleStack( o, context );
+ KPLineObject *kplineobject = new KPLineObject();
+ kplineobject->loadOasis(o, context, m_loadingInfo);
+- newpage->appendObject(kplineobject);
++ if ( groupObject )
++ groupObject->addObjects( kplineobject );
++ else
++ newpage->appendObject( kplineobject );
+ }
+ else if (name=="polyline" && isDrawNS) { // polyline
+ fillStyleStack( o, context );
+Index: kpresenter/kppixmapobject.cc
+===================================================================
+--- kpresenter/kppixmapobject.cc (revision 427945)
++++ kpresenter/kppixmapobject.cc (working copy)
+@@ -2,6 +2,7 @@
+
+ /* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -101,7 +102,7 @@
+ return QString::number( val )+"%";
+ }
+
+-void KPPixmapObject::saveOasisPictureElement( KoGenStyle &styleobjectauto )
++void KPPixmapObject::saveOasisPictureElement( KoGenStyle &styleobjectauto ) const
+ {
+
+ if ( bright != 0 )
+@@ -201,26 +202,24 @@
+ }
+ }
+
+-
+-bool KPPixmapObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPPixmapObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- xmlWriter.startElement( "draw:frame" );
+- xmlWriter.addAttribute( "draw:style-name", KP2DObject::saveOasisBackgroundStyle( xmlWriter, context.mainStyles(),indexObj ) );
+- if( !objectName.isEmpty())
+- xmlWriter.addAttribute( "draw:name", objectName );
++ sc.xmlWriter.startElement( "draw:image" );
++ sc.xmlWriter.addAttribute( "xlink:type", "simple" );
++ sc.xmlWriter.addAttribute( "xlink:show", "embed" );
++ sc.xmlWriter.addAttribute( "xlink:actuate", "onLoad" );
++ sc.xmlWriter.addAttribute( "xlink:href", imageCollection->getOasisFileName( image ) );
++ sc.xmlWriter.endElement();
+
+- xmlWriter.startElement( "draw:image" );
+- xmlWriter.addAttribute( "xlink:type", "simple" );
+- xmlWriter.addAttribute( "xlink:show", "embed" );
+- xmlWriter.addAttribute( "xlink:actuate", "onLoad" );
+- xmlWriter.addAttribute( "xlink:href", imageCollection->getOasisFileName(image) );
+- xmlWriter.endElement();
+-
+- xmlWriter.endElement();
+ return true;
+ }
+
++const char * KPPixmapObject::getOasisElementName() const
++{
++ return "draw:frame";
++}
+
++
+ // Deprecated, same as KPPixmapObject::loadPicture
+ void KPPixmapObject::loadImage( const QString & fileName )
+ {
+@@ -339,6 +338,12 @@
+
+ }
+
++void KPPixmapObject::fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const
++{
++ KP2DObject::fillStyle( styleObjectAuto, mainStyles );
++ saveOasisPictureElement( styleObjectAuto );
++}
++
+ void KPPixmapObject::loadOasis(const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info)
+ {
+ //load it into kpresenter_doc
+Index: kpresenter/kpautoformobject.h
+===================================================================
+--- kpresenter/kpautoformobject.h (revision 427945)
++++ kpresenter/kpautoformobject.h (working copy)
+@@ -63,10 +63,12 @@
+ { return lineEnd; }
+
+ virtual QDomDocumentFragment save( QDomDocument& doc,double offset );
+- virtual bool saveOasis( KoXmlWriter & xmlWriter, KoSavingContext& context, int indexObj ) const;
+
+ virtual double load(const QDomElement &element);
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++
+ virtual void paint( QPainter *_painter, KoZoomHandler *_zoomHandler,
+ int /* pageNum */, bool drawingShadow, bool drawContour = FALSE );
+
+Index: kpresenter/kppartobject.cc
+===================================================================
+--- kpresenter/kppartobject.cc (revision 427945)
++++ kpresenter/kppartobject.cc (working copy)
+@@ -63,39 +63,25 @@
+ zh->zoomItY( getOrig().y() + getSize().height() / 2 ) ) );
+ }
+
+-bool KPPartObject::saveOasisPart( KoXmlWriter &xmlWriter, KoStore *store, KoSavingContext& context, int indexObj, int partIndexObj, KoXmlWriter* manifestWriter ) const
++bool KPPartObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- kdDebug() << "KPPartObject::saveOasisPart " << partIndexObj << endl;
+- xmlWriter.startElement( "draw:frame" );
+- // saveOasisBackgroundStyle also saves draw:id, x,y,width and height....
+- xmlWriter.addAttribute( "draw:style-name", KP2DObject::saveOasisBackgroundStyle( xmlWriter, context.mainStyles(),indexObj ) );
+- if( !objectName.isEmpty())
+- xmlWriter.addAttribute( "draw:name", objectName );
++ kdDebug() << "KPPartObject::saveOasisPart " << sc.partIndexObj << endl;
+
+-#if 0 // geometry was already saved, this isn't needed
+- // geometry is no zoom value !
+- QRect _rect = child->geometry();
+- KoZoomHandler* zh = child->parent()->zoomHandler();
+- double tmpX = zh->unzoomItX( _rect.x() );
+- double tmpY = zh->unzoomItY( _rect.y() );
+- double tmpWidth = zh->unzoomItX( _rect.width() );
+- double tmpHeight = zh->unzoomItY( _rect.height() );
+- //child->setGeometry( QRect( tmpX, tmpY, tmpWidth, tmpHeight ) ); // ## why?
+- xmlWriter.addAttributePt( "svg:width", tmpWidth );
+- xmlWriter.addAttributePt( "svg:height", tmpHeight );
+- xmlWriter.addAttributePt( "svg:x", tmpX );
+- xmlWriter.addAttributePt( "svg:y", tmpY );
+-#endif
++ sc.xmlWriter.startElement( "draw:object" );
++ const QString name = QString( "Object_%1" ).arg( sc.partIndexObj + 1 );
++ ++sc.partIndexObj;
++ child->saveOasisAttributes( sc.xmlWriter, name );
+
+- xmlWriter.startElement( "draw:object" );
+- const QString name = QString( "Object_%1" ).arg( partIndexObj+1 );
+- child->saveOasisAttributes( xmlWriter, name );
+-
+- xmlWriter.endElement(); // draw:object
+- xmlWriter.endElement(); // draw:frame
++ sc.xmlWriter.endElement();
+ return true;
+ }
+
++const char * KPPartObject::getOasisElementName() const
++{
++ return "draw:frame";
++}
++
++
+ void KPPartObject::loadOasis(const QDomElement &element, KoOasisContext&context, KPRLoadingInfo *info)
+ {
+ kdDebug()<<"void KPPartObject::loadOasis(const QDomElement &element)******************\n";
+Index: kpresenter/kprpage.cc
+===================================================================
+--- kpresenter/kprpage.cc (revision 427945)
++++ kpresenter/kprpage.cc (working copy)
+@@ -131,6 +131,8 @@
+
+ void KPrPage::saveOasisObject( KoStore *store, KoXmlWriter &xmlWriter, KoSavingContext& context, int & indexObj, int &partIndexObj, KoXmlWriter* manifestWriter, bool stickyObj ) const
+ {
++ KPObject::KPOasisSaveContext sc( xmlWriter, context, indexObj, partIndexObj, isMasterPage() );
++
+ KTempFile animationTmpFile;
+ animationTmpFile.setAutoDelete( true );
+ QFile* tmpFile = animationTmpFile.file();
+@@ -139,17 +141,10 @@
+ QPtrListIterator<KPObject> it( m_objectList );
+ for ( ; it.current() ; ++it )
+ {
+- if ( it.current()->getType() == OT_PART )
+- {
+- static_cast<KPPartObject*>( it.current() )->saveOasisPart( xmlWriter, store, context, indexObj, partIndexObj, manifestWriter);
+- ++partIndexObj;
+- }
+- else
+- {
+- if ( it.current()== m_doc->header() || it.current()== m_doc->footer())
+- continue;
+- it.current()->saveOasis( xmlWriter, context, indexObj );
+- }
++ if ( it.current()== m_doc->header() || it.current()== m_doc->footer())
++ continue;
++ it.current()->saveOasisObject( sc );
++
+ if ( !stickyObj && it.current()->haveAnimation() )
+ {
+ kdDebug()<<" it.current()->haveAnimation() \n";
+Index: kpresenter/kptextobject.cc
+===================================================================
+--- kpresenter/kptextobject.cc (revision 427945)
++++ kpresenter/kptextobject.cc (working copy)
+@@ -212,22 +212,19 @@
+ return fragment;
+ }
+
+-bool KPTextObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPTextObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- xmlWriter.startElement( "draw:frame" );
+- // #### This should use KoGenStyle to share the style
+- xmlWriter.addAttribute( "draw:style-name", KP2DObject::saveOasisBackgroundStyle( xmlWriter, context.mainStyles(), indexObj ) );
+- if( !objectName.isEmpty())
+- xmlWriter.addAttribute( "draw:name", objectName );
+-
+- xmlWriter.startElement( "draw:text-box" );
+- m_textobj->saveOasisContent( xmlWriter, context );
+- xmlWriter.endElement();
+-
+- xmlWriter.endElement();
++ sc.xmlWriter.startElement( "draw:text-box" );
++ m_textobj->saveOasisContent( sc.xmlWriter, sc.context );
++ sc.xmlWriter.endElement();
+ return true;
+ }
+
++const char * KPTextObject::getOasisElementName() const
++{
++ return "draw:frame";
++}
++
+ void KPTextObject::saveOasisMarginElement( KoGenStyle &styleobjectauto ) const
+ {
+ kdDebug()<<"void KPTextObject::saveOasisMarginElement( KoGenStyle &styleobjectauto )\n";
+@@ -673,6 +670,12 @@
+ return element;
+ }
+
++void KPTextObject::fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const
++{
++ KP2DObject::fillStyle( styleObjectAuto, mainStyles );
++ saveOasisMarginElement( styleObjectAuto );
++}
++
+ void KPTextObject::loadKTextObject( const QDomElement &elem )
+ {
+ QDomElement e = elem.firstChild().toElement();
+Index: kpresenter/kplineobject.cc
+===================================================================
+--- kpresenter/kplineobject.cc (revision 427945)
++++ kpresenter/kplineobject.cc (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -64,21 +65,23 @@
+ }
+
+
+-QString KPLineObject::saveOasisStrokeElement( KoGenStyles& mainStyles ) const
++void KPLineObject::fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const
+ {
+- KoGenStyle styleobjectauto( KoGenStyle::STYLE_GRAPHICAUTO, "graphic" );
+- saveOasisMarkerElement( mainStyles, styleobjectauto );
+- KPShadowObject::saveOasisStrokeElement( mainStyles, styleobjectauto );
+- saveOasisShadowElement( styleobjectauto );
+- saveOasisObjectProtectStyle( styleobjectauto );
+- return mainStyles.lookup( styleobjectauto, "gr" );
++ KPShadowObject::fillStyle( styleObjectAuto, mainStyles );
++ saveOasisMarkerElement( mainStyles, styleObjectAuto );
+ }
+
+-bool KPLineObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++
++bool KPLineObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- xmlWriter.startElement( "draw:line" );
+- xmlWriter.addAttribute( "draw:style-name", saveOasisStrokeElement( context.mainStyles() ) );
++ // nothing to do
++ return true;
++}
+
++void KPLineObject::saveOasisPosObject( KoXmlWriter &xmlWriter, int indexObj ) const
++{
++ xmlWriter.addAttribute( "draw:id", "object" + QString::number( indexObj ) );
++
+ float x1 = orig.x();
+ float y1 = orig.y();
+ float x2 = x1 + ext.width();
+@@ -102,17 +105,24 @@
+ break;
+ }
+
++ //save all into pt
++ xmlWriter.addAttributePt( "svg:x1", x1 );
+ xmlWriter.addAttributePt( "svg:y1", y1 );
++ xmlWriter.addAttributePt( "svg:x2", x2 );
+ xmlWriter.addAttributePt( "svg:y2", y2 );
+- xmlWriter.addAttributePt( "svg:x1", x1 );
+- xmlWriter.addAttributePt( "svg:x2", x2 );
+
+- if( !objectName.isEmpty())
+- xmlWriter.addAttribute( "draw:name", objectName );
+- xmlWriter.endElement();
+- return true;
++ if ( kAbs( angle ) > 1E-6 )
++ {
++ double value = -1 * ( ( double )angle* M_PI )/180.0;
++ QString str=QString( "rotate (%1)" ).arg( value );
++ xmlWriter.addAttribute( "draw:transform", str );
++ }
+ }
+
++const char * KPLineObject::getOasisElementName() const
++{
++ return "draw:line";
++}
+
+ QDomDocumentFragment KPLineObject::save( QDomDocument& doc, double offset )
+ {
+@@ -163,10 +173,10 @@
+
+ kdDebug()<<"KPLineObject::loadOasis(const QDomElement &element) : real position x :"<<orig.x()<<" y "<<orig.y()<< " width :"<<ext.width()<<" height :"<<ext.height()<<endl;
+
+- QString attr = (x1 < x2) ? "marker-start" : "marker-end";
++ QString attr = (x1 <= x2) ? "marker-start" : "marker-end";
+ loadOasisMarkerElement( context, attr, lineBegin );
+
+- attr = (x1 < x2) ? "marker-end" : "marker-start";
++ attr = (x1 <= x2) ? "marker-end" : "marker-start";
+ loadOasisMarkerElement( context, attr, lineEnd );
+ }
+
+Index: kpresenter/kppolylineobject.cc
+===================================================================
+--- kpresenter/kppolylineobject.cc (revision 427945)
++++ kpresenter/kppolylineobject.cc (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 2001 Toshitaka Fujioka <fujioka@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -29,6 +30,7 @@
+ #include <kdebug.h>
+ #include <kozoomhandler.h>
+ #include <kooasiscontext.h>
++#include <koUnit.h>
+
+ #include <math.h>
+ using namespace std;
+@@ -68,22 +70,22 @@
+ return KPPointObject::load( element );
+ }
+
+-bool KPPolylineObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPPolylineObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- xmlWriter.startElement( "draw:polyline" );
+- saveOasisPosObject(xmlWriter, indexObj );
+- xmlWriter.addAttribute( "draw:style-name", saveOasisStrokeElement( context.mainStyles() ) );
+-
+- KPPointObject::saveOasis( xmlWriter, context );
+- if( !objectName.isEmpty())
+- xmlWriter.addAttribute( "draw:name", objectName );
+- xmlWriter.endElement();
++ KPShadowObject::saveOasisDrawPoints( points, sc );
+ return true;
+ }
+
++const char * KPPolylineObject::getOasisElementName() const
++{
++ return "draw:polyline";
++}
+
++
+ void KPPolylineObject::loadOasis(const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info)
+ {
+ kdDebug()<<"void KPPolylineObject::loadOasis(const QDomElement &element)************\n";
+- KPPointObject::loadOasis( element,context, info );
++ KPShadowObject::loadOasis( element, context, info );
++ KPShadowObject::loadOasisDrawPoints( points, element, context, info );
++ loadOasisMarker( context );
+ }
+Index: kpresenter/kpquadricbeziercurveobject.cc
+===================================================================
+--- kpresenter/kpquadricbeziercurveobject.cc (revision 427945)
++++ kpresenter/kpquadricbeziercurveobject.cc (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 2001 Toshitaka Fujioka <fujioka@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -60,16 +61,18 @@
+ return *this;
+ }
+
+-bool KPQuadricBezierCurveObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPQuadricBezierCurveObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- kdDebug()<<"bool KPQuadricBezierCurveObject::saveOasis( KoXmlWriter &xmlWriter ) not implemented\n";
+- //todo
+- // call saveOasisShadowElement( styleobjectauto );
+- // call saveOasisStrokeElement( KoGenStyle &styleobjectauto );
+- //call xmlWriter.addAttribute( "draw:style-name", style );
++ kdDebug()<<"bool KPQuadricBezierCurveObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) not implemented\n";
+ return true;
+ }
+
++const char * KPQuadricBezierCurveObject::getOasisElementName() const
++{
++ // use draw:path ?
++ return "draw:custom-shape";
++}
++
+ void KPQuadricBezierCurveObject::loadOasis( const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info )
+ {
+ //todo
+Index: kspread/dialogs/kspread_dlg_database.cc
+===================================================================
+--- kspread/dialogs/kspread_dlg_database.cc (revision 427945)
++++ kspread/dialogs/kspread_dlg_database.cc (working copy)
+@@ -600,8 +600,8 @@
+ // An update command must also be followed by a space, or it would be parsed
+ // as an identifier.
+ // For sanity, also check that there is a SELECT
+- QRegExp couldModifyDB( "(^|[( \s])(UPDATE|DELETE|INSERT|CREATE) ", false /* cs */ );
+- QRegExp couldQueryDB( "(^|[( \s])(SELECT) ", false /* cs */ );
++ QRegExp couldModifyDB( "(^|[( \\s])(UPDATE|DELETE|INSERT|CREATE) ", false /* cs */ );
++ QRegExp couldQueryDB( "(^|[( \\s])(SELECT) ", false /* cs */ );
+
+ if (couldModifyDB.search( queryStr ) != -1 || couldQueryDB.search ( queryStr ) == -1 )
+ {
+Index: kspread/CHANGES
+===================================================================
+--- kspread/CHANGES (revision 427945)
++++ kspread/CHANGES (working copy)
+@@ -1,5 +1,9 @@
++since 1.4.0
++===========
++- Fix potential crash when rendering obscured cells (#108659)
++
+ since 1.4-beta1
+-=============================
++===============
+ - Use General/Blank Worksheet as default template.
+ - KSpread crashes on exit if there is a chart in the sheet (#101915).
+ - The data editor is disabled for charts which has been loaded.
+Index: kspread/kspreadpart.desktop
+===================================================================
+--- kspread/kspreadpart.desktop (revision 427945)
++++ kspread/kspreadpart.desktop (working copy)
+@@ -19,6 +19,7 @@
+ Name[pt]=Componente de Folha de Cálculo do KOffice
+ Name[pt_BR]=Componente de Planilha de Cálculo do KOffice
+ Name[ru]=Компонент электронных таблиц KOffice
++Name[sl]=Komponenta za preglednice za KOffice
+ Name[sr]=KOffice-ова компонента за унакрсне табеле
+ Name[sr@Latn]=KOffice-ova komponenta za unakrsne tabele
+ Name[sv]=Koffice-kalkylarkskomponent
+Index: kspread/kspread_cell.cc
+===================================================================
+--- kspread/kspread_cell.cc (revision 427945)
++++ kspread/kspread_cell.cc (working copy)
+@@ -825,7 +825,12 @@
+ if (!d->hasExtra())
+ return (KSpreadCell *) this;
+
+- return d->extra()->obscuringCells.first();
++ else if (d->extra()->obscuringCells.isEmpty())
++ return (KSpreadCell *) this;
++
++ else
++ return d->extra()->obscuringCells.first();
++
+ #if 0
+ QValueList<KSpreadCell*>::const_iterator it = d->extra()->obscuringCells.begin();
+ QValueList<KSpreadCell*>::const_iterator end = d->extra()->obscuringCells.end();
+@@ -2489,6 +2494,7 @@
+ // If the cell towards the top is part of a merged cell, get
+ // the pointer to the master cell.
+ cellUp = cellUp->ultimateObscuringCell();
++
+ topPen = cellUp->effBottomBorderPen( cellUp->column(),
+ cellUp->row() );
+
+Index: templates/SpreadSheet.desktop
+===================================================================
+--- templates/SpreadSheet.desktop (revision 427945)
++++ templates/SpreadSheet.desktop (working copy)
+@@ -23,7 +23,7 @@
+ Name[pl]=Arkusz kalkulacyjny...
+ Name[pt]=Documento de Folha de Cálculo...
+ Name[pt_BR]=Planilha de Cálculo...
+-Name[ru]=Электронная таблица...
++Name[ru]=Электронную таблицу...
+ Name[se]=Rehkenastinárka ...
+ Name[sl]=Preglednični dokument ...
+ Name[sr]=Документ са прорачунским листовима...
+@@ -54,6 +54,7 @@
+ Comment[fa]=KSpread سند جدید:
+ Comment[fi]=Uusi KSpread-asiakirja:
+ Comment[fr]=Nouveau document KSpread :
++Comment[ga]=Cáipéis nua KSpread:
+ Comment[he]=מסמך חדש של KSpread
+ Comment[hr]=Novi KSpread dokument:
+ Comment[hu]=Új KSpread-dokumentum:
+@@ -67,7 +68,7 @@
+ Comment[pl]=Nowy arkusz KSpread:
+ Comment[pt]=Novo documento do KSpread:
+ Comment[pt_BR]=Novo documento KSpread:
+-Comment[ru]=Новый документ KSpread:
++Comment[ru]=Новая электронная таблица KSpread:
+ Comment[se]=Ođđa KSpread-dokumeanta:
+ Comment[sk]=Nový dokument KSpread:
+ Comment[sl]=Nov dokument za KSpread
+Index: templates/Illustration.desktop
+===================================================================
+--- templates/Illustration.desktop (revision 427945)
++++ templates/Illustration.desktop (working copy)
+@@ -22,7 +22,7 @@
+ Name[pl]=Rysunek...
+ Name[pt]=Documento de Ilustração....
+ Name[pt_BR]=Documento de Ilustração...
+-Name[ru]=Иллюстрированный документ...
++Name[ru]=Векторный рисунок...
+ Name[se]=Illustrašuvdna ...
+ Name[sl]=Ilustracijski dokument ...
+ Name[sr]=Илустрациони документ...
+@@ -49,6 +49,7 @@
+ Comment[fa]=Karbon14 سند جدید:
+ Comment[fi]=Uusi Karbon14-asiakirja:
+ Comment[fr]=Nouveau document Karbon14 :
++Comment[ga]=Cáipéis nua Karbon14:
+ Comment[he]=מסמך Karbon14 חדש
+ Comment[hr]=Novi Karbon14 dokument:
+ Comment[hu]=Új Karbon14-dokumentum:
+@@ -59,7 +60,7 @@
+ Comment[pl]=Nowy dokument Karbon14:
+ Comment[pt]=Novo documento do Karbon14:
+ Comment[pt_BR]=Novo documento do Karbon14
+-Comment[ru]=Новый документ Karbon14:
++Comment[ru]=Новый рисунок Karbon14:
+ Comment[se]=Ođđa Karbon14-dokumeanta:
+ Comment[sk]=Nový dokument Karbon14:
+ Comment[sl]=Nov dokument za Karbon14
+Index: templates/Presentation.desktop
+===================================================================
+--- templates/Presentation.desktop (revision 427945)
++++ templates/Presentation.desktop (working copy)
+@@ -23,7 +23,7 @@
+ Name[pl]=Prezentacja...
+ Name[pt]=Documento de Apresentação...
+ Name[pt_BR]=Apresentação de Slides...
+-Name[ru]=Презентация...
++Name[ru]=Презентацию...
+ Name[se]=Presentašuvdna ...
+ Name[sl]=Predstavitveni dokument ...
+ Name[sr]=Презентациони документ...
+@@ -67,7 +67,7 @@
+ Comment[pl]=Nowa prezentacja KPresenter:
+ Comment[pt]=Novo documento do KPresenter:
+ Comment[pt_BR]=Novo documento de apresentação KPresenter:
+-Comment[ru]=Новый документ KPresenter:
++Comment[ru]=Новая презентация KPresenter:
+ Comment[se]=Ođđa KPresenter-presentašuvdna:
+ Comment[sk]=Nový dokument KPresenter:
+ Comment[sl]=Nov predstavitveni dokument za KPresenter
+Index: templates/TextDocument.desktop
+===================================================================
+--- templates/TextDocument.desktop (revision 427945)
++++ templates/TextDocument.desktop (working copy)
+@@ -13,6 +13,7 @@
+ Name[et]=Tekstidokument...
+ Name[fi]=Tekstiasiakirja...
+ Name[fr]=Document texte...
++Name[ga]=Cáipéis Téacs...
+ Name[he]=מסמך טקסט...
+ Name[hr]=Tekst datoteka...
+ Name[hu]=KWord-dokumentum...
+@@ -24,7 +25,7 @@
+ Name[pl]=Dokument tekstowy...
+ Name[pt]=Documento de Texto...
+ Name[pt_BR]=Documento de Texto...
+-Name[ru]=Текстовый документ...
++Name[ru]=Документ...
+ Name[se]=Teakstadokumeanta ...
+ Name[sl]=Besedilni dokument ...
+ Name[sr]=Текстуални документ...
+@@ -55,6 +56,7 @@
+ Comment[fa]=KWord سند جدید برای:
+ Comment[fi]=Uusi KWord-asiakirja:
+ Comment[fr]=Nouveau document KWord :
++Comment[ga]=Cáipéis nua KWord:
+ Comment[he]=מסמך חדש של KWord
+ Comment[hr]=Novi KWord dokument
+ Comment[hu]=Új KWord-dokumentum:
+Index: karbon/tools/vroundrecttool.h
+===================================================================
+--- karbon/tools/vroundrecttool.h (revision 427945)
++++ karbon/tools/vroundrecttool.h (working copy)
+@@ -29,7 +29,7 @@
+
+ class KarbonPart;
+ class QLabel;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+
+
+ class VRoundRectTool : public VShapeTool
+Index: karbon/tools/vpolygontool.cc
+===================================================================
+--- karbon/tools/vpolygontool.cc (revision 427945)
++++ karbon/tools/vpolygontool.cc (working copy)
+@@ -37,6 +37,7 @@
+
+ new QLabel( i18n( "Radius:" ), group );
+ m_radius = new KDoubleSpinBox(0.0, 1000.0, 0.5, 5.0,2, group );
++ //m_radius = new KoBuggyUnitDoubleSpinBox( group, 0.0, 1000.0, 0.5, 50.0, KoUnit::U_MM );
+ refreshUnit();
+ new QLabel( i18n( "Edges:" ), group );
+ m_edges = new KIntSpinBox( group );
+Index: karbon/tools/vpolygontool.h
+===================================================================
+--- karbon/tools/vpolygontool.h (revision 427945)
++++ karbon/tools/vpolygontool.h (working copy)
+@@ -58,7 +58,9 @@
+ void refreshUnit();
+
+ private:
++ // FIXME: This should be a KoUnitDoubleSpinBox!
+ KDoubleSpinBox *m_radius;
++
+ KIntSpinBox *m_edges;
+ KarbonPart *m_part;
+ };
+Index: karbon/tools/vspiraltool.h
+===================================================================
+--- karbon/tools/vspiraltool.h (revision 427945)
++++ karbon/tools/vspiraltool.h (working copy)
+@@ -67,7 +67,9 @@
+ void refreshUnit();
+
+ private:
++ // FIXME: This should be a KoUnitDoubleSpinBox!
+ KDoubleSpinBox *m_radius;
++
+ KIntSpinBox *m_segments;
+ KDoubleNumInput *m_fade;
+ KComboBox *m_type;
+Index: karbon/tools/vellipsetool.cc
+===================================================================
+--- karbon/tools/vellipsetool.cc (revision 427945)
++++ karbon/tools/vellipsetool.cc (working copy)
+@@ -49,8 +49,10 @@
+ // add width/height-input:
+ new QLabel( i18n( "Width:" ), group );
+ m_width = new KDoubleSpinBox( 0.0, 1000.0, 0.5, 10.0, 2, group );
++ //m_width = new KoBuggyUnitDoubleSpinBox( group, 0.0, 1000.0, 0.5, 100.0, KoUnit::U_MM );
+ new QLabel( i18n( "Height:" ), group );
+ m_height = new KDoubleSpinBox( 0.0, 1000.0, 0.5, 10.0, 2, group );
++ //m_height = new KoBuggyUnitDoubleSpinBox( group, 0.0, 1000.0, 0.5, 100.0, KoUnit::U_MM );
+
+ new QLabel( i18n( "Start angle:" ), group );
+ m_startAngle = new KIntSpinBox( group );
+Index: karbon/tools/vellipsetool.h
+===================================================================
+--- karbon/tools/vellipsetool.h (revision 427945)
++++ karbon/tools/vellipsetool.h (working copy)
+@@ -25,8 +25,7 @@
+
+ #include "vshapetool.h"
+
+-class KoUnitDoubleSpinBox;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+ class KComboBox;
+ class KIntSpinBox;
+ class KarbonPart;
+@@ -55,8 +54,11 @@
+ KComboBox *m_type;
+ KIntSpinBox *m_startAngle;
+ KIntSpinBox *m_endAngle;
++
++ // FIXME: These should be KoUnitDoubleSpinBoxes!
+ KDoubleSpinBox *m_width;
+ KDoubleSpinBox *m_height;
++
+ KarbonPart *m_part;
+ };
+
+Index: karbon/tools/vsinustool.cc
+===================================================================
+--- karbon/tools/vsinustool.cc (revision 427945)
++++ karbon/tools/vsinustool.cc (working copy)
+@@ -40,8 +40,10 @@
+ // add width/height-input:
+ new QLabel( i18n( "Width:" ), group );
+ m_width = new KDoubleSpinBox( 0.0, 1000.0, 0.5, 10.0, 2, group );
++ //m_width = new KoBuggyUnitDoubleSpinBox( group, 0.0, 1000.0, 0.5, 100.0, KoUnit::U_MM );
+ new QLabel( i18n( "Height:" ), group );
+ m_height = new KDoubleSpinBox( 0.0, 1000.0, 0.5, 10.0, 2, group );
++ //m_height = new KoBuggyUnitDoubleSpinBox( group, 0.0, 1000.0, 0.5, 100.0, KoUnit::U_MM );
+
+ refreshUnit();
+
+Index: karbon/tools/vsinustool.h
+===================================================================
+--- karbon/tools/vsinustool.h (revision 427945)
++++ karbon/tools/vsinustool.h (working copy)
+@@ -24,7 +24,7 @@
+ #include <knuminput.h>
+ #include "vshapetool.h"
+
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+ class KIntSpinBox;
+ class KarbonPart;
+ class QLabel;
+@@ -58,8 +58,10 @@
+ void refreshUnit();
+
+ private:
++ // FIXME: These should be KoUnitDoubleSpinBoxes!
+ KDoubleSpinBox *m_width;
+ KDoubleSpinBox *m_height;
++
+ KIntSpinBox *m_periods;
+ KarbonPart *m_part;
+ };
+Index: karbon/tools/vrectangletool.cc
+===================================================================
+--- karbon/tools/vrectangletool.cc (revision 427945)
++++ karbon/tools/vrectangletool.cc (working copy)
+@@ -37,10 +37,11 @@
+ // add width/height-input:
+ new QLabel( i18n( "Width:" ), group );
+ m_width = new KDoubleSpinBox( 0.0, 1000.0, 0.5, 10.0, 2, group );
++ //m_width = new KoBuggyUnitDoubleSpinBox( group, 0.0, 1000.0, 0.5, 100.0, KoUnit::U_MM );
+
+ new QLabel( i18n( "Height:" ), group );
+ m_height = new KDoubleSpinBox( 0.0, 1000.0, 0.5, 10.0, 2, group );
+-
++ //m_height = new KoBuggyUnitDoubleSpinBox( group, 0.0, 1000.0, 0.5, 100.0, KoUnit::U_MM );
+ refreshUnit();
+
+ group->setInsideMargin( 4 );
+Index: karbon/tools/vstartool.cc
+===================================================================
+--- karbon/tools/vstartool.cc (revision 427945)
++++ karbon/tools/vstartool.cc (working copy)
+@@ -49,10 +49,12 @@
+ // add width/height-input:
+ new QLabel( i18n( "Outer radius:" ), group );
+ m_outerR = new KDoubleSpinBox( 0.0, 1000.0, 0.5, 5.0, 2, group );
++ //m_outerR = new KoBuggyUnitDoubleSpinBox( group, 0.0, 1000.0, 0.5, 50.0, KoUnit::U_MM );
+ connect( m_outerR, SIGNAL( valueChanged( double ) ), this, SLOT( setOuterRadius( double ) ) );
+
+ new QLabel( i18n( "Inner radius:" ), group );
+ m_innerR = new KDoubleSpinBox( 0.0, 1000.0, 0.5, 5.0, 2, group );
++ //m_innerR = new KoBuggyUnitDoubleSpinBox( group, 0.0, 1000.0, 0.5, 25.0, KoUnit::U_MM );
+
+ refreshUnit();
+
+Index: karbon/tools/vstartool.h
+===================================================================
+--- karbon/tools/vstartool.h (revision 427945)
++++ karbon/tools/vstartool.h (working copy)
+@@ -54,8 +54,10 @@
+ void setOuterRadius( double );
+
+ private:
++ // FIXME: These should be KoUnitDoubleSpinBoxes!
+ KDoubleSpinBox *m_innerR;
+ KDoubleSpinBox *m_outerR;
++
+ KDoubleNumInput *m_roundness;
+ KIntSpinBox *m_edges;
+ KIntSpinBox *m_innerAngle;
+Index: karbon/tools/vspiraltool.cc
+===================================================================
+--- karbon/tools/vspiraltool.cc (revision 427945)
++++ karbon/tools/vspiraltool.cc (working copy)
+@@ -43,6 +43,7 @@
+
+ new QLabel( i18n( "Radius:" ), group );
+ m_radius = new KDoubleSpinBox( 0.0, 1000.0, 0.5, 5.0, 2, group );
++ //m_radius = new KoBuggyUnitDoubleSpinBox( group, 0.0, 1000.0, 0.5, 50.0, KoUnit::U_MM );
+ refreshUnit();
+ new QLabel( i18n( "Segments:" ), group );
+ m_segments = new KIntSpinBox( group );
+Index: karbon/tools/vrectangletool.h
+===================================================================
+--- karbon/tools/vrectangletool.h (revision 427945)
++++ karbon/tools/vrectangletool.h (working copy)
+@@ -29,7 +29,7 @@
+
+ class KarbonPart;
+ class QLabel;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+
+ class VRectangleTool : public VShapeTool
+ {
+@@ -59,8 +59,10 @@
+ void refreshUnit();
+
+ private:
++ // FIXME: These should be KoUnitDoubleSpinBoxes!
+ KDoubleSpinBox *m_width;
+ KDoubleSpinBox *m_height;
++
+ KarbonPart *m_part;
+ };
+
+Index: karbon/dialogs/vconfiguredlg.cc
+===================================================================
+--- karbon/dialogs/vconfiguredlg.cc (revision 427945)
++++ karbon/dialogs/vconfiguredlg.cc (working copy)
+@@ -317,17 +317,17 @@
+ gridColorLbl->setBuddy( m_gridColorBtn );
+ QGroupBox* spacingGrp = new QGroupBox( 2, Qt::Horizontal, i18n( "Spacing" ), page );
+ QLabel* spaceHorizLbl = new QLabel( i18n( "&Horizontal:" ), spacingGrp );
+- m_spaceHorizUSpin = new KoUnitDoubleSpinBox( spacingGrp, 0.0, pgw, 0.1, fw, unit );
++ m_spaceHorizUSpin = new KoBuggyUnitDoubleSpinBox( spacingGrp, 0.0, pgw, 0.1, fw, unit );
+ spaceHorizLbl->setBuddy( m_spaceHorizUSpin );
+ QLabel* spaceVertLbl = new QLabel( i18n( "&Vertical:" ), spacingGrp );
+- m_spaceVertUSpin = new KoUnitDoubleSpinBox( spacingGrp, 0.0, pgh, 0.1, fh, unit );
++ m_spaceVertUSpin = new KoBuggyUnitDoubleSpinBox( spacingGrp, 0.0, pgh, 0.1, fh, unit );
+ spaceVertLbl->setBuddy( m_spaceVertUSpin );
+ QGroupBox* snapGrp = new QGroupBox( 2, Qt::Horizontal, i18n( "Snap Distance" ), page );
+ QLabel* snapHorizLbl = new QLabel( i18n( "H&orizontal:" ), snapGrp );
+- m_snapHorizUSpin = new KoUnitDoubleSpinBox( snapGrp, 0.0, fw, 0.1, sw, unit );
++ m_snapHorizUSpin = new KoBuggyUnitDoubleSpinBox( snapGrp, 0.0, fw, 0.1, sw, unit );
+ snapHorizLbl->setBuddy( m_snapHorizUSpin );
+ QLabel* snapVertLbl = new QLabel( i18n( "V&ertical:" ), snapGrp );
+- m_snapVertUSpin = new KoUnitDoubleSpinBox( snapGrp, 0.0, fh, 0.1, sh, unit );
++ m_snapVertUSpin = new KoBuggyUnitDoubleSpinBox( snapGrp, 0.0, fh, 0.1, sh, unit );
+ snapVertLbl->setBuddy( m_snapVertUSpin );
+
+ QGridLayout* gl = new QGridLayout();
+Index: karbon/dialogs/vconfiguredlg.h
+===================================================================
+--- karbon/dialogs/vconfiguredlg.h (revision 427945)
++++ karbon/dialogs/vconfiguredlg.h (working copy)
+@@ -27,7 +27,7 @@
+ class KConfig;
+ class KIntNumInput;
+ class KColorButton;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+ class QCheckBox;
+ class QComboBox;
+
+@@ -129,10 +129,10 @@
+
+ private:
+ KarbonView* m_view;
+- KoUnitDoubleSpinBox* m_spaceHorizUSpin;
+- KoUnitDoubleSpinBox* m_spaceVertUSpin;
+- KoUnitDoubleSpinBox* m_snapHorizUSpin;
+- KoUnitDoubleSpinBox* m_snapVertUSpin;
++ KoBuggyUnitDoubleSpinBox* m_spaceHorizUSpin;
++ KoBuggyUnitDoubleSpinBox* m_spaceVertUSpin;
++ KoBuggyUnitDoubleSpinBox* m_snapHorizUSpin;
++ KoBuggyUnitDoubleSpinBox* m_snapVertUSpin;
+ QCheckBox* m_gridChBox;
+ QCheckBox* m_snapChBox;
+ KColorButton* m_gridColorBtn;
+Index: karbon/dialogs/vstrokedlg.cc
+===================================================================
+--- karbon/dialogs/vstrokedlg.cc (revision 427945)
++++ karbon/dialogs/vstrokedlg.cc (working copy)
+@@ -50,7 +50,7 @@
+
+ QLabel* widthLabel = new QLabel( i18n ( "Width:" ), mainWidget );
+ leftLayout->addWidget ( widthLabel );
+- m_setLineWidth = new KoUnitDoubleSpinBox( mainWidget, 0.0, 1000.0, 0.5, 1.0, KoUnit::U_PT, 1 );
++ m_setLineWidth = new KoBuggyUnitDoubleSpinBox( mainWidget, 0.0, 1000.0, 0.5, 1.0, KoUnit::U_PT, 1 );
+ leftLayout->addWidget ( m_setLineWidth );
+
+ //Dashing ->
+Index: karbon/dialogs/vstrokedlg.h
+===================================================================
+--- karbon/dialogs/vstrokedlg.h (revision 427945)
++++ karbon/dialogs/vstrokedlg.h (working copy)
+@@ -27,7 +27,7 @@
+ class QVButtonGroup;
+
+ class KarbonPart;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+ class VStroke;
+ class VColorTab;
+
+@@ -41,7 +41,7 @@
+ private:
+ VColorTab* m_colortab;
+ KarbonPart *m_part;
+- KoUnitDoubleSpinBox *m_setLineWidth;
++ KoBuggyUnitDoubleSpinBox *m_setLineWidth;
+ QComboBox *m_styleCombo;
+ QVButtonGroup *m_typeOption;
+ QVButtonGroup *m_capOption;
+Index: karbon/dockers/vtransformdocker.h
+===================================================================
+--- karbon/dockers/vtransformdocker.h (revision 427945)
++++ karbon/dockers/vtransformdocker.h (working copy)
+@@ -25,7 +25,7 @@
+
+ class KarbonPart;
+ class KarbonView;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+
+ class VTransformDocker : public VDocker
+ {
+@@ -43,10 +43,10 @@
+ private:
+ KarbonPart *m_part;
+ KarbonView *m_view;
+- KoUnitDoubleSpinBox *m_x;
+- KoUnitDoubleSpinBox *m_y;
+- KoUnitDoubleSpinBox *m_width;
+- KoUnitDoubleSpinBox *m_height;
++ KoBuggyUnitDoubleSpinBox *m_x;
++ KoBuggyUnitDoubleSpinBox *m_y;
++ KoBuggyUnitDoubleSpinBox *m_width;
++ KoBuggyUnitDoubleSpinBox *m_height;
+ QWidget *mainWidget;
+ };
+
+Index: karbon/dockers/vstrokedocker.cc
+===================================================================
+--- karbon/dockers/vstrokedocker.cc (revision 427945)
++++ karbon/dockers/vstrokedocker.cc (working copy)
+@@ -50,7 +50,7 @@
+
+ QLabel* widthLabel = new QLabel( i18n ( "Width:" ), mainWidget );
+ mainLayout->addWidget( widthLabel, 0, 0 );
+- m_setLineWidth = new KoUnitDoubleSpinBox( mainWidget, 0.0, 1000.0, 0.5, 1.0, KoUnit::U_PT, 1 );
++ m_setLineWidth = new KoBuggyUnitDoubleSpinBox( mainWidget, 0.0, 1000.0, 0.5, 1.0, KoUnit::U_PT, 1 );
+ mainLayout->addWidget ( m_setLineWidth, 0, 1 );
+ connect( m_setLineWidth, SIGNAL( valueChanged( double ) ), this, SLOT( widthChanged() ) );
+
+Index: karbon/dockers/vstrokedocker.h
+===================================================================
+--- karbon/dockers/vstrokedocker.h (revision 427945)
++++ karbon/dockers/vstrokedocker.h (working copy)
+@@ -26,7 +26,7 @@
+ class QHButtonGroup;
+ class QWidget;
+
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+
+ class KoMainWindow;
+ class KarbonView;
+@@ -48,7 +48,7 @@
+ QWidget *mainWidget;
+ KarbonPart *m_part;
+ KarbonView *m_view;
+- KoUnitDoubleSpinBox *m_setLineWidth;
++ KoBuggyUnitDoubleSpinBox *m_setLineWidth;
+
+ private slots:
+ void slotCapChanged( int ID );
+Index: karbon/dockers/vtransformdocker.cc
+===================================================================
+--- karbon/dockers/vtransformdocker.cc (revision 427945)
++++ karbon/dockers/vtransformdocker.cc (working copy)
+@@ -48,25 +48,25 @@
+ //X: (TODO: Set 5000 limit to real Karbon14 limit)
+ QLabel* xLabel = new QLabel( i18n ( "X:" ), mainWidget );
+ mainLayout->addWidget( xLabel, 1, 0 );
+- m_x = new KoUnitDoubleSpinBox( mainWidget, -5000.0, 5000.0, 1.0, 10.0, m_part->unit(), 1 );
++ m_x = new KoBuggyUnitDoubleSpinBox( mainWidget, -5000.0, 5000.0, 1.0, 10.0, m_part->unit(), 1 );
+ mainLayout->addWidget( m_x, 1, 1 );
+
+ //Y: (TODO: Set 5000 limit to real Karbon14 limit)
+ QLabel* yLabel = new QLabel( i18n ( "Y:" ), mainWidget );
+ mainLayout->addWidget( yLabel, 2, 0 );
+- m_y = new KoUnitDoubleSpinBox( mainWidget, -5000.0, 5000.0, 1.0, 10.0, m_part->unit(), 1 );
++ m_y = new KoBuggyUnitDoubleSpinBox( mainWidget, -5000.0, 5000.0, 1.0, 10.0, m_part->unit(), 1 );
+ mainLayout->addWidget( m_y, 2, 1 );
+
+ //Width: (TODO: Set 5000 limit to real Karbon14 limit)
+ QLabel* wLabel = new QLabel( i18n ( "W:" ), mainWidget );
+ mainLayout->addWidget( wLabel, 1, 2 );
+- m_width = new KoUnitDoubleSpinBox( mainWidget, 0.0, 5000.0, 1.0, 10.0, m_part->unit(), 1 );
++ m_width = new KoBuggyUnitDoubleSpinBox( mainWidget, 0.0, 5000.0, 1.0, 10.0, m_part->unit(), 1 );
+ mainLayout->addWidget( m_width, 1, 3 );
+
+ //Height: (TODO: Set 5000 limit to real Karbon14 limit)
+ QLabel* hLabel = new QLabel( i18n ( "H:" ), mainWidget );
+ mainLayout->addWidget( hLabel, 2, 2 );
+- m_height = new KoUnitDoubleSpinBox( mainWidget, 0.0, 5000.0, 1.0, 10.0, m_part->unit(), 1 );
++ m_height = new KoBuggyUnitDoubleSpinBox( mainWidget, 0.0, 5000.0, 1.0, 10.0, m_part->unit(), 1 );
+ mainLayout->addWidget( m_height, 2, 3 );
+
+ //TODO: Add Rotation, Shear
+Index: karbon/widgets/vselecttoolbar.cc
+===================================================================
+--- karbon/widgets/vselecttoolbar.cc (revision 427945)
++++ karbon/widgets/vselecttoolbar.cc (working copy)
+@@ -38,24 +38,24 @@
+ setCaption( i18n( "Object Properties" ) );
+ QLabel *x_label = new QLabel( i18n( "X:" ), this, "kde toolbar widget" );
+ insertWidget( 0, x_label->width(), x_label );
+- m_x = new KoUnitDoubleSpinBox( this, 0.0, 1000.0, 0.5 );
++ m_x = new KoBuggyUnitDoubleSpinBox( this, 0.0, 1000.0, 0.5 );
+ connect( m_x, SIGNAL( valueChanged( double ) ), this, SLOT( slotXChanged( double ) ) );
+ insertWidget( 1, m_x->width(), m_x );
+ QLabel *y_label = new QLabel( i18n( "Y:" ), this, "kde toolbar widget" );
+ insertWidget( 2, y_label->width(), y_label );
+- m_y = new KoUnitDoubleSpinBox( this, 0.0, 1000.0, 0.5 );
++ m_y = new KoBuggyUnitDoubleSpinBox( this, 0.0, 1000.0, 0.5 );
+ connect( m_y, SIGNAL( valueChanged( double ) ), this, SLOT( slotYChanged( double ) ) );
+ insertWidget( 3, m_y->width(), m_y );
+
+ insertSeparator( 4 );
+ QLabel *w_label = new QLabel( i18n( "Width:" ), this, "kde toolbar widget" );
+ insertWidget( 5, w_label->width(), w_label );
+- m_width = new KoUnitDoubleSpinBox( this, 0.0, 1000.0, 0.5 );
++ m_width = new KoBuggyUnitDoubleSpinBox( this, 0.0, 1000.0, 0.5 );
+ connect( m_width, SIGNAL( valueChanged( double ) ), this, SLOT( slotWidthChanged( double ) ) );
+ insertWidget( 6, m_width->width(), m_width );
+ QLabel *h_label = new QLabel( i18n( "Height:" ), this, "kde toolbar widget" );
+ insertWidget( 7, h_label->width(), h_label );
+- m_height = new KoUnitDoubleSpinBox( this, 0.0, 1000.0, 0.5 );
++ m_height = new KoBuggyUnitDoubleSpinBox( this, 0.0, 1000.0, 0.5 );
+ connect( m_height, SIGNAL( valueChanged( double ) ), this, SLOT( slotHeightChanged( double ) ) );
+ insertWidget( 8, m_height->width(), m_height );
+
+Index: karbon/widgets/vselecttoolbar.h
+===================================================================
+--- karbon/widgets/vselecttoolbar.h (revision 427945)
++++ karbon/widgets/vselecttoolbar.h (working copy)
+@@ -24,7 +24,7 @@
+
+ #include <ktoolbar.h>
+
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+ class KarbonView;
+
+ class VSelectToolBar : public KToolBar
+@@ -42,10 +42,10 @@
+ void slotHeightChanged( double );
+
+ private:
+- KoUnitDoubleSpinBox *m_x;
+- KoUnitDoubleSpinBox *m_y;
+- KoUnitDoubleSpinBox *m_width;
+- KoUnitDoubleSpinBox *m_height;
++ KoBuggyUnitDoubleSpinBox *m_x;
++ KoBuggyUnitDoubleSpinBox *m_y;
++ KoBuggyUnitDoubleSpinBox *m_width;
++ KoBuggyUnitDoubleSpinBox *m_height;
+ KarbonView *m_view;
+ };
+
diff --git a/editors/calligra/files/patch-filters-kspread-excel-sidewinder-excel.cpp b/editors/calligra/files/patch-filters-kspread-excel-sidewinder-excel.cpp
deleted file mode 100644
index 65e60fd83a86..000000000000
--- a/editors/calligra/files/patch-filters-kspread-excel-sidewinder-excel.cpp
+++ /dev/null
@@ -1,11 +0,0 @@
---- filters/kspread/excel/sidewinder/excel.cpp.orig Wed Jun 29 02:06:17 2005
-+++ filters/kspread/excel/sidewinder/excel.cpp Wed Jun 29 02:04:06 2005
-@@ -5412,7 +5412,7 @@
- case 10: valueFormat = "0.00%"; break;
- case 11: valueFormat = "0.00E+00"; break;
- case 12: valueFormat = "#?/?"; break;
-- case 13: valueFormat = "#\?\?\/\?\?"; break;
-+ case 13: valueFormat = "#\?\?/\?\?"; break;
- case 14: valueFormat = "M/D/YY"; break;
- case 15: valueFormat = "D-MMM-YY"; break;
- case 16: valueFormat = "D-MMM"; break;
diff --git a/editors/calligra/files/patch-krita-plugins-cimg-CImg.h b/editors/calligra/files/patch-krita-plugins-cimg-CImg.h
deleted file mode 100644
index 9c914acb3d05..000000000000
--- a/editors/calligra/files/patch-krita-plugins-cimg-CImg.h
+++ /dev/null
@@ -1,11 +0,0 @@
---- krita/plugins/cimg/CImg.h.orig Tue Jun 28 02:31:30 2005
-+++ krita/plugins/cimg/CImg.h Tue Jun 28 02:32:10 2005
-@@ -5135,7 +5135,7 @@
- if (ny1<0 || ny0>=dimy()) return *this;
- if (ny0<0) { nx0-=ny0*(nx1-nx0)/(ny1-ny0); ny0=0; }
- if (ny1>=dimy()) { nx1+=(ny1-dimy())*(nx0-nx1)/(ny1-ny0); ny1=dimy()-1;}
-- const unsigned int dmax = (unsigned int)cimg::max(std::abs(nx1-nx0),ny1-ny0), whz = width*height*depth;
-+ const unsigned int dmax = (unsigned int)cimg::max(std::abs((long int)(nx1-nx0)),(long int)(ny1-ny0)), whz = width*height*depth;
- const float px = dmax?(nx1-nx0)/(float)dmax:0, py = dmax?(ny1-ny0)/(float)dmax:0;
- float x = (float)nx0, y = (float)ny0;
- if (opacity>=1) for (unsigned int t=0; t<=dmax; t++) {
diff --git a/editors/calligra/files/patch-kspread-dialogs-kspread_dlg_database.cc b/editors/calligra/files/patch-kspread-dialogs-kspread_dlg_database.cc
deleted file mode 100644
index 0f733f0e891f..000000000000
--- a/editors/calligra/files/patch-kspread-dialogs-kspread_dlg_database.cc
+++ /dev/null
@@ -1,13 +0,0 @@
---- kspread/dialogs/kspread_dlg_database.cc.orig Tue Jun 28 03:42:22 2005
-+++ kspread/dialogs/kspread_dlg_database.cc Tue Jun 28 03:48:20 2005
-@@ -600,8 +600,8 @@
- // An update command must also be followed by a space, or it would be parsed
- // as an identifier.
- // For sanity, also check that there is a SELECT
-- QRegExp couldModifyDB( "(^|[( \s])(UPDATE|DELETE|INSERT|CREATE) ", false /* cs */ );
-- QRegExp couldQueryDB( "(^|[( \s])(SELECT) ", false /* cs */ );
-+ QRegExp couldModifyDB( "(^|[( \\s])(UPDATE|DELETE|INSERT|CREATE) ", false /* cs */ );
-+ QRegExp couldQueryDB( "(^|[( \\s])(SELECT) ", false /* cs */ );
-
- if (couldModifyDB.search( queryStr ) != -1 || couldQueryDB.search ( queryStr ) == -1 )
- {
diff --git a/editors/koffice-kde3/Makefile b/editors/koffice-kde3/Makefile
index 36889951226f..e85d413c5897 100644
--- a/editors/koffice-kde3/Makefile
+++ b/editors/koffice-kde3/Makefile
@@ -7,6 +7,7 @@
PORTNAME= koffice
PORTVERSION= 1.4.0a
+PORTREVISION= 1
PORTEPOCH= 1
CATEGORIES= editors kde
MASTER_SITES= ${MASTER_SITE_KDE}
diff --git a/editors/koffice-kde3/files/patch-1.4.0_patchset_1.diff b/editors/koffice-kde3/files/patch-1.4.0_patchset_1.diff
new file mode 100644
index 000000000000..bf61a1b9ba41
--- /dev/null
+++ b/editors/koffice-kde3/files/patch-1.4.0_patchset_1.diff
@@ -0,0 +1,5060 @@
+Index: kformula/kformulapart.desktop
+===================================================================
+--- kformula/kformulapart.desktop (revision 427945)
++++ kformula/kformulapart.desktop (working copy)
+@@ -19,6 +19,7 @@
+ Name[pt]=Componente de Fórmulas do KOffice
+ Name[pt_BR]=Componente de Fórmulas do KOffice
+ Name[ru]=Компонент формул KOffice
++Name[sl]=Komponenta za enačbe za KOffice
+ Name[sr]=KOffice-ова компонента за формуле
+ Name[sr@Latn]=KOffice-ova komponenta za formule
+ Name[sv]=Koffice-formelkomponent
+Index: servicetypes/koplugin.desktop
+===================================================================
+--- servicetypes/koplugin.desktop (revision 427945)
++++ servicetypes/koplugin.desktop (working copy)
+@@ -22,6 +22,7 @@
+ Comment[fi]=KOffice-laajennus
+ Comment[fo]=KSkrivstovu-ístingur
+ Comment[fr]=Module externe de KOffice
++Comment[ga]=Breiseán KOffice
+ Comment[he]=תוסף של KOffice
+ Comment[hr]=KOffice dodatak
+ Comment[hu]=KOffice-bővítőmodul
+Index: servicetypes/kofficepart.desktop
+===================================================================
+--- servicetypes/kofficepart.desktop (revision 427945)
++++ servicetypes/kofficepart.desktop (working copy)
+@@ -22,6 +22,7 @@
+ Comment[fa]=KOffice اجزای
+ Comment[fi]=KOffice-komponentti
+ Comment[fr]=Composant KOffice
++Comment[ga]=Comhpháirt KOffice
+ Comment[he]=רכיב של KOffice
+ Comment[hr]=KOffice komponenta
+ Comment[hu]=KOffice-komponens
+Index: servicetypes/kofilter.desktop
+===================================================================
+--- servicetypes/kofilter.desktop (revision 427945)
++++ servicetypes/kofilter.desktop (working copy)
+@@ -22,6 +22,7 @@
+ Comment[fi]=KOffice-suodin
+ Comment[fo]=KSkrivstovu-filtur
+ Comment[fr]=Filtre KOffice
++Comment[ga]=Scagaire KOffice
+ Comment[he]=מסנן של KOffice
+ Comment[hr]=KOffice filter
+ Comment[hu]=KOffice-szűrő
+Index: kword/kwordpart.desktop
+===================================================================
+--- kword/kwordpart.desktop (revision 427945)
++++ kword/kwordpart.desktop (working copy)
+@@ -20,6 +20,7 @@
+ Name[pt]=Componente de Processamento de Texto do KOffice
+ Name[pt_BR]=Componente de Processamento de Texto do KOffice
+ Name[ru]=Компонент текстового редактора KOffice
++Name[sl]=Komponenta za obdelovanje besedil za KOffice
+ Name[sr]=KOffice-ова компонента за обраду текста
+ Name[sr@Latn]=KOffice-ova komponenta za obradu teksta
+ Name[sv]=Koffice-ordbehandlingskomponent
+Index: kword/kwmailmerge.desktop
+===================================================================
+--- kword/kwmailmerge.desktop (revision 427945)
++++ kword/kwmailmerge.desktop (working copy)
+@@ -17,6 +17,7 @@
+ Comment[et]=KWordi kirjakoosteplugin
+ Comment[fi]=KWord-postituslaajennus
+ Comment[fr]=Module fusion de courrier pour KWord
++Comment[ga]=Breiseán postchumaisc KWord
+ Comment[he]=תוסף מיזוג דואר ל־KWord
+ Comment[hr]=KWord dodatak za mailmerge
+ Comment[hu]=KWord körlevél-bővítőmodul
+Index: kword/configfootnotedia.h
+===================================================================
+--- kword/configfootnotedia.h (revision 427945)
++++ kword/configfootnotedia.h (working copy)
+@@ -28,7 +28,7 @@
+ class QRadioButton;
+ class KIntNumInput;
+ class QComboBox;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+
+ class KWConfigFootNoteDia : public KDialogBase
+ {
+@@ -47,7 +47,7 @@
+ QRadioButton *rbPosCentered;
+ QRadioButton *rbPosRight;
+ KIntNumInput *spLength;
+- KoUnitDoubleSpinBox *spWidth;
++ KoBuggyUnitDoubleSpinBox *spWidth;
+ QComboBox *m_cbLineType;
+ protected slots:
+ virtual void slotOk();
+Index: kword/kwconfig.cc
+===================================================================
+--- kword/kwconfig.cc (revision 427945)
++++ kword/kwconfig.cc (working copy)
+@@ -301,7 +301,7 @@
+
+ QHBox* hbGridX = new QHBox( gbInterfaceGroup );
+ QLabel* labelGridX = new QLabel( i18n("&Horizontal grid size:"), hbGridX );
+- gridX=new KoUnitDoubleSpinBox( hbGridX,
++ gridX=new KoBuggyUnitDoubleSpinBox( hbGridX,
+ 0.1,
+ 50,
+ 0.1,
+@@ -313,7 +313,7 @@
+
+ QHBox* hbGridY = new QHBox( gbInterfaceGroup );
+ QLabel* labelGridY = new QLabel( i18n("&Vertical grid size:"), hbGridY );
+- gridY=new KoUnitDoubleSpinBox( hbGridY,
++ gridY=new KoBuggyUnitDoubleSpinBox( hbGridY,
+ 0.1,
+ 50,
+ 0.1,
+@@ -326,7 +326,7 @@
+
+ QHBox* hbIndent = new QHBox( gbInterfaceGroup );
+ QLabel* labelIdent = new QLabel( i18n("&Paragraph indent by toolbar buttons:"), hbIndent );
+- indent = new KoUnitDoubleSpinBox( hbIndent,
++ indent = new KoBuggyUnitDoubleSpinBox( hbIndent,
+ 0.1,
+ 50,
+ 0.1,
+@@ -662,7 +662,7 @@
+
+ QHBox* hbColumnSpacing = new QHBox( gbDocumentDefaults );
+ QLabel* columnSpacingLabel = new QLabel( i18n("Default column spacing:"), hbColumnSpacing );
+- m_columnSpacing = new KoUnitDoubleSpinBox( hbColumnSpacing,
++ m_columnSpacing = new KoBuggyUnitDoubleSpinBox( hbColumnSpacing,
+ 0.1,
+ 50,
+ 0.1,
+@@ -764,7 +764,7 @@
+
+ QHBox* hbTabStop = new QHBox( gbDocumentSettings );
+ tabStop = new QLabel(i18n("Tab stop (%1):").arg(doc->unitName()), hbTabStop);
+- m_tabStopWidth = new KoUnitDoubleSpinBox( hbTabStop,
++ m_tabStopWidth = new KoBuggyUnitDoubleSpinBox( hbTabStop,
+ MM_TO_POINT(2),
+ doc->ptPaperWidth(),
+ 0.1,
+Index: kword/framedia.cc
+===================================================================
+--- kword/framedia.cc (revision 427945)
++++ kword/framedia.cc (working copy)
+@@ -956,7 +956,7 @@
+ lx->resize( lx->sizeHint() );
+ pGrid->addWidget( lx, 1, 0 );
+
+- sx = new KoUnitDoubleSpinBox( grp1, 0, 9999, 1, 0.0, doc->unit() );
++ sx = new KoBuggyUnitDoubleSpinBox( grp1, 0, 9999, 1, 0.0, doc->unit() );
+
+ sx->resize( sx->sizeHint() );
+ pGrid->addWidget( sx, 1, 1 );
+@@ -965,7 +965,7 @@
+ ly->resize( ly->sizeHint() );
+ pGrid->addWidget( ly, 1, 2 );
+
+- sy = new KoUnitDoubleSpinBox( grp1, 0, 9999, 1, 0.0, doc->unit() );
++ sy = new KoBuggyUnitDoubleSpinBox( grp1, 0, 9999, 1, 0.0, doc->unit() );
+ sy->resize( sy->sizeHint() );
+ pGrid->addWidget( sy, 1, 3 );
+
+@@ -973,7 +973,7 @@
+ lw->resize( lw->sizeHint() );
+ pGrid->addWidget( lw, 2, 0 );
+
+- sw = new KoUnitDoubleSpinBox( grp1, 0, 9999, 1, 0.0, doc->unit() );
++ sw = new KoBuggyUnitDoubleSpinBox( grp1, 0, 9999, 1, 0.0, doc->unit() );
+
+ sw->resize( sw->sizeHint() );
+ connect( sw, SIGNAL(valueChanged(double)),
+@@ -985,7 +985,7 @@
+ lh->resize( lh->sizeHint() );
+ pGrid->addWidget( lh, 2, 2 );
+
+- sh = new KoUnitDoubleSpinBox( grp1, 0, 9999, 1, 0.0, doc->unit() );
++ sh = new KoBuggyUnitDoubleSpinBox( grp1, 0, 9999, 1, 0.0, doc->unit() );
+ connect( sh, SIGNAL(valueChanged(double)),
+ this, SLOT(slotUpdateWidthForHeight(double)) );
+
+@@ -1095,7 +1095,7 @@
+
+ f=allFrames.next();
+ }
+- // TODO port to KoUnitDoubleSpinBox
++ // TODO port to KoBuggyUnitDoubleSpinBox
+ // and TODO show a special value when frames have a different width/height
+ if ( sw->isEnabled() )
+ sw->setValue( KoUnit::toUserValue( commonWidth, doc->unit() ) );
+@@ -2103,7 +2103,7 @@
+ //lml->resize( lml->sizeHint() );
+ mGrid->addWidget( lml, 2, 0 );
+
+- m_inputLeft = new KoUnitDoubleSpinBox( grp2, 0, 9999, 1, 0.0, doc->unit() );
++ m_inputLeft = new KoBuggyUnitDoubleSpinBox( grp2, 0, 9999, 1, 0.0, doc->unit() );
+
+ mGrid->addWidget( m_inputLeft, 2, 1 );
+
+@@ -2111,7 +2111,7 @@
+ //lmt->resize( lmt->sizeHint() );
+ mGrid->addWidget( lmt, 2, 2 );
+
+- m_inputTop = new /*KDoubleNumInput*/KoUnitDoubleSpinBox( grp2, 0, 9999, 1, 0.0, doc->unit() );
++ m_inputTop = new /*KDoubleNumInput*/KoBuggyUnitDoubleSpinBox( grp2, 0, 9999, 1, 0.0, doc->unit() );
+
+ //m_inputTop->resize( m_inputTop->sizeHint() );
+
+@@ -2121,7 +2121,7 @@
+ //lmr->resize( lmr->sizeHint() );
+ mGrid->addWidget( lmr, 3, 0 );
+
+- m_inputRight = new KoUnitDoubleSpinBox( grp2, 0, 9999, 1, 0.0, doc->unit() );
++ m_inputRight = new KoBuggyUnitDoubleSpinBox( grp2, 0, 9999, 1, 0.0, doc->unit() );
+
+ //m_inputRight->resize( m_inputRight->sizeHint() );
+ mGrid->addWidget( m_inputRight, 3, 1 );
+@@ -2130,7 +2130,7 @@
+ //lmb->resize( lmb->sizeHint() );
+ mGrid->addWidget( lmb, 3, 2 );
+
+- m_inputBottom = new KoUnitDoubleSpinBox( grp2, 0, 9999, 1, 0.0, doc->unit() );
++ m_inputBottom = new KoBuggyUnitDoubleSpinBox( grp2, 0, 9999, 1, 0.0, doc->unit() );
+
+ //m_inputBottom->resize( m_inputBottom->sizeHint() );
+ mGrid->addWidget( m_inputBottom, 3, 3 );
+Index: kword/resizetabledia.cc
+===================================================================
+--- kword/resizetabledia.cc (revision 427945)
++++ kword/resizetabledia.cc (working copy)
+@@ -77,7 +77,7 @@
+ else
+ value->setValue( type == ROW ? (rowSelected+1) : (colSelected+1) );
+ rc = new QLabel( type == ROW ? i18n( "Height (%1):" ).arg(doc->unitName()) : i18n( "Width (%1):" ).arg(doc->unitName()), page );
+- position= new KoUnitDoubleSpinBox( page, 0.01, table->anchorFrameset()->isFloating() ? table->anchorFrameset()->frame(0)->width(): 9999, 1, 0.0, doc->unit(), doc->unit() );
++ position= new KoBuggyUnitDoubleSpinBox( page, 0.01, table->anchorFrameset()->isFloating() ? table->anchorFrameset()->frame(0)->width(): 9999, 1, 0.0, doc->unit(), doc->unit() );
+ slotValueChanged( value->value());
+ connect( value, SIGNAL( valueChanged ( int )), this, SLOT( slotValueChanged( int )));
+
+Index: kword/mailmerge/sql/kwserialletter_qtsqldb.desktop
+===================================================================
+--- kword/mailmerge/sql/kwserialletter_qtsqldb.desktop (revision 427945)
++++ kword/mailmerge/sql/kwserialletter_qtsqldb.desktop (working copy)
+@@ -4,6 +4,7 @@
+ ServiceTypes=KWord/MailMergePlugin
+
+ Name=Qt-SQL Source (single table)
++Name[cy]=Ffynhonell Qt-SQL (tabl sengl)
+ Name[da]=Qt-SQL-kilde (enkelt tabel)
+ Name[de]=Qt-SQL (Einzeltabelle)
+ Name[el]=Qt-SQL πηγή (μονός πίνακας)
+Index: kword/mailmerge/kspread/kwmailmerge_kspread.desktop
+===================================================================
+--- kword/mailmerge/kspread/kwmailmerge_kspread.desktop (revision 427945)
++++ kword/mailmerge/kspread/kwmailmerge_kspread.desktop (working copy)
+@@ -22,6 +22,7 @@
+ Name[pt]=Fonte de Tabela do KSpread
+ Name[pt_BR]=Fonte de Tabela do KSpread
+ Name[ru]=Источник таблиц KSpread
++Name[sl]=Vir tabel KSpread
+ Name[sr]=KSpread-ов извор табеле
+ Name[sr@Latn]=KSpread-ov izvor tabele
+ Name[sv]=Kspread-tabellkällfil
+Index: kword/framedia.h
+===================================================================
+--- kword/framedia.h (revision 427945)
++++ kword/framedia.h (working copy)
+@@ -81,7 +81,7 @@
+ void slotValueChanged( double );
+
+ private:
+- KoUnitDoubleSpinBox *m_inputLeft, *m_inputRight, *m_inputTop, *m_inputBottom;
++ KoBuggyUnitDoubleSpinBox *m_inputLeft, *m_inputRight, *m_inputTop, *m_inputBottom;
+ QCheckBox *m_synchronize;
+ KWDocument *doc;
+ bool m_changed;
+@@ -168,7 +168,7 @@
+ QWidget *tab4;
+ QGroupBox *grp1;
+ QLabel *lx, *ly, *lw, *lh;
+- KoUnitDoubleSpinBox *sx, *sy, *sw, *sh;
++ KoBuggyUnitDoubleSpinBox *sx, *sy, *sw, *sh;
+ KWFourSideConfigWidget* m_paddingConfigWidget;
+ QCheckBox *floating;
+ QCheckBox *protectSize;
+Index: kword/kwconfig.h
+===================================================================
+--- kword/kwconfig.h (revision 427945)
++++ kword/kwconfig.h (working copy)
+@@ -29,7 +29,7 @@
+ class KWView;
+ class QCheckBox;
+ class KIntNumInput;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+ class KConfig;
+ class QComboBox;
+ class KIntNumInput;
+@@ -69,8 +69,8 @@
+ KWView* m_pView;
+ KConfig* config;
+ QComboBox *m_unitCombo;
+- KoUnitDoubleSpinBox* gridX,*gridY;
+- KoUnitDoubleSpinBox* indent;
++ KoBuggyUnitDoubleSpinBox* gridX,*gridY;
++ KoBuggyUnitDoubleSpinBox* indent;
+ KIntNumInput* recentFiles;
+ QCheckBox *showStatusBar, *showScrollBar, *pgUpDownMovesCaret;
+ int oldNbRecentFiles;
+@@ -114,7 +114,7 @@
+ QLabel *fontName;
+ QLabel *tabStop;
+
+- KoUnitDoubleSpinBox* m_columnSpacing;
++ KoBuggyUnitDoubleSpinBox* m_columnSpacing;
+
+ KIntNumInput* autoSave;
+ int oldAutoSaveValue;
+@@ -123,7 +123,7 @@
+ int m_oldStartingPage;
+ bool m_oldBackupFile;
+ KIntNumInput* m_variableNumberOffset;
+- KoUnitDoubleSpinBox *m_tabStopWidth;
++ KoBuggyUnitDoubleSpinBox *m_tabStopWidth;
+ QCheckBox *m_cursorInProtectedArea;
+ QCheckBox *m_createBackupFile;
+ // QCheckBox *m_directInsertCursor;
+Index: kword/configfootnotedia.cc
+===================================================================
+--- kword/configfootnotedia.cc (revision 427945)
++++ kword/configfootnotedia.cc (working copy)
+@@ -106,7 +106,7 @@
+
+ QGridLayout *layout = new QGridLayout( 0, 1, 1, 0, 6);
+
+- spWidth = new KoUnitDoubleSpinBox(page, 0, 5, 0.5, 1.0, m_doc->unit(), 1);
++ spWidth = new KoBuggyUnitDoubleSpinBox(page, 0, 5, 0.5, 1.0, m_doc->unit(), 1);
+ spWidth->setValue( m_doc->footNoteSeparatorLineWidth());
+ layout->addWidget( spWidth, 1, 1 );
+
+Index: kword/templates/DTP/SimpleLayout.desktop
+===================================================================
+--- kword/templates/DTP/SimpleLayout.desktop (revision 427945)
++++ kword/templates/DTP/SimpleLayout.desktop (working copy)
+@@ -21,6 +21,7 @@
+ Name[fa]=نمونه طرح بندی
+ Name[fi]=Yksinkertainen taittomalli
+ Name[fr]=Mise en page simple
++Name[ga]=Leagan Amach Simplí
+ Name[he]=פריסה פשוטה
+ Name[hr]=Jednostavni raspored
+ Name[hu]=Egyszerű elrendezés
+Index: kword/templates/DTP/Empty.desktop
+===================================================================
+--- kword/templates/DTP/Empty.desktop (revision 427945)
++++ kword/templates/DTP/Empty.desktop (working copy)
+@@ -17,6 +17,7 @@
+ Name[fa]=صفحه خالی
+ Name[fi]=Tyhjä sivu
+ Name[fr]=Page vide
++Name[ga]=Leathanach Folamh
+ Name[he]=דף ריק
+ Name[hr]=Prazna stranica
+ Name[hu]=Üres oldal
+Index: kword/templates/DTP/fax.desktop
+===================================================================
+--- kword/templates/DTP/fax.desktop (revision 427945)
++++ kword/templates/DTP/fax.desktop (working copy)
+@@ -20,6 +20,7 @@
+ Name[fa]=نمونه دورنگار
+ Name[fi]=Faksipohja
+ Name[fr]=Modèle de fax
++Name[ga]=Teimpléad Facs
+ Name[he]=תבנית פקס
+ Name[hr]=Fax predložak
+ Name[hu]=Faxsablon
+@@ -63,6 +64,7 @@
+ Comment[et]=Faks päisega
+ Comment[fi]=Faksiasiakirja otsikolla
+ Comment[fr]=Document de fax. avec en-tête
++Comment[ga]=Cáipéis fhacs, le ceanntásc
+ Comment[he]=מסמך פקס עם כותרת
+ Comment[hr]=Faks dokument, sa zaglavljem
+ Comment[hu]=Fax dokumentum (fejléccel)
+Index: kword/templates/Wordprocessing/TwoColumns.desktop
+===================================================================
+--- kword/templates/Wordprocessing/TwoColumns.desktop (revision 427945)
++++ kword/templates/Wordprocessing/TwoColumns.desktop (working copy)
+@@ -22,6 +22,7 @@
+ Name[fi]=Kaksi palstaa
+ Name[fo]=Tveir teigar
+ Name[fr]=Deux colonnes
++Name[ga]=Dhá Cholún
+ Name[he]=שני טורים
+ Name[hr]=Dva stupca
+ Name[hu]=Kétoszlopos
+Index: kword/resizetabledia.h
+===================================================================
+--- kword/resizetabledia.h (revision 427945)
++++ kword/resizetabledia.h (working copy)
+@@ -31,7 +31,7 @@
+ class QRadioButton;
+ class QLabel;
+ class QSpinBox;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+
+ class KWResizeTableDia : public KDialogBase
+ {
+@@ -48,7 +48,7 @@
+ KWDocument *doc;
+ ResizeType type;
+ KWCanvas *canvas;
+- KoUnitDoubleSpinBox *position;
++ KoBuggyUnitDoubleSpinBox *position;
+ double resetValue;
+ protected slots:
+ virtual void slotOk();
+Index: kexi/plugins/forms/kexilabel.cpp
+===================================================================
+--- kexi/plugins/forms/kexilabel.cpp (revision 427945)
++++ kexi/plugins/forms/kexilabel.cpp (working copy)
+@@ -33,6 +33,20 @@
+ #define SHADOW_DIAGONAL_FACTOR 1.0
+ #define SHADOW_THICKNESS 1
+
++class KexiLabelPrivate : public QLabel {
++ friend class KexiLabel;
++ public:
++ KexiLabelPrivate( KexiLabel* );
++ virtual ~KexiLabelPrivate();
++ private:
++ QImage makeShadow( const QImage& textImage, const QColor &bgColor, const QRect& boundingRect );
++ QRect getBounding( const QImage &image, const QRect& startRect );
++// double defaultDecay( QImage& source, int i, int j );
++ KPixmap getShadowPixmap();
++
++ QRect p_shadowRect;
++};
++
+ KexiLabelPrivate::KexiLabelPrivate( KexiLabel* parent )
+ : QLabel( parent )
+ {
+@@ -404,6 +418,40 @@
+ QLabel::paintEvent( e );
+ }
+
++void KexiLabel::fontChange( const QFont& font ) {
++ p_pixmapDirty = true;
++ p_privateLabel->setFont( font );
++ QLabel::fontChange( font );
++}
++
++void KexiLabel::styleChange( QStyle& style ) {
++ p_pixmapDirty = true;
++ QLabel::styleChange( style );
++}
++
++void KexiLabel::enabledChange( bool enabled ) {
++ p_pixmapDirty = true;
++ p_privateLabel->setEnabled( enabled );
++ QLabel::enabledChange( enabled );
++}
++
++void KexiLabel::paletteChange( const QPalette& pal ) {
++ p_pixmapDirty = true;
++ p_privateLabel->setPalette( pal );
++ QLabel::paletteChange( pal );
++}
++
++void KexiLabel::frameChanged() {
++ p_pixmapDirty = true;
++ p_privateLabel->frameChanged();
++ QFrame::frameChanged();
++}
++
++void KexiLabel::showEvent( QShowEvent* e ) {
++ p_pixmapDirty = true;
++ QLabel::showEvent( e );
++}
++
+ void KexiLabel::setValueInternal( const QVariant& add, bool removeOld ) {
+ if (removeOld)
+ setText(add.toString());
+Index: kexi/plugins/forms/kexilabel.h
+===================================================================
+--- kexi/plugins/forms/kexilabel.h (revision 427945)
++++ kexi/plugins/forms/kexilabel.h (working copy)
+@@ -32,20 +32,10 @@
+ class QTimer;
+ class KexiLabel;
+
+-class KexiLabelPrivate : public QLabel {
+- friend class KexiLabel;
+- public:
+- KexiLabelPrivate( KexiLabel* );
+- virtual ~KexiLabelPrivate();
+- private:
+- QImage makeShadow( const QImage& textImage, const QColor &bgColor, const QRect& boundingRect );
+- QRect getBounding( const QImage &image, const QRect& startRect );
+-// double defaultDecay( QImage& source, int i, int j );
+- KPixmap getShadowPixmap();
++class KexiLabelPrivate;
+
+- QRect p_shadowRect;
+-};
+
++
+ /**
+ An extended, data-aware, read-only text label.
+ It's text may have a drop-shadow.
+@@ -139,40 +129,14 @@
+ */
+ virtual void setValueInternal( const QVariant& add, bool removeOld );
+
+- virtual void fontChange( const QFont& font ) {
+- p_pixmapDirty = true;
+- p_privateLabel->setFont( font );
+- QLabel::fontChange( font );
+- }
++ virtual void fontChange( const QFont& font );
++ virtual void styleChange( QStyle& style );
++ virtual void enabledChange( bool enabled );
+
+- virtual void styleChange( QStyle& style ) {
+- p_pixmapDirty = true;
+- QLabel::styleChange( style );
+- }
++ virtual void paletteChange( const QPalette& pal );
++ virtual void frameChanged();
++ virtual void showEvent( QShowEvent* e );
+
+- virtual void enabledChange( bool enabled ) {
+- p_pixmapDirty = true;
+- p_privateLabel->setEnabled( enabled );
+- QLabel::enabledChange( enabled );
+- }
+-
+- virtual void paletteChange( const QPalette& pal ) {
+- p_pixmapDirty = true;
+- p_privateLabel->setPalette( pal );
+- QLabel::paletteChange( pal );
+- }
+-
+- virtual void frameChanged() {
+- p_pixmapDirty = true;
+- p_privateLabel->frameChanged();
+- QFrame::frameChanged();
+- }
+-
+- virtual void showEvent( QShowEvent* e ) {
+- p_pixmapDirty = true;
+- QLabel::showEvent( e );
+- }
+-
+ private:
+ void updatePixmapLater();
+
+Index: kexi/plugins/kugar/kexikugarhandler.desktop
+===================================================================
+--- kexi/plugins/kugar/kexikugarhandler.desktop (revision 427945)
++++ kexi/plugins/kugar/kexikugarhandler.desktop (working copy)
+@@ -60,7 +60,7 @@
+ Comment[nn]=Integrasjon av Kugar-basert rapportgenerering
+ Comment[pt]=Integração da geração de relatórios do Kugar
+ Comment[pt_BR]=Integração do Kugar baseada na geração de relatório
+-Comment[ru]=Интеграция с Kugar для построения отчётов
++Comment[ru]=Отчёт посредством Kugar
+ Comment[sk]=Integrácia generovaných správ založených na Kugar
+ Comment[sl]=Integracija ustvarjanja poročil na osnovi Kugarja
+ Comment[sr]=Интеграција прављења извештаја заснованог на Kugar-у
+Index: kexi/plugins/reports/kexireportfactory.desktop
+===================================================================
+--- kexi/plugins/reports/kexireportfactory.desktop (revision 427945)
++++ kexi/plugins/reports/kexireportfactory.desktop (working copy)
+@@ -19,6 +19,7 @@
+ Name[pt]=Elementos de Relatório do Kexi
+ Name[pt_BR]=Widgets de Relatório do Kexi
+ Name[ru]=Элементы управления для отчётов Kexi
++Name[sl]=Gradniki za poročila za Kexi
+ Name[sr]=Kexi-јеве контроле за извештаје
+ Name[sr@Latn]=Kexi-jeve kontrole za izveštaje
+ Name[sv]=Kexi-rapportkomponenter
+Index: kexi/kexipart.desktop
+===================================================================
+--- kexi/kexipart.desktop (revision 427945)
++++ kexi/kexipart.desktop (working copy)
+@@ -19,6 +19,7 @@
+ Name[pt]=Componente de Bases de Dados do KOffice
+ Name[pt_BR]=Componente de Banco de Dados do KOffice
+ Name[ru]=Компонент баз данных KOffice
++Name[sl]=Komponenta za zbirke podatkov za KOffice
+ Name[sr]=KOffice-ова компонента за базе података
+ Name[sr@Latn]=KOffice-ova komponenta za baze podataka
+ Name[sv]=Koffice-databaskomponent
+Index: kexi/filters/import/csv/kexicsvimport.desktop
+===================================================================
+--- kexi/filters/import/csv/kexicsvimport.desktop (revision 427945)
++++ kexi/filters/import/csv/kexicsvimport.desktop (working copy)
+@@ -42,7 +42,7 @@
+ Comment[pl]=Import pliku CVS...
+ Comment[pt]=Importar um Ficheiro CSV...
+ Comment[pt_BR]=Importar Arquivo CSV...
+-Comment[ru]=Импорт данных из CSV...
++Comment[ru]=Импорт из CSV...
+ Comment[sk]=Import súborov CSV...
+ Comment[sl]=Uvoz datoteke CSV ...
+ Comment[sr]=Увози се CSV фајл...
+Index: kexi/filters/import/kspread_chain/kexikspreadimport.desktop
+===================================================================
+--- kexi/filters/import/kspread_chain/kexikspreadimport.desktop (revision 427945)
++++ kexi/filters/import/kspread_chain/kexikspreadimport.desktop (working copy)
+@@ -38,7 +38,7 @@
+ Comment[nn]=Importer KSpread-lesbar fil ...
+ Comment[pt]=Importar um ficheiro KSpread...
+ Comment[pt_BR]=Importar arquivo legível do KSpread...
+-Comment[ru]=Импорт в KSpread...
++Comment[ru]=Импорт данных из KSpread...
+ Comment[sk]=Import súboru podporovaného KSpread...
+ Comment[sl]=Uvoz datoteke za KSpread ...
+ Comment[sr]=Увози се фајл који се може читати KSpread-ом...
+Index: kexi/data/x-kexiproject-sqlite2.desktop
+===================================================================
+--- kexi/data/x-kexiproject-sqlite2.desktop (revision 427945)
++++ kexi/data/x-kexiproject-sqlite2.desktop (working copy)
+@@ -21,6 +21,7 @@
+ Comment[pt]=Projecto do Kexi em Ficheiro de Base de Dados
+ Comment[pt_BR]=Projeto Baseado em Arquivo de Banco de Dados do Kexi
+ Comment[ru]=Проект Kexi с хранилищем данных в файлах
++Comment[sl]=Na datotekah zasnovan projekt zbirke podatkov Kexi
+ Comment[sr]=Kexi-јев пројекат базе података заснован на фајлу
+ Comment[sr@Latn]=Kexi-jev projekat baze podataka zasnovan na fajlu
+ Comment[sv]=Kexi filbaserat databasprojekt
+Index: kexi/data/x-kexiproject-sqlite3.desktop
+===================================================================
+--- kexi/data/x-kexiproject-sqlite3.desktop (revision 427945)
++++ kexi/data/x-kexiproject-sqlite3.desktop (working copy)
+@@ -21,6 +21,7 @@
+ Comment[pt]=Projecto do Kexi em Ficheiro de Base de Dados
+ Comment[pt_BR]=Projeto Baseado em Arquivo de Banco de Dados do Kexi
+ Comment[ru]=Проект Kexi с хранилищем данных в файлах
++Comment[sl]=Na datotekah zasnovan projekt zbirke podatkov Kexi
+ Comment[sr]=Kexi-јев пројекат базе података заснован на фајлу
+ Comment[sr@Latn]=Kexi-jev projekat baze podataka zasnovan na fajlu
+ Comment[sv]=Kexi filbaserat databasprojekt
+Index: kexi/data/x-kexiproject-sqlite.desktop
+===================================================================
+--- kexi/data/x-kexiproject-sqlite.desktop (revision 427945)
++++ kexi/data/x-kexiproject-sqlite.desktop (working copy)
+@@ -22,6 +22,7 @@
+ Comment[pt]=Projecto do Kexi em Ficheiro de Base de Dados
+ Comment[pt_BR]=Projeto Baseado em Arquivo de Banco de Dados do Kexi
+ Comment[ru]=Проект Kexi с хранилищем данных в файлах
++Comment[sl]=Na datotekah zasnovan projekt zbirke podatkov Kexi
+ Comment[sr]=Kexi-јев пројекат базе података заснован на фајлу
+ Comment[sr@Latn]=Kexi-jev projekat baze podataka zasnovan na fajlu
+ Comment[sv]=Kexi filbaserat databasprojekt
+Index: kexi/data/kde32compat/x-sqlite2.desktop
+===================================================================
+--- kexi/data/kde32compat/x-sqlite2.desktop (revision 427945)
++++ kexi/data/kde32compat/x-sqlite2.desktop (working copy)
+@@ -21,6 +21,7 @@
+ Comment[pt]=Ficheiro de Base de Dados do SQLite2
+ Comment[pt_BR]=Ficheiro de Base de Dados do SQLite2
+ Comment[ru]=База данных SQLite2
++Comment[sl]=Datoteka zbirke podatkov SQLite2
+ Comment[sr]=Фајл базе података SQLite2
+ Comment[sr@Latn]=Fajl baze podataka SQLite2
+ Comment[sv]=SQLite2-databasfil
+Index: kexi/data/kde32compat/x-sqlite3.desktop
+===================================================================
+--- kexi/data/kde32compat/x-sqlite3.desktop (revision 427945)
++++ kexi/data/kde32compat/x-sqlite3.desktop (working copy)
+@@ -20,6 +20,7 @@
+ Comment[pt]=Ficheiro de Base de Dados do SQLite3
+ Comment[pt_BR]=Ficheiro de Base de Dados do SQLite3
+ Comment[ru]=База данных SQLite3
++Comment[sl]=Datoteka zbirke podatkov SQLite3
+ Comment[sr]=Фајл базе података SQLite3
+ Comment[sr@Latn]=Fajl baze podataka SQLite3
+ Comment[sv]=SQLite3-databasfil
+Index: kexi/data/kexiscripthandler.desktop
+===================================================================
+--- kexi/data/kexiscripthandler.desktop (revision 427945)
++++ kexi/data/kexiscripthandler.desktop (working copy)
+@@ -5,6 +5,7 @@
+
+ GenericName=Scripts
+ GenericName[br]=Urzhiaouegoù
++GenericName[cy]=Sgriptiau
+ GenericName[da]=Scripter
+ GenericName[de]=Skripte
+ GenericName[el]=Σενάρια
+@@ -27,6 +28,7 @@
+ GenericName[zh_CN]=脚本
+ Name=Scripts
+ Name[br]=Urzhiaouegoù
++Name[cy]=Sgriptiau
+ Name[da]=Scripter
+ Name[de]=Skripte
+ Name[el]=Σενάρια
+Index: kexi/formeditor/kdevelop_plugin/kformdesigner_kdev_part.desktop
+===================================================================
+--- kexi/formeditor/kdevelop_plugin/kformdesigner_kdev_part.desktop (revision 427945)
++++ kexi/formeditor/kdevelop_plugin/kformdesigner_kdev_part.desktop (working copy)
+@@ -17,6 +17,7 @@
+ Name[pt]='Plugin' para o KDevelop de Desenho de Formulários
+ Name[pt_BR]=Plugin do Desenhista de Formulário do KDevelop
+ Name[ru]=Модуль форм KDevelop
++Name[sl]=Vstavek za oblikovanje obrazcev za KDevelop
+ Name[sr]=Прикључак дизајнера форми за KDevelop
+ Name[sr@Latn]=Priključak dizajnera formi za KDevelop
+ Name[sv]=KDevelop insticksprogram för formulärkonstruktion
+Index: tools/thumbnail/kofficethumbnail.desktop
+===================================================================
+--- tools/thumbnail/kofficethumbnail.desktop (revision 427945)
++++ tools/thumbnail/kofficethumbnail.desktop (working copy)
+@@ -20,6 +20,7 @@
+ Name[fi]=KOffice-tiedostot
+ Name[fo]=KSkrivstovu-fílir
+ Name[fr]=Fichiers KOffice
++Name[ga]=Comhaid KOffice
+ Name[he]=קבצי KOffice
+ Name[hr]=KOffice datoteke
+ Name[hu]=KOffice-fájlok
+Index: tools/kfile-plugins/koffice/kfile_koffice.desktop
+===================================================================
+--- tools/kfile-plugins/koffice/kfile_koffice.desktop (revision 427945)
++++ tools/kfile-plugins/koffice/kfile_koffice.desktop (working copy)
+@@ -5,6 +5,7 @@
+ Name[af]=Koffice Inligting
+ Name[ar]=معلومات KOffice
+ Name[bg]=Информация за KOffice
++Name[br]=Titouroù diwar-benn KOffice
+ Name[ca]=Informació KOffice
+ Name[cs]=KOffice info
+ Name[cy]=Gwybodaeth KOffice
+@@ -18,6 +19,7 @@
+ Name[fi]=KOffice tiedot
+ Name[fo]=KSkrivstovu-upplýsingar
+ Name[fr]=Informations sur KOffice
++Name[ga]=Eolas faoi KOffice
+ Name[he]=מידע KOffice
+ Name[hu]=KOffice-információ
+ Name[it]=Informazioni KOffice
+@@ -32,7 +34,7 @@
+ Name[pl]=Dane koffice
+ Name[pt]=Informação do KOffice
+ Name[pt_BR]=Informações do KOffice
+-Name[ru]=Информация о KOffice
++Name[ru]=Информация KOffice
+ Name[se]=KOffice-dieđut
+ Name[sk]=Informácie o KOffice
+ Name[sl]=Informacije o KOffice
+Index: tools/kfile-plugins/ooo/kfile_ooo.desktop
+===================================================================
+--- tools/kfile-plugins/ooo/kfile_ooo.desktop (revision 427945)
++++ tools/kfile-plugins/ooo/kfile_ooo.desktop (working copy)
+@@ -13,6 +13,7 @@
+ Name[et]=OpenOffice.org-i info
+ Name[fi]=KOffice tiedot
+ Name[fr]=Informations sur OpenOffice.org
++Name[ga]=Eolas faoi OpenOffice.org
+ Name[he]=מידע OpenOffice.org
+ Name[hu]=OpenOffice.org-információ
+ Name[it]=Informazioni OpenOffice.org
+@@ -23,7 +24,7 @@
+ Name[pl]=Informacja OpenOffice.org
+ Name[pt]=Informação do OpenOffice.org
+ Name[pt_BR]=Informações do OpenOffice.org
+-Name[ru]=Информация об OpenOffice.org
++Name[ru]=Информация OpenOffice.org
+ Name[se]=OpenOffice.org-dieđut
+ Name[sk]=Informácie o OpenOffice.org
+ Name[sl]=Informacije o OpenOffice.org
+Index: lib/kofficecore/koApplication.cc
+===================================================================
+--- lib/kofficecore/koApplication.cc (revision 427945)
++++ lib/kofficecore/koApplication.cc (working copy)
+@@ -149,7 +149,10 @@
+ shell->setRootDocument( doc );
+ }
+ else
++ {
++ delete doc;
+ return false;
++ }
+
+ QObject::disconnect(doc, SIGNAL(sigProgress(int)), shell, SLOT(slotProgress(int)));
+ } else {
+Index: lib/kofficecore/koMainWindow.cc
+===================================================================
+--- lib/kofficecore/koMainWindow.cc (revision 427945)
++++ lib/kofficecore/koMainWindow.cc (working copy)
+@@ -1033,6 +1033,13 @@
+ if ( !newdoc->initDoc( (KoDocument::InitDocFlags)initDocFlags, this ) )
+ {
+ delete newdoc;
++ // See cancelQuits() in KoTemplateChooseDia.
++ // The quit() must be done here so that the KoDocument got deleted already.
++ bool onlyDoc = !KoDocument::documentList() || KoDocument::documentList()->isEmpty();
++ bool onlyMainWindow = !KMainWindow::memberList || KMainWindow::memberList->count() <= 1;
++ if ( onlyDoc && onlyMainWindow && kapp->instanceName() != "koshell" ) {
++ kapp->quit();
++ }
+ return;
+ }
+ disconnect(newdoc, SIGNAL(sigProgress(int)), this, SLOT(slotProgress(int)));
+Index: lib/kofficecore/koDocument.cc
+===================================================================
+--- lib/kofficecore/koDocument.cc (revision 427945)
++++ lib/kofficecore/koDocument.cc (working copy)
+@@ -890,6 +890,9 @@
+ kdDebug(30003)<<k_funcinfo<<" external (don't save) url:" << childDoc->url().url()<<endl;
+ path = childDoc->url().url();
+ }
++ // OOo uses a trailing slash for the path to embedded objects (== directories)
++ if ( !path.endsWith( "/" ) )
++ path += '/';
+ manifestWriter->addManifestEntry( path, childDoc->nativeOasisMimeType() );
+ }
+ }
+@@ -1793,7 +1796,9 @@
+ //if ( !oasisStore.loadAndParse( "tar:/META-INF/manifest.xml", manifestDoc, d->lastErrorMessage ) )
+ // return false;
+
+- (void)oasisStore.loadAndParse( "settings.xml", settingsDoc, d->lastErrorMessage );
++ if ( store->hasFile( "settings.xml" ) ) {
++ (void)oasisStore.loadAndParse( "settings.xml", settingsDoc, d->lastErrorMessage );
++ }
+ if ( !loadOasis( contentDoc, oasisStyles, settingsDoc, store ) )
+ return false;
+
+@@ -1920,9 +1925,12 @@
+ KoDocument *doc = it.current()->document();
+ if ( doc )
+ {
+- if ( doc->isStoredExtern() ) //###TODO: Handle non-native mimetype docs
++ bool foo = doc->isStoredExtern();
++ kdDebug(36001) << "========== isStoredExtern() returned "
++ << foo << " ==========" << endl;
++
++ if ( foo ) //###TODO: Handle non-native mimetype docs
+ {
+- if ( doc->isModified() )
+ {
+ kdDebug(30003)<<k_funcinfo<<" found modified child: "<<doc->url().url()<<" extern="<<doc->isStoredExtern()<<endl;
+ if ( doc->queryCloseDia() == KMessageBox::Cancel )
+Index: lib/kofficecore/koDocumentChild.cc
+===================================================================
+--- lib/kofficecore/koDocumentChild.cc (revision 427945)
++++ lib/kofficecore/koDocumentChild.cc (working copy)
+@@ -230,6 +230,8 @@
+ QString relPath = KURL( m_tmpURL ).path();
+ path += relPath.mid( 1 ); // remove leading '/'
+ }
++ if ( !path.endsWith( "/" ) )
++ path += '/';
+ const QString mimeType = KoOasisStore::mimeForPath( manifestDoc, path );
+ kdDebug() << k_funcinfo << "path for manifest file=" << path << " mimeType=" << mimeType << endl;
+ if ( mimeType.isEmpty() ) {
+@@ -312,6 +314,8 @@
+ }
+ if ( !res )
+ {
++ // Keep the error message from the attempted loading
++ QString errorMessage = d->m_doc->errorMessage();
+ delete d->m_doc;
+ d->m_doc = 0;
+ QString tmpURL = m_tmpURL; // keep a copy, createUnavailDocument will erase it
+@@ -322,7 +326,7 @@
+ d->m_doc->setProperty( "realURL", tmpURL ); // so that it gets saved correctly
+ d->m_doc->setStoreInternal( true );
+ if ( internalURL )
+- d->m_doc->setProperty( "unavailReason", i18n( "Could not load embedded object." ) );
++ d->m_doc->setProperty( "unavailReason", i18n( "Could not load embedded object." ) + "\n" + errorMessage );
+ else
+ d->m_doc->setProperty( "unavailReason", i18n( "External document not found:\n%1" ).arg( tmpURL ) );
+ }
+Index: lib/kofficeui/koTemplateChooseDia.cc
+===================================================================
+--- lib/kofficeui/koTemplateChooseDia.cc (revision 427945)
++++ lib/kofficeui/koTemplateChooseDia.cc (working copy)
+@@ -210,6 +210,7 @@
+ d=0L;
+ }
+
++// Keep in sync with KoMainWindow::chooseNewDocument
+ static bool cancelQuits() {
+ bool onlyDoc = !KoDocument::documentList() || KoDocument::documentList()->count() <= 1;
+ bool onlyMainWindow = !KMainWindow::memberList || KMainWindow::memberList->count() <= 1;
+@@ -261,10 +262,6 @@
+ }
+
+ delete dlg;
+- if ( rt == Cancel && dialogType == Everything && cancelQuits() )
+- // The button says quit, so let's quit
+- kapp->quit();
+-
+ return rt;
+ }
+
+@@ -458,8 +455,8 @@
+ d->m_jwidget->showPage(templateNum);
+ else if ( defaultTemplateGroup != -1)
+ d->m_jwidget->showPage(defaultTemplateGroup);
+-
+
++
+ // Set the initially selected template, possibly from the last usage of the dialog
+ currentChanged(itemtoselect);
+
+Index: lib/kofficeui/koUnitWidgets.h
+===================================================================
+--- lib/kofficeui/koUnitWidgets.h (revision 427945)
++++ lib/kofficeui/koUnitWidgets.h (working copy)
+@@ -77,7 +77,7 @@
+ */
+ QString getVisibleText( double value ) const;
+ /**
+- * Transfrom a string inot a double, while taking care of locale specific symbols.
++ * Transfrom a string into a double, while taking care of locale specific symbols.
+ * @param str the string to transform into a number
+ * @param ok true, if the conversion was succesful
+ * @return the value as double
+@@ -94,11 +94,11 @@
+ * Spin box for double precision numbers with unit display
+ * \since 1.4 (change of behavior)
+ */
+-class KOFFICEUI_EXPORT KoUnitDoubleSpinBox : public KDoubleSpinBox, public KoUnitDoubleBase
++class KOFFICEUI_EXPORT KoBuggyUnitDoubleSpinBox : public KDoubleSpinBox, public KoUnitDoubleBase
+ {
+ public:
+ // lower, upper, step and value are in pt
+- KoUnitDoubleSpinBox( QWidget *parent, double lower, double upper, double step, double value = 0.0,
++ KoBuggyUnitDoubleSpinBox( QWidget *parent, double lower, double upper, double step, double value = 0.0,
+ KoUnit::Unit unit = KoUnit::U_PT, unsigned int precision = 2, const char *name = 0 );
+
+ virtual void changeValue( double );
+@@ -123,6 +123,22 @@
+ };
+
+ /**
++ * Temporary class that will be merged with koBuggyUnitDoubleSpinBox
++ * and renamed into KoUnitDoubleSpinBox when all the users of that
++ * class have been converted.
++ */
++class KOFFICEUI_EXPORT KoUnitDoubleSpinBox2 : public KoBuggyUnitDoubleSpinBox
++{
++public:
++ // lower, upper, step and value are in pt
++ KoUnitDoubleSpinBox2( QWidget *parent, double lower, double upper, double step, double value = 0.0,
++ KoUnit::Unit unit = KoUnit::U_PT, unsigned int precision = 2, const char *name = 0 );
++
++ virtual void changeValue( double );
++};
++
++
++/**
+ * Line edit for double precision numbers with unit display
+ * \since 1.4 (change of behavior)
+ */
+Index: lib/kofficeui/kolinewidthaction.cpp
+===================================================================
+--- lib/kofficeui/kolinewidthaction.cpp (revision 427945)
++++ lib/kofficeui/kolinewidthaction.cpp (working copy)
+@@ -160,7 +160,7 @@
+ {
+ public:
+ KoUnit::Unit m_unit;
+- KoUnitDoubleSpinBox* m_lineWidthUSBox;
++ KoBuggyUnitDoubleSpinBox* m_lineWidthUSBox;
+ };
+
+ KoLineWidthChooser::KoLineWidthChooser(QWidget* parent, const char* name)
+@@ -174,7 +174,7 @@
+ setMainWidget(mainWidget);
+ QGridLayout* gl = new QGridLayout(mainWidget, 1, 2, KDialog::marginHint(), KDialog::spacingHint());
+ QLabel* textLbl = new QLabel(i18n("Line width:"), mainWidget);
+- d->m_lineWidthUSBox = new KoUnitDoubleSpinBox(mainWidget, 0.0, 1000.0, 0.1, 1.0, d->m_unit, 2);
++ d->m_lineWidthUSBox = new KoBuggyUnitDoubleSpinBox(mainWidget, 0.0, 1000.0, 0.1, 1.0, d->m_unit, 2);
+ gl->addWidget(textLbl, 0, 0);
+ gl->addWidget(d->m_lineWidthUSBox, 0, 1);
+ }
+Index: lib/kofficeui/koUnitWidgets.cc
+===================================================================
+--- lib/kofficeui/koUnitWidgets.cc (revision 427945)
++++ lib/kofficeui/koUnitWidgets.cc (working copy)
+@@ -25,6 +25,7 @@
+ #include <qpushbutton.h>
+ #include <qlayout.h>
+
++
+ KoUnitDoubleValidator::KoUnitDoubleValidator( KoUnitDoubleBase *base, QObject *parent, const char *name )
+ : KDoubleValidator( parent, name ), m_base( base )
+ {
+@@ -108,7 +109,10 @@
+ }
+
+
+-KoUnitDoubleSpinBox::KoUnitDoubleSpinBox( QWidget *parent, double lower, double upper, double step, double value, KoUnit::Unit unit, unsigned int precision, const char *name )
++// ----------------------------------------------------------------
++
++
++KoBuggyUnitDoubleSpinBox::KoBuggyUnitDoubleSpinBox( QWidget *parent, double lower, double upper, double step, double value, KoUnit::Unit unit, unsigned int precision, const char *name )
+ : KDoubleSpinBox( lower, upper, step, value, precision, parent, name ), KoUnitDoubleBase( unit, precision ),
+ m_lowerInPoints( lower ), m_upperInPoints( upper ), m_stepInPoints( step )
+ {
+@@ -120,7 +124,7 @@
+ }
+
+ void
+-KoUnitDoubleSpinBox::changeValue( double val )
++KoBuggyUnitDoubleSpinBox::changeValue( double val )
+ {
+ KDoubleSpinBox::setValue( val );
+ // TODO: emit valueChanged ONLY if the value was out-of-bounds
+@@ -129,7 +133,7 @@
+ }
+
+ void
+-KoUnitDoubleSpinBox::setUnit( KoUnit::Unit unit )
++KoBuggyUnitDoubleSpinBox::setUnit( KoUnit::Unit unit )
+ {
+ double oldvalue = KoUnit::fromUserValue( KDoubleSpinBox::value(), m_unit );
+ KDoubleSpinBox::setMinValue( KoUnit::toUserValue( m_lowerInPoints, unit ) );
+@@ -140,31 +144,53 @@
+ setSuffix( KoUnit::unitName( unit ).prepend( ' ' ) );
+ }
+
+-double KoUnitDoubleSpinBox::value( void ) const
++double KoBuggyUnitDoubleSpinBox::value( void ) const
+ {
+ return KoUnit::fromUserValue( KDoubleSpinBox::value(), m_unit );
+ }
+
+-void KoUnitDoubleSpinBox::setMinValue( double min )
++void KoBuggyUnitDoubleSpinBox::setMinValue( double min )
+ {
+ m_lowerInPoints = min;
+ KDoubleSpinBox::setMinValue( KoUnit::toUserValue( m_lowerInPoints, m_unit ) );
+ }
+
+-void KoUnitDoubleSpinBox::setMaxValue( double max )
++void KoBuggyUnitDoubleSpinBox::setMaxValue( double max )
+ {
+ m_upperInPoints = max;
+ KDoubleSpinBox::setMaxValue( KoUnit::toUserValue( m_upperInPoints, m_unit ) );
+ }
+
+-void KoUnitDoubleSpinBox::setLineStep( double step )
++void KoBuggyUnitDoubleSpinBox::setLineStep( double step )
+ {
+ m_stepInPoints = step;
+ KDoubleSpinBox::setLineStep( KoUnit::toUserValue( m_stepInPoints, m_unit ) );
+ }
+
+
++// ----------------------------------------------------------------
+
++
++KoUnitDoubleSpinBox2::KoUnitDoubleSpinBox2( QWidget *parent, double lower, double upper, double step, double value, KoUnit::Unit unit, unsigned int precision, const char *name )
++ : KoBuggyUnitDoubleSpinBox( parent, lower, upper, step, value, unit, precision, name )
++{
++ m_validator = new KoUnitDoubleValidator( this, this );
++ QSpinBox::setValidator( m_validator );
++ setAcceptLocalizedNumbers( true );
++ setUnit( unit );
++ changeValue( value );
++}
++
++void
++KoUnitDoubleSpinBox2::changeValue( double val )
++{
++ KDoubleSpinBox::setValue( KoUnit::toUserValue( val, m_unit ) );
++}
++
++
++// ----------------------------------------------------------------
++
++
+ KoUnitDoubleLineEdit::KoUnitDoubleLineEdit( QWidget *parent, double lower, double upper, double value, KoUnit::Unit unit,
+ unsigned int precision, const char *name )
+ : KLineEdit( parent, name ), KoUnitDoubleBase( unit, precision ), m_value( value ), m_lower( lower ), m_upper( upper ),
+Index: lib/CHANGES
+===================================================================
+--- lib/CHANGES (revision 427945)
++++ lib/CHANGES (working copy)
+@@ -1,6 +1,15 @@
++Changes after KOffice-1.4
++=========================
++KOfficeCore:
++- OASIS loading/saving fix for embedded objects
++- Fix crash when pressing Quit in the initial startup dialog (#107911)
++
++KoText:
++- Fix crash when updating a TOC with a table inside it (#107961)
++
+ Changes after KOffice-1.4-beta1
+ ===============================
+-KForumula:
++KFormula:
+ - Disable the matrix actions when the cursor isn't in a matrix element.
+ - Do not crash when exporting to PNG.
+
+Index: lib/kotext/kotextdocument.cc
+===================================================================
+--- lib/kotext/kotextdocument.cc (revision 427945)
++++ lib/kotext/kotextdocument.cc (working copy)
+@@ -135,6 +135,7 @@
+ flow_->clear();
+ while ( fParag ) {
+ KoTextParag *p = fParag->next();
++ fParag->string()->clear(); // avoid the "unregister custom items" code, not needed
+ delete fParag;
+ fParag = p;
+ }
+@@ -142,6 +143,7 @@
+ if ( createEmptyParag )
+ fParag = lParag = createParag( this );
+ selections.clear();
++ customItems.clear();
+ }
+
+ /*
+Index: lib/kotext/kotextparag.cc
+===================================================================
+--- lib/kotext/kotextparag.cc (revision 427945)
++++ lib/kotext/kotextparag.cc (working copy)
+@@ -109,6 +109,17 @@
+ KoTextParag::~KoTextParag()
+ {
+ //kdDebug(32500) << "KoTextParag::~KoTextParag " << this << " id=" << paragId() << endl;
++
++ // #107961: unregister custom items; KoTextString::clear() will delete them
++ const int len = str->length();
++ for ( int i = 0; i < len; ++i ) {
++ KoTextStringChar *c = at( i );
++ if ( doc && c->isCustom() ) {
++ doc->unregisterCustomItem( c->customItem(), this );
++ //removeCustomItem();
++ }
++ }
++
+ delete str;
+ str = 0;
+ // if ( doc && p == doc->minwParag ) {
+Index: filters/kword/ascii/kword_ascii_import.desktop
+===================================================================
+--- filters/kword/ascii/kword_ascii_import.desktop (revision 427945)
++++ filters/kword/ascii/kword_ascii_import.desktop (working copy)
+@@ -5,6 +5,7 @@
+ Name[br]=Sil Enporzh ASCII KWord
+ Name[ca]=Filtre d'importació ASCII per a KWord
+ Name[cs]=KWord ASCII importní filtr
++Name[cy]=Hidlen Fewnforio Ascii KWord
+ Name[da]=KWord ASCII-importfilter
+ Name[de]=ASCII-Importfilter für KWord
+ Name[el]=Φίλτρο εισαγωγής ascii του KWord
+Index: filters/kspread/excel/sidewinder/excel.cpp
+===================================================================
+--- filters/kspread/excel/sidewinder/excel.cpp (revision 427945)
++++ filters/kspread/excel/sidewinder/excel.cpp (working copy)
+@@ -5412,7 +5412,7 @@
+ case 10: valueFormat = "0.00%"; break;
+ case 11: valueFormat = "0.00E+00"; break;
+ case 12: valueFormat = "#?/?"; break;
+- case 13: valueFormat = "#\?\?\/\?\?"; break;
++ case 13: valueFormat = "#\?\?/\?\?"; break;
+ case 14: valueFormat = "M/D/YY"; break;
+ case 15: valueFormat = "D-MMM-YY"; break;
+ case 16: valueFormat = "D-MMM"; break;
+Index: filters/karbon/svg/svgexport.cc
+===================================================================
+--- filters/karbon/svg/svgexport.cc (revision 427945)
++++ filters/karbon/svg/svgexport.cc (working copy)
+@@ -36,8 +36,10 @@
+ #include "vfill.h"
+ #include "vgradient.h"
+ #include "vgroup.h"
++#include "vimage.h"
+ #include "vlayer.h"
+ #include "vpath.h"
++#include "vpattern.h"
+ #include "vsegment.h"
+ #include "vselection.h"
+ #include "vstroke.h"
+@@ -119,11 +121,9 @@
+ "\"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd\">"
+ << endl;
+
+- // add some PR
++ // add some PR. one line is more than enough.
+ *m_defs <<
+- "<!-- This file was created using the SVG export filter from Karbon14, a free vector drawing app. -->" << endl;
+- *m_defs <<
+- "<!-- It is part of koffice, the free, integrated office suite for KDE (http://www.koffice.org/). -->" << endl;
++ "<!-- Created using Karbon14, part of koffice: http://www.koffice.org/karbon -->" << endl;
+
+ *m_defs <<
+ "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"" <<
+@@ -164,7 +164,30 @@
+ *m_body << "</g>" << endl;
+ }
+
++// horrible but at least something gets exported now
++// will need this for patterns
+ void
++SvgExport::visitVImage( VImage& image )
++{
++ *m_body << "<image ";
++ VVisitor::visitVImage( image );
++ *m_body << "x=\"" << "\" ";
++ *m_body << "y=\"" << "\" ";
++ *m_body << "width=\"" << "\" ";
++ *m_body << "height=\"" << "\" ";
++ *m_body << "xlink:href=\"" << "\"";
++ *m_body << " />" << endl;
++}
++
++void
++SvgExport::visitVLayer( VLayer& layer )
++{
++ *m_body << "<g" << getID( &layer ) << ">" << endl;
++ VVisitor::visitVLayer( layer );
++ *m_body << "</g>" << endl;
++}
++
++void
+ SvgExport::visitVPath( VPath& composite )
+ {
+ *m_body << "<path" << getID( &composite );
+@@ -261,9 +284,50 @@
+ *m_defs << "</radialGradient>" << endl;
+ *m_body << "url(#" << uid << ")";
+ }
++ // gah! pointless abbreviation of conical to conic
++ else if( grad.type() == VGradient::conic )
++ {
++ // fake conical grad as radial.
++ // fugly but better than data loss.
++ *m_defs << "<radialGradient id=\"" << uid << "\" ";
++ *m_defs << "gradientUnits=\"userSpaceOnUse\" ";
++ *m_defs << "cx=\"" << grad.origin().x() << "\" ";
++ *m_defs << "cy=\"" << grad.origin().y() << "\" ";
++ *m_defs << "fx=\"" << grad.focalPoint().x() << "\" ";
++ *m_defs << "fy=\"" << grad.focalPoint().y() << "\" ";
++ double r = sqrt( pow( grad.vector().x() - grad.origin().x(), 2 ) + pow( grad.vector().y() - grad.origin().y(), 2 ) );
++ *m_defs << "r=\"" << QString().setNum( r ) << "\" ";
++ if( grad.repeatMethod() == VGradient::reflect )
++ *m_defs << "spreadMethod=\"reflect\" ";
++ else if( grad.repeatMethod() == VGradient::repeat )
++ *m_defs << "spreadMethod=\"repeat\" ";
++ *m_defs << ">" << endl;
++
++ // color stops
++ getColorStops( grad.colorStops() );
++
++ *m_defs << "</radialGradient>" << endl;
++ *m_body << "url(#" << uid << ")";
++ }
+ }
+
++// better than nothing
+ void
++SvgExport::getPattern( const VPattern & patt )
++{
++ QString uid = createUID();
++ *m_defs << "<pattern id=\"" << uid << "\" ";
++ *m_defs << "width=\"" << "\" ";
++ *m_defs << "height=\"" << "\" ";
++ *m_defs << "patternUnits=\"userSpaceOnUse\" ";
++ *m_defs << "patternContentUnits=\"userSpaceOnUse\" ";
++ *m_defs << " />" << endl;
++ // TODO: insert hard work here ;)
++ *m_defs << "</pattern>" << endl;
++ *m_body << "url(#" << uid << ")";
++}
++
++void
+ SvgExport::getFill( const VFill& fill )
+ {
+ *m_body << " fill=\"";
+@@ -271,6 +335,8 @@
+ *m_body << "none";
+ else if( fill.type() == VFill::grad )
+ getGradient( fill.gradient() );
++ else if( fill.type() == VFill::patt )
++ getPattern( fill.pattern() );
+ else
+ getHexColor( m_body, fill.color() );
+ *m_body << "\"";
+Index: filters/karbon/svg/svgexport.h
+===================================================================
+--- filters/karbon/svg/svgexport.h (revision 427945)
++++ filters/karbon/svg/svgexport.h (working copy)
+@@ -35,6 +35,7 @@
+ class VDocument;
+ class VFill;
+ class VGroup;
++class VImage;
+ class VLayer;
+ class VSubpath;
+ class VStroke;
+@@ -55,6 +56,8 @@
+ virtual void visitVPath( VPath& composite );
+ virtual void visitVDocument( VDocument& document );
+ virtual void visitVGroup( VGroup& group );
++ virtual void visitVImage( VImage& image );
++ virtual void visitVLayer( VLayer& layer );
+ virtual void visitVSubpath( VSubpath& path );
+ virtual void visitVText( VText& text );
+
+@@ -62,6 +65,7 @@
+ void getColorStops( const QPtrVector<VColorStop> &colorStops );
+ void getFill( const VFill& fill );
+ void getGradient( const VGradient& grad );
++ void getPattern( const VPattern& patt );
+ void getHexColor( QTextStream *, const VColor& color );
+ QString getID( VObject *obj );
+
+Index: filters/generic_wrapper/generic_filter.desktop
+===================================================================
+--- filters/generic_wrapper/generic_filter.desktop (revision 427945)
++++ filters/generic_wrapper/generic_filter.desktop (working copy)
+@@ -3,6 +3,7 @@
+ Name=Generic KOffice Filter
+ Name[ca]=Filtre genèric de KOffice
+ Name[cs]=Obecný filtr KOffice
++Name[cy]=Hidlen generig KOffice
+ Name[da]=Generisk KOffice-filter
+ Name[de]=Generischer KOffice-Filter
+ Name[el]=Γενικό φίλτρο του KOffice
+Index: krita/plugins/cimg/CImg.h
+===================================================================
+--- krita/plugins/cimg/CImg.h (revision 427945)
++++ krita/plugins/cimg/CImg.h (working copy)
+@@ -5135,7 +5135,7 @@
+ if (ny1<0 || ny0>=dimy()) return *this;
+ if (ny0<0) { nx0-=ny0*(nx1-nx0)/(ny1-ny0); ny0=0; }
+ if (ny1>=dimy()) { nx1+=(ny1-dimy())*(nx0-nx1)/(ny1-ny0); ny1=dimy()-1;}
+- const unsigned int dmax = (unsigned int)cimg::max(std::abs(nx1-nx0),ny1-ny0), whz = width*height*depth;
++ const unsigned int dmax = (unsigned int)cimg::max(std::abs((long int)(nx1-nx0)),(long int)(ny1-ny0)), whz = width*height*depth;
+ const float px = dmax?(nx1-nx0)/(float)dmax:0, py = dmax?(ny1-ny0)/(float)dmax:0;
+ float x = (float)nx0, y = (float)ny0;
+ if (opacity>=1) for (unsigned int t=0; t<=dmax; t++) {
+Index: krita/plugins/tool_polygon/kritatoolpolygon.desktop
+===================================================================
+--- krita/plugins/tool_polygon/kritatoolpolygon.desktop (revision 427945)
++++ krita/plugins/tool_polygon/kritatoolpolygon.desktop (working copy)
+@@ -2,6 +2,7 @@
+ Encoding=UTF-8
+ Name=Polygon Tool
+ Name[br]=Ostilh liestueg
++Name[cy]=Erfyn Polygon
+ Name[da]=Polygonværktøj
+ Name[de]=Polygon-Werkzeug
+ Name[el]=Εργαλείο πολυγώνου
+Index: krita/plugins/tool_polyline/kritatoolpolyline.desktop
+===================================================================
+--- krita/plugins/tool_polyline/kritatoolpolyline.desktop (revision 427945)
++++ krita/plugins/tool_polyline/kritatoolpolyline.desktop (working copy)
+@@ -1,6 +1,7 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+ Name=Polyline Tool
++Name[cy]=Erfyn Polylinell
+ Name[da]=Flerlinjeværktøj
+ Name[de]=Polylinien-Werkzeug
+ Name[el]=Εργαλείο Polyline
+Index: krita/plugins/imagemagick/kritamagick.desktop
+===================================================================
+--- krita/plugins/imagemagick/kritamagick.desktop (revision 427945)
++++ krita/plugins/imagemagick/kritamagick.desktop (working copy)
+@@ -14,7 +14,8 @@
+ Name[nn]=ImageMagick-omslag
+ Name[pt]=Interface para ImageMagick
+ Name[pt_BR]=Wrapper do ImageMagick
+-Name[ru]=Интерфейс к ImageMagick
++Name[ru]=Оболочка к ImageMagick
++Name[sl]=Ovojnik za ImageMagick
+ Name[sr]=Омотач ImageMagick-а
+ Name[sr@Latn]=Omotač ImageMagick-a
+ Name[sv]=ImageMagick-gränssnitt
+@@ -35,7 +36,7 @@
+ Comment[nn]=ImageMagick-basert import, eksport og filkonvertering
+ Comment[pt]=Importação/exportação e conversão de ficheiro com o ImageMagick
+ Comment[pt_BR]=Conversão de arquivos e filtro de importação/exportação baseado no ImageMagick
+-Comment[ru]=Фильтр импорта/экспорта рисунков посредством ImageMagick
++Comment[ru]=Фильтр импорта/экспорта и преобразования формата посредством ImageMagick
+ Comment[sr]=Увоз, извоз и конверзија фајлова помоћу ImageMagick-а
+ Comment[sr@Latn]=Uvoz, izvoz i konverzija fajlova pomoću ImageMagick-a
+ Comment[sv]=ImageMagick-baserad import, export och filkonvertering
+Index: krita/plugins/tool_crop/kritatoolcrop.desktop
+===================================================================
+--- krita/plugins/tool_crop/kritatoolcrop.desktop (revision 427945)
++++ krita/plugins/tool_crop/kritatoolcrop.desktop (working copy)
+@@ -16,7 +16,7 @@
+ Name[nn]=Beskjæringsverktøy
+ Name[pt]=Ferramenta de Recorte
+ Name[pt_BR]=Ferramenta de Recorte
+-Name[ru]=Инструмент обрезки
++Name[ru]=Обрезка
+ Name[sl]=Orodje za obrezavo
+ Name[sr]=Алат за сасецање
+ Name[sr@Latn]=Alat za sasecanje
+Index: krita/plugins/selectiontools/kritaselectiontools.desktop
+===================================================================
+--- krita/plugins/selectiontools/kritaselectiontools.desktop (revision 427945)
++++ krita/plugins/selectiontools/kritaselectiontools.desktop (working copy)
+@@ -2,12 +2,14 @@
+ Encoding=UTF-8
+ Name=Selection Tools
+ Name[ca]=Eines de selecció
++Name[cy]=Offer Detholi
+ Name[da]=Markeringsværktøj
+ Name[de]=Auswahlwerkzeuge
+ Name[el]=Εργαλεία επιλογής
+ Name[es]=Herramientas de selección
+ Name[et]=Valikutööriistad
+ Name[fr]=Outils de sélection
++Name[ga]=Uirlisí Roghnúcháin
+ Name[he]=כלי בחירה
+ Name[hu]=Kiválasztó eszközök
+ Name[it]=Strumenti di selezione
+Index: krita/plugins/tool_star/kritatoolstar.desktop
+===================================================================
+--- krita/plugins/tool_star/kritatoolstar.desktop (revision 427945)
++++ krita/plugins/tool_star/kritatoolstar.desktop (working copy)
+@@ -2,6 +2,7 @@
+ Encoding=UTF-8
+ Name=Star Tool
+ Name[br]=Ostilh steredenn
++Name[cy]=Erfyn Seren
+ Name[da]=Stjerneværktøj
+ Name[de]=Sterne-Werkzeug
+ Name[el]=Εργαλείο αστέρα
+@@ -18,6 +19,7 @@
+ Name[pt]=Ferramenta de Estrelas
+ Name[pt_BR]=Ferramenta Estrela
+ Name[ru]=Звёзды
++Name[sl]=Zvezdno orodje
+ Name[sr]=Алат за звезде
+ Name[sr@Latn]=Alat za zvezde
+ Name[sv]=Stjärnverktyg
+Index: krita/plugins/tool_transform/kritatooltransform.desktop
+===================================================================
+--- krita/plugins/tool_transform/kritatooltransform.desktop (revision 427945)
++++ krita/plugins/tool_transform/kritatooltransform.desktop (working copy)
+@@ -16,7 +16,7 @@
+ Name[nn]=Beskjæringsverktøy
+ Name[pt]=Ferramenta de Recorte
+ Name[pt_BR]=Ferramenta de Recorte
+-Name[ru]=Инструмент обрезки
++Name[ru]=Обрезка
+ Name[sl]=Orodje za obrezavo
+ Name[sr]=Алат за сасецање
+ Name[sr@Latn]=Alat za sasecanje
+Index: krita/krita.desktop
+===================================================================
+--- krita/krita.desktop (revision 427945)
++++ krita/krita.desktop (working copy)
+@@ -22,6 +22,7 @@
+ GenericName[fa]=برنامه دستکاری تصویر
+ GenericName[fi]=Kuvienmuokkausohjelma
+ GenericName[fr]=Logiciel de manipulation d'images
++GenericName[ga]=Clár Ionramhála na nÍomhánna
+ GenericName[he]=תוכנית לטיפול בתמונות
+ GenericName[hr]=Program za obradu slika
+ GenericName[hu]=Képszerkesztő
+@@ -39,7 +40,7 @@
+ GenericName[pt]=Programa de Manipulação de Imagens
+ GenericName[pt_BR]=Manipulador de Imagens
+ GenericName[ro]=Program de procesare imagini
+-GenericName[ru]=Редактор графических изображений
++GenericName[ru]=Программа редактирования изображений
+ GenericName[sk]=Program pre úpravu obrázkov
+ GenericName[sl]=Program za obdelavo slik
+ GenericName[sr]=Програм за уређивање слика
+Index: krita/core/kis_paint_device.cc
+===================================================================
+--- krita/core/kis_paint_device.cc (revision 427945)
++++ krita/core/kis_paint_device.cc (working copy)
+@@ -791,24 +791,23 @@
+ QRect r = m_selection -> selectedRect();
+ r = r.normalize();
+
++ for (Q_INT32 y = 0; y < r.height(); y++) {
++ KisHLineIterator devIt = createHLineIterator(r.x(), r.y() + y, r.width(), true);
++ KisHLineIterator selectionIt = m_selection -> createHLineIterator(r.x(), r.y() + y, r.width(), false);
+
+- KisRectIterator devIt = createRectIterator(r.x(), r.y(), r.width(), r.height(), true);
+- KisRectIterator selectionIt = m_selection -> createRectIterator(r.x(), r.y(), r.width(), r.height(), false);
++ while (!devIt.isDone()) {
++ KisPixel p = toPixel(devIt.rawData());
++ KisPixel s = m_selection -> toPixel(selectionIt.rawData());
++ Q_UINT16 p_alpha, s_alpha;
++ p_alpha = p.alpha();
++ s_alpha = MAX_SELECTED - s.alpha();
+
+- while (!devIt.isDone()) {
+- KisPixel p = toPixel(devIt.rawData());
+- KisPixel s = m_selection -> toPixel(selectionIt.rawData());
+- Q_UINT16 p_alpha, s_alpha;
+- p_alpha = p.alpha();
+- s_alpha = MAX_SELECTED - s.alpha();
+-
+- p.alpha() = (Q_UINT8) ((p_alpha * s_alpha) >> 8);
++ p.alpha() = (Q_UINT8) ((p_alpha * s_alpha) >> 8);
+
+- ++devIt;
+- ++selectionIt;
++ ++devIt;
++ ++selectionIt;
++ }
+ }
+-
+-
+ }
+
+ void KisPaintDevice::applySelectionMask(KisSelectionSP mask)
+Index: krita/core/kis_selection_manager.cc
+===================================================================
+--- krita/core/kis_selection_manager.cc (revision 427945)
++++ krita/core/kis_selection_manager.cc (working copy)
+@@ -319,20 +319,22 @@
+
+ // Apply selection mask.
+
+- KisRectIterator layerIt = clip -> createRectIterator(0, 0, r.width(), r.height(), true);
+- KisRectIterator selectionIt = selection -> createRectIterator(r.x(), r.y(), r.width(), r.height(), false);
++ for (Q_INT32 y = 0; y < r.height(); y++) {
++ KisHLineIterator layerIt = clip -> createHLineIterator(0, y, r.width(), true);
++ KisHLineIterator selectionIt = selection -> createHLineIterator(r.x(), r.y() + y, r.width(), false);
+
+- while (!layerIt.isDone()) {
+- KisPixel p = clip -> toPixel(layerIt.rawData());
+- KisPixel s = selection -> toPixel(selectionIt.rawData());
+- Q_UINT16 p_alpha, s_alpha;
+- p_alpha = p.alpha();
+- s_alpha = s.alpha();
+-
+- p.alpha() = (Q_UINT8) ((p_alpha * s_alpha) >> 8);
+-
+- ++layerIt;
+- ++selectionIt;
++ while (!layerIt.isDone()) {
++ KisPixel p = clip -> toPixel(layerIt.rawData());
++ KisPixel s = selection -> toPixel(selectionIt.rawData());
++ Q_UINT16 p_alpha, s_alpha;
++ p_alpha = p.alpha();
++ s_alpha = s.alpha();
++
++ p.alpha() = (Q_UINT8) ((p_alpha * s_alpha) >> 8);
++
++ ++layerIt;
++ ++selectionIt;
++ }
+ }
+
+ // kdDebug() << "Selection copied: "
+Index: krita/core/tiles/kis_tiledrectiterator.cc
+===================================================================
+--- krita/core/tiles/kis_tiledrectiterator.cc (revision 427945)
++++ krita/core/tiles/kis_tiledrectiterator.cc (working copy)
+@@ -66,7 +66,8 @@
+ m_xInTile = m_leftInTile;
+ m_yInTile = m_topInTile;
+
+- fetchTileData(m_col, m_row);
++ if (! m_beyondEnd)
++ fetchTileData(m_col, m_row);
+ m_offset = m_pixelSize * (m_yInTile * KisTile::WIDTH + m_xInTile);
+ }
+
+Index: krita/core/builder/kis_image_magick_converter.cc
+===================================================================
+--- krita/core/builder/kis_image_magick_converter.cc (revision 427945)
++++ krita/core/builder/kis_image_magick_converter.cc (working copy)
+@@ -64,10 +64,10 @@
+ */
+ KisStrategyColorSpaceSP getColorSpaceForColorType(ColorspaceType type) {
+ if (type == GRAYColorspace) {
+- KisColorSpaceRegistry::instance() -> get(KisID("CMYK", ""));
++ return KisColorSpaceRegistry::instance() -> get(KisID("GRAYA", ""));
+ }
+ else if (type == CMYKColorspace) {
+- return KisColorSpaceRegistry::instance() -> get(KisID("GRAYA", ""));
++ return KisColorSpaceRegistry::instance() -> get(KisID("CMYK", ""));
+ }
+ else if (type == RGBColorspace || type == sRGBColorspace || type == TransparentColorspace) {
+ return KisColorSpaceRegistry::instance() -> get(KisID("RGBA", ""));
+Index: krita/core/kis_view.cc
+===================================================================
+--- krita/core/kis_view.cc (revision 427945)
++++ krita/core/kis_view.cc (working copy)
+@@ -218,8 +218,7 @@
+ {
+ delete m_dcop;
+ delete m_dockerManager;
+-
+-
++ delete m_selectionManager;
+ }
+
+ DCOPObject* KisView::dcopObject()
+Index: krita/core/kis_iterators_pixel.h
+===================================================================
+--- krita/core/kis_iterators_pixel.h (revision 427945)
++++ krita/core/kis_iterators_pixel.h (working copy)
+@@ -37,6 +37,7 @@
+ public:
+ KisHLineIteratorPixel( KisPaintDevice *ndevice, KisDataManager *dm, KisDataManager *sel_dm, Q_INT32 x , Q_INT32 y , Q_INT32 w, Q_INT32 offsetx, Q_INT32 offsety, bool writable);
+
++ ~KisHLineIteratorPixel() { delete m_selectionIterator; }
+ inline KisHLineIteratorPixel & operator ++() { KisHLineIterator::operator++(); advance(1); return *this;}
+
+ /// Advances a number of pixels until it reaches the end of the line
+@@ -52,6 +53,7 @@
+ {
+ public:
+ KisVLineIteratorPixel( KisPaintDevice *ndevice, KisDataManager *dm, KisDataManager *sel_dm, Q_INT32 xpos , Q_INT32 ypos , Q_INT32 height, Q_INT32 offsetx, Q_INT32 offsety, bool writable);
++ ~KisVLineIteratorPixel() { delete m_selectionIterator; }
+
+ inline KisVLineIteratorPixel & operator ++() { KisVLineIterator::operator++(); advance(1); return *this;}
+
+@@ -65,6 +67,7 @@
+ {
+ public:
+ KisRectIteratorPixel( KisPaintDevice *ndevice, KisDataManager *dm, KisDataManager *sel_dm, Q_INT32 x, Q_INT32 y, Q_INT32 w, Q_INT32 h, Q_INT32 offsetx, Q_INT32 offsety, bool writable);
++ ~KisRectIteratorPixel() { delete m_selectionIterator; }
+
+ inline KisRectIteratorPixel & operator ++() { KisRectIterator::operator++(); advance(1); return *this;}
+
+Index: krita/paintops/kritadefaultpaintops.desktop
+===================================================================
+--- krita/paintops/kritadefaultpaintops.desktop (revision 427945)
++++ krita/paintops/kritadefaultpaintops.desktop (working copy)
+@@ -15,7 +15,7 @@
+ Name[nn]=Standard måleoperasjonar
+ Name[pt]=Operações de Pintura Predefinidas
+ Name[pt_BR]=Operações de pintura padrão
+-Name[ru]=Стандартные действия рисования
++Name[ru]=Стандартные операции рисования
+ Name[sr]=Подразумеване сликарске операције
+ Name[sr@Latn]=Podrazumevane slikarske operacije
+ Name[sv]=Förvalda målningsoperationer
+@@ -36,7 +36,7 @@
+ Comment[nn]=Standard måleoperasjonar
+ Comment[pt]=Operações de pintura predefinidas
+ Comment[pt_BR]=Operações de pintura padrão
+-Comment[ru]=Действия рисования по умолчанию
++Comment[ru]=Операции рисования по умолчанию
+ Comment[sr]=Подразумеване сликарске операције
+ Comment[sr@Latn]=Podrazumevane slikarske operacije
+ Comment[sv]=Förvalda ritåtgärder
+Index: krita/modules/colorspace_ws/kritawsplugin.desktop
+===================================================================
+--- krita/modules/colorspace_ws/kritawsplugin.desktop (revision 427945)
++++ krita/modules/colorspace_ws/kritawsplugin.desktop (working copy)
+@@ -13,7 +13,7 @@
+ Name[nn]=Fargemodell for vått lerret
+ Name[pt]=Modelo de Cores de Tela Molhado e Pegajoso
+ Name[pt_BR]=Modelo de cores de tela Molhada & Pegajosa
+-Name[ru]=Цветовая модель влажности и прилипания
++Name[ru]=Цветовая модель с параметрами влажности и прилипания
+ Name[sr]=Модел боја мокрог и лепљивог платна
+ Name[sr@Latn]=Model boja mokrog i lepljivog platna
+ Name[sv]=Våt och klibbig dukfärgmodell
+Index: krita/modules/colorspace_rgb/templates/transparent_1280x1024.desktop
+===================================================================
+--- krita/modules/colorspace_rgb/templates/transparent_1280x1024.desktop (revision 427945)
++++ krita/modules/colorspace_rgb/templates/transparent_1280x1024.desktop (working copy)
+@@ -4,6 +4,7 @@
+ URL=.source/transparent_1280x1024.kra
+ Icon=template_rgb_empty
+ Name=Transparent 1280 x 1024
++Name[br]=Treuzwelus 1280 x 1024
+ Name[da]=Gennemsigtig 1280 x 1024
+ Name[el]=Διαφανής 1280 x 1024
+ Name[es]=1280 x 1024 transparente
+@@ -16,7 +17,7 @@
+ Name[nn]=Gjennomsiktig 1280 × 1024
+ Name[pt]=Transparente 1280 x 1024
+ Name[pt_BR]=Transparente de 1280 x 1024
+-Name[ru]=Прозрачный 1280x1024
++Name[ru]=Рисунок 1280x1024, прозрачный фон
+ Name[sl]=Prosojna 1280 x 1024
+ Name[sr]=Провидна 1280 x 1024
+ Name[sr@Latn]=Providna 1280 x 1024
+@@ -39,7 +40,7 @@
+ Comment[nn]=Lagar eit gjennomsiktig bilete på 1280 × 1024 pikslar.
+ Comment[pt]=Cria uma imagem transparente com 1280 x 1024 pontos.
+ Comment[pt_BR]=Cria uma imagem transparente de 1280 x 1024 pixels.
+-Comment[ru]=Прозрачное, 1280x1024.
++Comment[ru]=Рисунок 1280x1024, прозрачный фон.
+ Comment[sl]=Ustvari prosojno sliko velikosti 1280 x 1024 točk.
+ Comment[sr]=Прави провидну слику са 1280 x 1024 пиксела.
+ Comment[sr@Latn]=Pravi providnu sliku sa 1280 x 1024 piksela.
+Index: krita/modules/colorspace_rgb/templates/transparent_640x480.desktop
+===================================================================
+--- krita/modules/colorspace_rgb/templates/transparent_640x480.desktop (revision 427945)
++++ krita/modules/colorspace_rgb/templates/transparent_640x480.desktop (working copy)
+@@ -4,6 +4,7 @@
+ URL=.source/transparent_1600x1200.kra
+ Icon=template_rgb_empty
+ Name=Transparent 640 x 480
++Name[br]=Treuzwelus 640 x 480
+ Name[da]=Gennemsigtig 640 x 480
+ Name[el]=Διαφανής 640 x 480
+ Name[es]=640 x 480 transparente
+@@ -16,7 +17,7 @@
+ Name[nn]=Gjennomsiktig 640 × 480
+ Name[pt]=Transparente 640 x 480
+ Name[pt_BR]=Transparente de 640 x 480
+-Name[ru]=Прозрачный 640x480
++Name[ru]=Рисунок 640x480, прозрачный фон
+ Name[sl]=Prosojna 640 x 480
+ Name[sr]=Провидна 640 x 480
+ Name[sr@Latn]=Providna 640 x 480
+@@ -39,7 +40,7 @@
+ Comment[nn]=Lagar eit gjennomsiktig bilete på 640 × 480 pikslar.
+ Comment[pt]=Cria uma imagem transparente com 640 x 480 pontos.
+ Comment[pt_BR]=Cria uma imagem transparente de 640 x 480 pixels.
+-Comment[ru]=Прозрачное, 640x480.
++Comment[ru]=Рисунок 640x480, прозрачный фон.
+ Comment[sl]=Ustvari prosojno sliko velikosti 640 x 480 točk.
+ Comment[sr]=Прави провидну слику са 640 x 480 пиксела.
+ Comment[sr@Latn]=Pravi providnu sliku sa 640 x 480 piksela.
+Index: krita/modules/colorspace_rgb/templates/white_1600x1200.desktop
+===================================================================
+--- krita/modules/colorspace_rgb/templates/white_1600x1200.desktop (revision 427945)
++++ krita/modules/colorspace_rgb/templates/white_1600x1200.desktop (working copy)
+@@ -10,6 +10,7 @@
+ Name[es]=1600 x 1200 blanco
+ Name[et]=Valge 1600 x 1200
+ Name[fr]=Image blanche 1600 x 1200
++Name[ga]=Bán 1600×1200
+ Name[he]=לבן ‎1600 x 1200
+ Name[hu]=Fehér 1600 x 1200
+ Name[it]=Bianco 1600 x 1200
+@@ -17,7 +18,7 @@
+ Name[nn]=Kvitt 1600 × 1200
+ Name[pt]=Branca 1600 x 1200
+ Name[pt_BR]=1600 x 1200 em Branco
+-Name[ru]=Белый 1600x1200
++Name[ru]=Рисунок 1600x1200, белый фон
+ Name[sl]=Bela 1600 x 1200
+ Name[sr]=Бела 1600 x 1200
+ Name[sr@Latn]=Bela 1600 x 1200
+@@ -39,7 +40,7 @@
+ Comment[nn]=Lagar eit kvitt RGB-bilete på 1600 × 1200 pikslar.
+ Comment[pt]=Cria uma imagem RGB branca com 1600 x 1200 pontos.
+ Comment[pt_BR]=Cria uma imagem RGB em branco de 1600 x 1200 pixels.
+-Comment[ru]=Белое в формате RGB, 1600x1200.
++Comment[ru]=Рисунок RGB 1600x1200, белый фон.
+ Comment[sl]=Ustvari belo sliko RGB velikosti 1600 x 1200 točk.
+ Comment[sr]=Прави белу RGB слику са 1600 x 1200 пиксела.
+ Comment[sr@Latn]=Pravi belu RGB sliku sa 1600 x 1200 piksela.
+Index: krita/modules/colorspace_rgb/templates/white_1024x768.desktop
+===================================================================
+--- krita/modules/colorspace_rgb/templates/white_1024x768.desktop (revision 427945)
++++ krita/modules/colorspace_rgb/templates/white_1024x768.desktop (working copy)
+@@ -13,6 +13,7 @@
+ Name[es]=1024 x 768 blanco
+ Name[et]=Valge 1024 x 768
+ Name[fr]=Image blanche 1024 x 768
++Name[ga]=Bán 1024×768
+ Name[he]=לבן ‎1024 x 768
+ Name[hu]=Fehér 1024 x 768
+ Name[it]=Bianco 1024 x 768
+@@ -21,7 +22,7 @@
+ Name[nn]=Kvitt 1024 × 768
+ Name[pt]=Branca 1024 x 768
+ Name[pt_BR]=1024 x 768 em Branco
+-Name[ru]=Белый 1024x768
++Name[ru]=Рисунок 1024x768, белый фон
+ Name[sl]=Bela 1024 x 768
+ Name[sr]=Бела 1024 x 768
+ Name[sr@Latn]=Bela 1024 x 768
+@@ -46,7 +47,7 @@
+ Comment[nn]=Lagar eit kvitt RGB-bilete på 1024 × 768 pikslar.
+ Comment[pt]=Cria uma imagem RGB branca com 1024 x 768 pontos.
+ Comment[pt_BR]=Cria uma imagem RGB em branco de 1024 x 768 pixéis.
+-Comment[ru]=Белое в формате RGB, 1024x768.
++Comment[ru]=Рисунок RGB 1024x768, белый фон.
+ Comment[sl]=Ustvari belo sliko RGB velikosti 1024 x 768 točk.
+ Comment[sr]=Прави белу RGB слику са 1024 x 768 пиксела.
+ Comment[sr@Latn]=Pravi belu RGB sliku sa 1024 x 768 piksela.
+Index: krita/modules/colorspace_rgb/templates/white_1280x1024.desktop
+===================================================================
+--- krita/modules/colorspace_rgb/templates/white_1280x1024.desktop (revision 427945)
++++ krita/modules/colorspace_rgb/templates/white_1280x1024.desktop (working copy)
+@@ -10,6 +10,7 @@
+ Name[es]=1280 x 1024 blanco
+ Name[et]=Valge 1280 x 1024
+ Name[fr]=Image blanche 1280 x 1024
++Name[ga]=Bán 1280×1024
+ Name[he]=לבן ‎1280 x 1024
+ Name[hu]=Fehér 1280 x 1024
+ Name[it]=Bianco 1280 x 1024
+@@ -17,7 +18,7 @@
+ Name[nn]=Kvitt 1280 × 1024
+ Name[pt]=Branca 1280 x 1024
+ Name[pt_BR]=1280 x 1024 em Branco
+-Name[ru]=Белый 1280x1024
++Name[ru]=Рисунок 1280x1024, белый фон
+ Name[sl]=Bela 1280 x 1024
+ Name[sr]=Бела 1280 x 1024
+ Name[sr@Latn]=Bela 1280 x 1024
+@@ -39,7 +40,7 @@
+ Comment[nn]=Lagar eit kvitt RGB-bilete på 1280 × 1024 pikslar.
+ Comment[pt]=Cria uma imagem RGB branca com 1280 x 1024 pontos.
+ Comment[pt_BR]=Cria uma imagem RGB em branco de 1280 x 1024 pixels.
+-Comment[ru]=Белое в формате RGB, 1280x1024.
++Comment[ru]=Рисунок RGB 1280x1024, белый фон.
+ Comment[sl]=Ustvari belo sliko RGB velikosti 1280 x 1024 točk.
+ Comment[sr]=Прави белу RGB слику са 1280 x 1024 пиксела.
+ Comment[sr@Latn]=Pravi belu RGB sliku sa 1280 x 1024 piksela.
+Index: krita/modules/colorspace_rgb/templates/white_640x480.desktop
+===================================================================
+--- krita/modules/colorspace_rgb/templates/white_640x480.desktop (revision 427945)
++++ krita/modules/colorspace_rgb/templates/white_640x480.desktop (working copy)
+@@ -13,6 +13,7 @@
+ Name[es]=640x480 blanco
+ Name[et]=Valge 640x480
+ Name[fr]=Image blanche 640 x 480
++Name[ga]=Bán 640×480
+ Name[he]=לבן 640x480
+ Name[hu]=Fehér 640 x 480
+ Name[it]=Bianco 640x480
+@@ -21,7 +22,7 @@
+ Name[nn]=Kvitt 640 × 480
+ Name[pt]=Branca 640x480
+ Name[pt_BR]=640x480 em Branco
+-Name[ru]=Белый 640x480
++Name[ru]=Рисунок 640x480, белый фон
+ Name[sl]=Bela 640x480
+ Name[sr]=Бела 640x480
+ Name[sr@Latn]=Bela 640x480
+@@ -42,11 +43,11 @@
+ Comment[hu]=Létrehoz egy 640 x 480 képpontos fehér RGB képet.
+ Comment[it]=Crea un'immagine RGB bianca di 640 x 480 pixel.
+ Comment[nb]=Lager et hvitt bilde på 640 x 480 piksler.
+-Comment[nl]=Maakt een witte RGB-afbeelding aan van 540 x 480 pixels.
++Comment[nl]=Maakt een witte RGB-afbeelding aan van 640 x 480 pixels.
+ Comment[nn]=Lagar eit kvitt RGB-bilete på 640 × 480 pikslar.
+ Comment[pt]=Cria uma imagem RGB branca com 640 x 480 pontos.
+ Comment[pt_BR]=Cria uma imagem RGB em branco de 640 x 480 pixéis.
+-Comment[ru]=Белое в формате RGB, 640x480.
++Comment[ru]=Рисунок RGB 640x480, белый фон.
+ Comment[sl]=Ustvari belo sliko RGB velikosti 640 x 480 točk.
+ Comment[sr]=Прави белу RGB слику са 640 x 480 пиксела.
+ Comment[sr@Latn]=Pravi belu RGB sliku sa 640 x 480 piksela.
+Index: krita/modules/colorspace_rgb/templates/transparent_1600x1200.desktop
+===================================================================
+--- krita/modules/colorspace_rgb/templates/transparent_1600x1200.desktop (revision 427945)
++++ krita/modules/colorspace_rgb/templates/transparent_1600x1200.desktop (working copy)
+@@ -5,6 +5,7 @@
+ Icon=template_rgb_empty
+ Name=Transparent 1600 x 1200
+ Name[bg]=Прозрачно 1600 x 1200
++Name[br]=Treuzwelus 1600 x 1200
+ Name[da]=Gennemsigtig 1600 x 1200
+ Name[el]=Διαφανής 1600 x 1200
+ Name[es]=1600 x 1200 transparente
+@@ -18,7 +19,7 @@
+ Name[nn]=Gjennomsiktig 1600 × 1200
+ Name[pt]=Transparente 1600 x 1200
+ Name[pt_BR]=Transparente de 1600 x 1200
+-Name[ru]=Прозрачный 1600x1200
++Name[ru]=Рисунок 1600x1200, прозрачный фон
+ Name[sl]=Prosojna 1600 x 1200
+ Name[sr]=Провидна 1600 x 1200
+ Name[sr@Latn]=Providna 1600 x 1200
+@@ -44,7 +45,7 @@
+ Comment[nn]=Lagar eit gjennomsiktig bilete på 1600 × 1200 pikslar.
+ Comment[pt]=Cria uma imagem transparente com 1600 x 1200 pontos.
+ Comment[pt_BR]=Cria uma imagem transparente de 1600 x 1200 pixéis.
+-Comment[ru]=Прозрачное, 1600x1200.
++Comment[ru]=Рисунок 1600x1200, прозрачный фон.
+ Comment[sl]=Ustvari prosojno sliko velikosti 1600 x 1200 točk.
+ Comment[sr]=Прави провидну слику са 1600 x 1200 пиксела.
+ Comment[sr@Latn]=Pravi providnu sliku sa 1600 x 1200 piksela.
+Index: krita/modules/colorspace_rgb/templates/transparent_1024x768.desktop
+===================================================================
+--- krita/modules/colorspace_rgb/templates/transparent_1024x768.desktop (revision 427945)
++++ krita/modules/colorspace_rgb/templates/transparent_1024x768.desktop (working copy)
+@@ -4,6 +4,7 @@
+ URL=.source/transparent_1024x768.kra
+ Icon=template_rgb_empty
+ Name=Transparent 1024 x 768
++Name[br]=Treuzwelus 1024 x 768
+ Name[da]=Gennemsigtig 1024 x 768
+ Name[el]=Διαφανής 1024 x 768
+ Name[es]=1024 x 768 transparente
+@@ -16,7 +17,7 @@
+ Name[nn]=Gjennomsiktig 1024 × 768
+ Name[pt]=Transparente 1024 x 768
+ Name[pt_BR]=Transparente de 1024 x 768
+-Name[ru]=Прозрачный 1024x768
++Name[ru]=Рисунок 1024x768, прозрачный фон
+ Name[sl]=Prosojna 1024 x 768
+ Name[sr]=Провидна 1024 x 768
+ Name[sr@Latn]=Providna 1024 x 768
+@@ -39,7 +40,7 @@
+ Comment[nn]=Lagar eit gjennomsiktig bilete på 1024 × 768 pikslar.
+ Comment[pt]=Cria uma imagem transparente com 1024 x 768 pontos.
+ Comment[pt_BR]=Cria uma imagem transparente de 1024 x 768 pixels.
+-Comment[ru]=Прозрачное, 1024x768.
++Comment[ru]=Рисунок 1024x768, прозрачный фон.
+ Comment[sl]=Ustvari prosojno sliko velikosti 1024 x 768 točk.
+ Comment[sr]=Прави провидну слику са 1024 x 768 пиксела.
+ Comment[sr@Latn]=Pravi providnu sliku sa 1024 x 768 piksela.
+Index: krita/modules/krita_module.desktop
+===================================================================
+--- krita/modules/krita_module.desktop (revision 427945)
++++ krita/modules/krita_module.desktop (working copy)
+@@ -19,6 +19,7 @@
+ Comment[pt]=Módulo de funcionalidade nuclear para o Krita
+ Comment[pt_BR]=Módulo de funcionalidades principais para o Krita
+ Comment[ru]=Движок Krita
++Comment[sl]=Modul za osnovne zmožnosti Krite
+ Comment[sr]=Модел основне функционалности за Krita-у
+ Comment[sr@Latn]=Model osnovne funkcionalnosti za Krita-u
+ Comment[sv]=Modul med kärnfunktioner för Krita
+Index: krita/modules/colorspace_gray/templates/white_640x480.desktop
+===================================================================
+--- krita/modules/colorspace_gray/templates/white_640x480.desktop (revision 427945)
++++ krita/modules/colorspace_gray/templates/white_640x480.desktop (working copy)
+@@ -12,6 +12,7 @@
+ Name[es]=Fondo blanco, 640 x 480
+ Name[et]=Valge taust, 640 x 480
+ Name[fr]=Fond blanc 640 x 480
++Name[ga]=Cúlra Bán, 640×480
+ Name[he]=רקע לבן, ‎640 x 480
+ Name[hu]=Fehér háttér, 640 x 480
+ Name[it]=Sfondo bianco, 640 x 480
+@@ -20,7 +21,7 @@
+ Name[nn]=Kvit bakgrunn, 640 × 480
+ Name[pt]=Fundo Branco, 640 x 480
+ Name[pt_BR]=Fundo em branco, 640 x 480
+-Name[ru]=Белый фон, 640x480
++Name[ru]=Рисунок 640x480, белый фон
+ Name[sl]=Belo ozadje, 640 x 480
+ Name[sr]=Бела позадина, 640 x 480
+ Name[sr@Latn]=Bela pozadina, 640 x 480
+@@ -46,7 +47,7 @@
+ Comment[nn]=Lagar eit bilete på 640 × 480 pikslar med ein kvit bakgrunn.
+ Comment[pt]=Cria uma imagem de 640 x 480 pontos com um fundo branco.
+ Comment[pt_BR]=Cria uma imagem de 640 x 480 pixéis com um fundo branco.
+-Comment[ru]=Белое, 640x480.
++Comment[ru]=Рисунок 640x480, белый фон.
+ Comment[sl]=Ustvari sliko velikosti 640 x 480 točk z belim ozadjem.
+ Comment[sr]=Прави слику од 640 x 480 пиксела са белом позадином.
+ Comment[sr@Latn]=Pravi sliku od 640 x 480 piksela sa belom pozadinom.
+Index: krita/modules/colorspace_cmyk/kritacmykplugin.desktop
+===================================================================
+--- krita/modules/colorspace_cmyk/kritacmykplugin.desktop (revision 427945)
++++ krita/modules/colorspace_cmyk/kritacmykplugin.desktop (working copy)
+@@ -46,7 +46,7 @@
+ Comment[nn]=Fargemodell for CMYK-bilete med 8 bit per kanal
+ Comment[pt]=Modelo de cor para imagens CMYK com 8 bits por canal
+ Comment[pt_BR]=Modelo de cor para imagens com 8-bits de canal CMYK
+-Comment[ru]=Цветовая модель для изображений в CMYK (болотный, пурпурный, жёлтый, чёрный) 8-бит/канал
++Comment[ru]=Цветовая модель для изображений в CMYK (циан, пурпурный, жёлтый, чёрный) 8-бит/канал
+ Comment[sl]=Barvni model za slike CMYK z 8 biti/kanal
+ Comment[sr]=Модел боја за CMYK слике са 8 битова/каналу
+ Comment[sr@Latn]=Model boja za CMYK slike sa 8 bitova/kanalu
+Index: krita/modules/colorspace_cmyk/templates/white_2000x800.desktop
+===================================================================
+--- krita/modules/colorspace_cmyk/templates/white_2000x800.desktop (revision 427945)
++++ krita/modules/colorspace_cmyk/templates/white_2000x800.desktop (working copy)
+@@ -12,6 +12,7 @@
+ Name[es]=2000 x 800 blanco
+ Name[et]=Valge 2000 x 800
+ Name[fr]=Image blanche 2000 x 800
++Name[ga]=Bán 2000×800
+ Name[he]=לבן ‎2000 x 800
+ Name[hu]=fehér 2000 x 800
+ Name[it]=Bianco 2000 x 800
+@@ -45,7 +46,7 @@
+ Comment[nn]=Lagar eit kvitt CMYK-bilete på 2000 × 800 pikslar.
+ Comment[pt]=Cria uma imagem CMYK branca com 2000 x 800 pontos.
+ Comment[pt_BR]=Cria uma imagem CMYK em branco de 2000 x 800 pixéis.
+-Comment[ru]=Белое в формате CMYK, 2000x800.
++Comment[ru]=Рисунок CMYK, 2000x800, белый фон.
+ Comment[sl]=Ustvari belo sliko CMYK velikosti 2000 x 800 točk.
+ Comment[sr]=Прави белу CMYK слику са 2000 x 800 пиксела.
+ Comment[sr@Latn]=Pravi belu CMYK sliku sa 2000 x 800 piksela.
+Index: krita/data/krita_module.desktop
+===================================================================
+--- krita/data/krita_module.desktop (revision 427945)
++++ krita/data/krita_module.desktop (working copy)
+@@ -19,6 +19,7 @@
+ Comment[pt]=Módulo de funcionalidade nuclear para o Krita
+ Comment[pt_BR]=Módulo de funcionalidades principais para o Krita
+ Comment[ru]=Движок Krita
++Comment[sl]=Modul za osnovne zmožnosti Krite
+ Comment[sr]=Модел основне функционалности за Krita-у
+ Comment[sr@Latn]=Model osnovne funkcionalnosti za Krita-u
+ Comment[sv]=Modul med kärnfunktioner för Krita
+Index: krita/data/krita_paintop.desktop
+===================================================================
+--- krita/data/krita_paintop.desktop (revision 427945)
++++ krita/data/krita_paintop.desktop (working copy)
+@@ -17,6 +17,7 @@
+ Comment[pt]=Módulo de operações de pintura do Krita
+ Comment[pt_BR]=plugin de operação de pintura para o Krita
+ Comment[ru]=Модуль рисования Krita
++Comment[sl]=vstavek za dejanja slikanja za Krito
+ Comment[sr]=Прикључак за сликарске операције за Krita-у
+ Comment[sr@Latn]=Priključak za slikarske operacije za Krita-u
+ Comment[sv]=Målningsinsticksprogram för Krita
+Index: krita/kritapart.desktop
+===================================================================
+--- krita/kritapart.desktop (revision 427945)
++++ krita/kritapart.desktop (working copy)
+@@ -18,7 +18,7 @@
+ Name[nn]=KOffice-komponent for biletmanipulering
+ Name[pt]=Componente de Manipulação de Imagens do KOffice
+ Name[pt_BR]=Componente de Manipulação de Imagens do KOffice
+-Name[ru]=Компонент редактирования изображений KOffice
++Name[ru]=Компонент редактирования изображений
+ Name[sl]=Komponenta za obdelavo slik za KOffice
+ Name[sr]=KOffice-ова компонента за манипулацију сликама
+ Name[sr@Latn]=KOffice-ova komponenta za manipulaciju slikama
+@@ -49,7 +49,7 @@
+ GenericName[nn]=Bilethandsaming
+ GenericName[pt]=Manipulação de Imagens
+ GenericName[pt_BR]=Manipulação de Imagens
+-GenericName[ru]=Редактор графических изображений
++GenericName[ru]=Редактирование изображений
+ GenericName[sl]=Obdelava slik
+ GenericName[sr]=Манипулација сликама
+ GenericName[sr@Latn]=Manipulacija slikama
+Index: krita/ui/kis_layerbox.cc
+===================================================================
+--- krita/ui/kis_layerbox.cc (revision 427945)
++++ krita/ui/kis_layerbox.cc (working copy)
+@@ -372,7 +372,7 @@
+ void KisLayerBoxItem::init(const QString& label, QListBox *parent,
+ KisLayerBox::flags f)
+ {
+- KIconLoader il;
++ KIconLoader il( "krita" );
+
+ m_label = label;
+
+Index: krita/ui/kis_dockframedocker.cc
+===================================================================
+--- krita/ui/kis_dockframedocker.cc (revision 427945)
++++ krita/ui/kis_dockframedocker.cc (working copy)
+@@ -125,7 +125,6 @@
+ m_page -> lblCaption -> show();
+ m_page -> bnShade -> show();
+ m_page -> lblCaption -> setText(caption());
+- resize(sizeHint());
+ }
+ else {
+ m_docked = false;
+@@ -133,7 +132,6 @@
+ m_page -> bnShade -> hide();
+ m_page -> tabWidget -> show();
+ m_page -> lblCaption -> setText("");
+- resize(sizeHint());
+ }
+
+ }
+Index: kchart/kchartpart.desktop
+===================================================================
+--- kchart/kchartpart.desktop (revision 427945)
++++ kchart/kchartpart.desktop (working copy)
+@@ -20,6 +20,7 @@
+ Name[pt]=Componente de Gráficos do KOffice
+ Name[pt_BR]=Componente de Gráficos do KOffice
+ Name[ru]=Компонент диаграмм KOffice
++Name[sl]=Komponenta za grafe za KOffice
+ Name[sr]=KOffice-ова компонента за графике
+ Name[sr@Latn]=KOffice-ova komponenta za grafike
+ Name[sv]=Koffice-diagramkomponent
+Index: kchart/kdchart/KDDrawText.cpp
+===================================================================
+--- kchart/kdchart/KDDrawText.cpp (revision 427945)
++++ kchart/kdchart/KDDrawText.cpp (working copy)
+@@ -256,10 +256,12 @@
+ painter->setPen( QColor( Qt::darkGreen ) );
+ painter->drawRect(x,y,txtWidth,txtHeight);
+ }else{
++#if 0
+ // Working around a strange Qt bug: Rotated painter must be
+ // initialized by drawing before text can be painted there.
+ painter->setPen( QColor( Qt::white ) );
+ painter->drawLine( 30000,0,30001,0 );
++#endif
+ }
+ painter->setPen( savePen );
+ }
+Index: kchart/kchartWizardSelectChartTypePage.cc
+===================================================================
+--- kchart/kchartWizardSelectChartTypePage.cc (revision 427945)
++++ kchart/kchartWizardSelectChartTypePage.cc (working copy)
+@@ -16,11 +16,11 @@
+ namespace KChart
+ {
+
+-KChartButton::KChartButton(QWidget *parent, const QString & _text, QPixmap *_pixmap)
++KChartButton::KChartButton(QWidget *parent, const QString & _text, const QPixmap &_pixmap)
+ : QVBox(parent)
+ {
+ m_button = new QPushButton(this);
+- m_button->setPixmap(*_pixmap);
++ m_button->setPixmap(_pixmap);
+ m_button->setToggleButton( true );
+ QLabel *label = new QLabel(_text, this);
+ label->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
+@@ -30,16 +30,16 @@
+ KChartButton::~KChartButton()
+ {
+ }
+-
++
+ void KChartWizardSelectChartTypePage::addButton(const QString &name,
+ const QString &icon_name,
+ int type)
+ {
+- KChartButton *button = new KChartButton( this, name, &BarIcon( icon_name,KIcon::SizeMedium, KIcon::DefaultState,KChartFactory::global() ) );
++ KChartButton *button = new KChartButton( this, name, BarIcon( icon_name,KIcon::SizeMedium, KIcon::DefaultState,KChartFactory::global() ) );
+ _layout->addWidget(button,r_pos,c_pos);
+ _typeBG->insert( button->button(), type );
+
+- if (c_pos == 3)
++ if (c_pos == 3)
+ {
+ c_pos=0;
+ r_pos++; //place the next button in the second row
+Index: kchart/kchartWizardSelectChartTypePage.h
+===================================================================
+--- kchart/kchartWizardSelectChartTypePage.h (revision 427945)
++++ kchart/kchartWizardSelectChartTypePage.h (working copy)
+@@ -23,9 +23,9 @@
+ {
+ Q_OBJECT
+ public:
+- KChartButton(QWidget* parent, const QString &, QPixmap *);
++ KChartButton(QWidget* parent, const QString &, const QPixmap &);
+ ~KChartButton();
+-
++
+ QPushButton *button() const { return m_button;}
+ private:
+ QPushButton *m_button;
+Index: mimetypes/kde32/vnd.stardivision.math.desktop
+===================================================================
+--- mimetypes/kde32/vnd.stardivision.math.desktop (revision 427945)
++++ mimetypes/kde32/vnd.stardivision.math.desktop (working copy)
+@@ -25,7 +25,7 @@
+ Comment[nn]=StarOffice-formel
+ Comment[pt]=Documento Matemático do StarOffice
+ Comment[pt_BR]=Documento do StarOffice Math
+-Comment[ru]=Формулы StarOffice
++Comment[ru]=Формула StarOffice
+ Comment[sl]=Dokument za StarOffice Math
+ Comment[sr]=StarOffice Math-ов документ
+ Comment[sr@Latn]=StarOffice Math-ov dokument
+Index: mimetypes/kde32/vnd.stardivision.writer-global.desktop
+===================================================================
+--- mimetypes/kde32/vnd.stardivision.writer-global.desktop (revision 427945)
++++ mimetypes/kde32/vnd.stardivision.writer-global.desktop (working copy)
+@@ -23,7 +23,7 @@
+ Comment[nn]=StarOffice Writer-hovuddokument
+ Comment[pt]=Documento Mestre do Writer do StarOffice
+ Comment[pt_BR]=Documento Mestre do StarOffice Writer
+-Comment[ru]=Основной документ StarOffice Writer
++Comment[ru]=Мастер-документ StarOffice
+ Comment[sl]=Dokument za StarOffice Writer Master
+ Comment[sr]=StarOffice Writer-ов главни документ
+ Comment[sr@Latn]=StarOffice Writer-ov glavni dokument
+Index: mimetypes/kde32/vnd.sun.xml.writer.master.desktop
+===================================================================
+--- mimetypes/kde32/vnd.sun.xml.writer.master.desktop (revision 427945)
++++ mimetypes/kde32/vnd.sun.xml.writer.master.desktop (working copy)
+@@ -20,7 +20,7 @@
+ Comment[nn]=OpenOffice.org-hovudtekstdokument
+ Comment[pt]=Documento Mestre de Texto do OpenOffice.org
+ Comment[pt_BR]=Documento Mestre de Texto do OpenOffice.org
+-Comment[ru]=Основной текстовый документ OpenOffice.org
++Comment[ru]=Мастер-документ OpenOffice.org
+ Comment[sr]=OpenOffice.org-ов главни текстуални документ
+ Comment[sr@Latn]=OpenOffice.org-ov glavni tekstualni dokument
+ Comment[sv]=Openoffice.org huvudtextdokument
+Index: mimetypes/kde32/vnd.sun.xml.writer.template.desktop
+===================================================================
+--- mimetypes/kde32/vnd.sun.xml.writer.template.desktop (revision 427945)
++++ mimetypes/kde32/vnd.sun.xml.writer.template.desktop (working copy)
+@@ -21,7 +21,7 @@
+ Comment[nn]=OpenOffice.org-tekstdokumentmal
+ Comment[pt]=Modelo de Documento de Texto do OpenOffice.org
+ Comment[pt_BR]=Modelo de Documento de Texto do OpenOffice.org
+-Comment[ru]=Шаблон текстового документа OpenОffice.org
++Comment[ru]=Шаблон документа OpenOffice.org
+ Comment[sl]=Predloga besedilnega dokumenta za OpenOffice.org
+ Comment[sr]=OpenOffice.org-ов шаблон текстуалног документа
+ Comment[sr@Latn]=OpenOffice.org-ov šablon tekstualnog dokumenta
+Index: mimetypes/kde32/vnd.stardivision.draw.desktop
+===================================================================
+--- mimetypes/kde32/vnd.stardivision.draw.desktop (revision 427945)
++++ mimetypes/kde32/vnd.stardivision.draw.desktop (working copy)
+@@ -23,7 +23,7 @@
+ Comment[nn]=StarOffice-teikning
+ Comment[pt]=Desenho do StarOffice
+ Comment[pt_BR]=Desenho do StarOffice
+-Comment[ru]=Изображение StarOffice
++Comment[ru]=Рисунок StarOffice
+ Comment[sl]=Risanje za StarOffice
+ Comment[sr]=StarOffice-ов цртеж
+ Comment[sr@Latn]=StarOffice-ov crtež
+Index: mimetypes/kde32/vnd.sun.xml.draw.template.desktop
+===================================================================
+--- mimetypes/kde32/vnd.sun.xml.draw.template.desktop (revision 427945)
++++ mimetypes/kde32/vnd.sun.xml.draw.template.desktop (working copy)
+@@ -20,7 +20,7 @@
+ Comment[nn]=OpenOffice.org-teikningsmal
+ Comment[pt]=Modelo de Desenho do OpenOffice.org
+ Comment[pt_BR]=Modelo de Desenho do OpenOffice.org
+-Comment[ru]=Шаблон изображения OpenOffice.org
++Comment[ru]=Шаблон рисунка OpenOffice.org
+ Comment[sl]=Predloga risanja za OpenOffice.org
+ Comment[sr]=OpenOffice.org-ов шаблон цртежа
+ Comment[sr@Latn]=OpenOffice.org-ov šablon crteža
+Index: mimetypes/kde32/vnd.sun.xml.calc.template.desktop
+===================================================================
+--- mimetypes/kde32/vnd.sun.xml.calc.template.desktop (revision 427945)
++++ mimetypes/kde32/vnd.sun.xml.calc.template.desktop (working copy)
+@@ -21,7 +21,7 @@
+ Comment[nn]=OpenOffice.org-reknearkmal
+ Comment[pt]=Modelo de Folha de Cálculo do OpenOffice.org
+ Comment[pt_BR]=Modelo de Planilha OpenOffice.org
+-Comment[ru]=Шаблон таблицы OpenOffice.org
++Comment[ru]=Шаблон электронной таблицы OpenOffice.org
+ Comment[sl]=Predloga preglednice za OpenOffice.org
+ Comment[sr]=OpenOffice.org-ов шаблон прорачунског листа
+ Comment[sr@Latn]=OpenOffice.org-ov šablon proračunskog lista
+Index: mimetypes/kde33/vnd.oasis.opendocument.graphics-template.desktop
+===================================================================
+--- mimetypes/kde33/vnd.oasis.opendocument.graphics-template.desktop (revision 427945)
++++ mimetypes/kde33/vnd.oasis.opendocument.graphics-template.desktop (working copy)
+@@ -22,7 +22,7 @@
+ Comment[nn]=OASIS OpenDocument-teikningsmal
+ Comment[pt]=Modelo de Desenho OASIS OpenDocument
+ Comment[pt_BR]=Modelo de Gráfico OpenDocument OASIS
+-Comment[ru]=Шаблон графики OASIS OpenDocument Graphics
++Comment[ru]=Шаблон рисунка OASIS OpenDocument Graphics
+ Comment[sl]=Predloga grafike OASIS OpenDocument
+ Comment[sr]=OASIS-ов OpenDocument графички шаблон
+ Comment[sr@Latn]=OASIS-ov OpenDocument grafički šablon
+Index: mimetypes/kde33/vnd.oasis.opendocument.graphics.desktop
+===================================================================
+--- mimetypes/kde33/vnd.oasis.opendocument.graphics.desktop (revision 427945)
++++ mimetypes/kde33/vnd.oasis.opendocument.graphics.desktop (working copy)
+@@ -22,7 +22,7 @@
+ Comment[nn]=OASIS OpenDocument-teikning
+ Comment[pt]=Desenho OASIS OpenDocument
+ Comment[pt_BR]=Gráfico OpenDocument OASIS
+-Comment[ru]=Графика OASIS OpenDocument
++Comment[ru]=Рисунок OASIS OpenDocument
+ Comment[sl]=Grafika OASIS OpenDocument
+ Comment[sr]=OASIS-ова OpenDocument графика
+ Comment[sr@Latn]=OASIS-ova OpenDocument grafika
+Index: kivio/kiviopart/kivio_stencil_geometry_panel.cpp
+===================================================================
+--- kivio/kiviopart/kivio_stencil_geometry_panel.cpp (revision 427945)
++++ kivio/kiviopart/kivio_stencil_geometry_panel.cpp (working copy)
+@@ -96,10 +96,10 @@
+ lw->setPixmap( QPixmap((const char **)width_xpm) );
+ lh->setPixmap( QPixmap((const char **)height_xpm) );
+
+- m_pX = new KoUnitDoubleSpinBox(this, -1000.0, 1000.0, 0.5, 0.0);
+- m_pY = new KoUnitDoubleSpinBox(this, -1000.0, 1000.0, 0.5, 0.0);
+- m_pW = new KoUnitDoubleSpinBox(this, -1000.0, 1000.0, 0.5, 0.0);
+- m_pH = new KoUnitDoubleSpinBox(this, -1000.0, 1000.0, 0.5, 0.0);
++ m_pX = new KoBuggyUnitDoubleSpinBox(this, -1000.0, 1000.0, 0.5, 0.0);
++ m_pY = new KoBuggyUnitDoubleSpinBox(this, -1000.0, 1000.0, 0.5, 0.0);
++ m_pW = new KoBuggyUnitDoubleSpinBox(this, -1000.0, 1000.0, 0.5, 0.0);
++ m_pH = new KoBuggyUnitDoubleSpinBox(this, -1000.0, 1000.0, 0.5, 0.0);
+ m_rotationSBox = new KIntSpinBox(-360, 360, 1, 0, 10, this);
+ m_rotationSBox->hide();
+
+Index: kivio/kiviopart/kivio_stencil_geometry_panel.h
+===================================================================
+--- kivio/kiviopart/kivio_stencil_geometry_panel.h (revision 427945)
++++ kivio/kiviopart/kivio_stencil_geometry_panel.h (working copy)
+@@ -5,14 +5,14 @@
+ #include <koUnit.h>
+
+ class KoPageLayout;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+ class KIntSpinBox;
+
+ class KivioStencilGeometryPanel : public QWidget
+ {
+ Q_OBJECT
+ protected:
+- KoUnitDoubleSpinBox *m_pX, *m_pY, *m_pW, *m_pH;
++ KoBuggyUnitDoubleSpinBox *m_pX, *m_pY, *m_pW, *m_pH;
+ KIntSpinBox* m_rotationSBox;
+ KoUnit::Unit m_unit;
+ bool m_emitSignals;
+Index: kivio/kiviopart/kivio_view.h
+===================================================================
+--- kivio/kiviopart/kivio_view.h (revision 427945)
++++ kivio/kiviopart/kivio_view.h (working copy)
+@@ -63,7 +63,7 @@
+ class DCOPObject;
+ class KoRuler;
+ class KoZoomHandler;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+ class KStatusBarLabel;
+ class KoLineWidthAction;
+ class KoLineStyleAction;
+Index: kivio/kiviopart/ui/kiviostencilformatdlg.cpp
+===================================================================
+--- kivio/kiviopart/ui/kiviostencilformatdlg.cpp (revision 427945)
++++ kivio/kiviopart/ui/kiviostencilformatdlg.cpp (working copy)
+@@ -46,7 +46,7 @@
+ QGridLayout* gl = new QGridLayout(mainWidget, 3, 2, KDialog::marginHint(), KDialog::spacingHint());
+
+ QLabel* lineWidthLbl = new QLabel(i18n("Line &width:"), mainWidget);
+- m_lineWidthUSBox = new KoUnitDoubleSpinBox(mainWidget, 0.0, 1000.0, 0.1, 1.0, m_unit, 2);
++ m_lineWidthUSBox = new KoBuggyUnitDoubleSpinBox(mainWidget, 0.0, 1000.0, 0.1, 1.0, m_unit, 2);
+ lineWidthLbl->setBuddy(m_lineWidthUSBox);
+ QLabel* lineColorLbl = new QLabel(i18n("Line &color:"), mainWidget);
+ m_lineCBtn = new KColorButton(mainWidget);
+Index: kivio/kiviopart/ui/kiviostencilformatdlg.h
+===================================================================
+--- kivio/kiviopart/ui/kiviostencilformatdlg.h (revision 427945)
++++ kivio/kiviopart/ui/kiviostencilformatdlg.h (working copy)
+@@ -24,7 +24,7 @@
+
+ #include <koUnit.h>
+
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+ class KColorButton;
+ class KComboBox;
+ class KivioView;
+@@ -61,7 +61,7 @@
+ void initLineEndStyles();
+
+ protected:
+- KoUnitDoubleSpinBox* m_lineWidthUSBox;
++ KoBuggyUnitDoubleSpinBox* m_lineWidthUSBox;
+ KColorButton* m_lineCBtn;
+ KColorButton* m_fillCBtn;
+ KComboBox* m_patternCBox;
+Index: kivio/kiviopart/ui/kiviooptionsdialog.cpp
+===================================================================
+--- kivio/kiviopart/ui/kiviooptionsdialog.cpp (revision 427945)
++++ kivio/kiviopart/ui/kiviooptionsdialog.cpp (working copy)
+@@ -178,20 +178,20 @@
+ gridColorLbl->setBuddy(m_gridColorBtn);
+ QGroupBox* spacingGrp = new QGroupBox(2, Qt::Horizontal, i18n("Spacing"), page);
+ QLabel* spaceHorizLbl = new QLabel(i18n("&Horizontal:"), spacingGrp);
+- m_spaceHorizUSpin = new KoUnitDoubleSpinBox(spacingGrp, 0.0, pgw, 0.1,
++ m_spaceHorizUSpin = new KoBuggyUnitDoubleSpinBox(spacingGrp, 0.0, pgw, 0.1,
+ fw, unit);
+ spaceHorizLbl->setBuddy(m_spaceHorizUSpin);
+ QLabel* spaceVertLbl = new QLabel(i18n("&Vertical:"), spacingGrp);
+- m_spaceVertUSpin = new KoUnitDoubleSpinBox(spacingGrp, 0.0, pgh, 0.1,
++ m_spaceVertUSpin = new KoBuggyUnitDoubleSpinBox(spacingGrp, 0.0, pgh, 0.1,
+ fh, unit);
+ spaceVertLbl->setBuddy(m_spaceVertUSpin);
+ QGroupBox* snapGrp = new QGroupBox(2, Qt::Horizontal, i18n("Snap Distance"), page);
+ QLabel* snapHorizLbl = new QLabel(i18n("H&orizontal:"), snapGrp);
+- m_snapHorizUSpin = new KoUnitDoubleSpinBox(snapGrp, 0.0, fw, 0.1,
++ m_snapHorizUSpin = new KoBuggyUnitDoubleSpinBox(snapGrp, 0.0, fw, 0.1,
+ sw, unit);
+ snapHorizLbl->setBuddy(m_snapHorizUSpin);
+ QLabel* snapVertLbl = new QLabel(i18n("V&ertical:"), snapGrp);
+- m_snapVertUSpin = new KoUnitDoubleSpinBox(snapGrp, 0.0, fh, 0.1,
++ m_snapVertUSpin = new KoBuggyUnitDoubleSpinBox(snapGrp, 0.0, fh, 0.1,
+ sh, unit);
+ snapVertLbl->setBuddy(m_snapVertUSpin);
+
+@@ -245,7 +245,7 @@
+ orientBGrp->insert(m_orientVertRBtn);
+ QLabel* posLbl = new QLabel(i18n("&Position:"), m_propertiesGrp);
+ KoUnit::Unit unit = view->doc()->units();
+- m_posUSpin = new KoUnitDoubleSpinBox(m_propertiesGrp, 0.0, 0.0, 0.0, unit);
++ m_posUSpin = new KoBuggyUnitDoubleSpinBox(m_propertiesGrp, 0.0, 0.0, 0.0, unit);
+ posLbl->setBuddy(m_posUSpin);
+
+ QGridLayout* pgl = new QGridLayout(m_propertiesGrp->layout());
+Index: kivio/kiviopart/ui/kivioarrowheadformatdlg.cpp
+===================================================================
+--- kivio/kiviopart/ui/kivioarrowheadformatdlg.cpp (revision 427945)
++++ kivio/kiviopart/ui/kivioarrowheadformatdlg.cpp (working copy)
+@@ -53,10 +53,10 @@
+ loadArrowHeads(m_startAHTypeCBox, false);
+ startAHTypeLbl->setBuddy(m_startAHTypeCBox);
+ QLabel* startAHWidthLbl = new QLabel(i18n("&Width:"), startGBox);
+- m_startAHWidthUSBox = new KoUnitDoubleSpinBox(startGBox, 0.0, 1000.0, 0.1, 1.0, m_unit, 2);
++ m_startAHWidthUSBox = new KoBuggyUnitDoubleSpinBox(startGBox, 0.0, 1000.0, 0.1, 1.0, m_unit, 2);
+ startAHWidthLbl->setBuddy(m_startAHWidthUSBox);
+ QLabel* startAHHeightLbl = new QLabel(i18n("&Length:"), startGBox);
+- m_startAHHeightUSBox = new KoUnitDoubleSpinBox(startGBox, 0.0, 1000.0, 0.1, 1.0, m_unit, 2);
++ m_startAHHeightUSBox = new KoBuggyUnitDoubleSpinBox(startGBox, 0.0, 1000.0, 0.1, 1.0, m_unit, 2);
+ startAHHeightLbl->setBuddy(m_startAHHeightUSBox);
+
+ QGroupBox* endGBox = new QGroupBox(2, Qt::Horizontal, i18n("Arrowhead at End"), mainWidget);
+@@ -65,10 +65,10 @@
+ loadArrowHeads(m_endAHTypeCBox, true);
+ endAHTypeLbl->setBuddy(m_endAHTypeCBox);
+ QLabel* endAHWidthLbl = new QLabel(i18n("W&idth:"), endGBox);
+- m_endAHWidthUSBox = new KoUnitDoubleSpinBox(endGBox, 0.0, 1000.0, 0.1, 1.0, m_unit, 2);
++ m_endAHWidthUSBox = new KoBuggyUnitDoubleSpinBox(endGBox, 0.0, 1000.0, 0.1, 1.0, m_unit, 2);
+ endAHWidthLbl->setBuddy(m_endAHWidthUSBox);
+ QLabel* endAHHeightLbl = new QLabel(i18n("L&ength:"), endGBox);
+- m_endAHHeightUSBox = new KoUnitDoubleSpinBox(endGBox, 0.0, 1000.0, 0.1, 1.0, m_unit, 2);
++ m_endAHHeightUSBox = new KoBuggyUnitDoubleSpinBox(endGBox, 0.0, 1000.0, 0.1, 1.0, m_unit, 2);
+ endAHHeightLbl->setBuddy(m_endAHHeightUSBox);
+
+ gl->addWidget(startGBox, 0, 0);
+Index: kivio/kiviopart/ui/kiviooptionsdialog.h
+===================================================================
+--- kivio/kiviopart/ui/kiviooptionsdialog.h (revision 427945)
++++ kivio/kiviopart/ui/kiviooptionsdialog.h (working copy)
+@@ -32,7 +32,7 @@
+ class QRadioButton;
+ class KColorButton;
+ class KURLRequester;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+ class KivioGuideLineData;
+ class QGroupBox;
+ class QFont;
+@@ -105,17 +105,17 @@
+ KoPageLayout m_layout;
+ QLabel* m_fontTxtLbl;
+ QFont m_font;
+- KoUnitDoubleSpinBox* m_spaceHorizUSpin;
+- KoUnitDoubleSpinBox* m_spaceVertUSpin;
+- KoUnitDoubleSpinBox* m_snapHorizUSpin;
+- KoUnitDoubleSpinBox* m_snapVertUSpin;
++ KoBuggyUnitDoubleSpinBox* m_spaceHorizUSpin;
++ KoBuggyUnitDoubleSpinBox* m_spaceVertUSpin;
++ KoBuggyUnitDoubleSpinBox* m_snapHorizUSpin;
++ KoBuggyUnitDoubleSpinBox* m_snapVertUSpin;
+ QCheckBox* m_gridChBox;
+ QCheckBox* m_snapChBox;
+ KColorButton* m_gridColorBtn;
+ KListView* m_guideList;
+ QRadioButton* m_orientHorizRBtn;
+ QRadioButton* m_orientVertRBtn;
+- KoUnitDoubleSpinBox* m_posUSpin;
++ KoBuggyUnitDoubleSpinBox* m_posUSpin;
+ QCheckBox* m_snapGuideChBox;
+ QCheckBox* m_guidesChBox;
+ KColorButton* m_guideColorBtn;
+Index: kivio/kiviopart/ui/kivioarrowheadformatdlg.h
+===================================================================
+--- kivio/kiviopart/ui/kivioarrowheadformatdlg.h (revision 427945)
++++ kivio/kiviopart/ui/kivioarrowheadformatdlg.h (working copy)
+@@ -24,7 +24,7 @@
+
+ #include <koUnit.h>
+
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+ class KComboBox;
+ class KivioView;
+
+@@ -58,10 +58,10 @@
+ void loadArrowHeads(KComboBox* combo, bool endArrow);
+
+ protected:
+- KoUnitDoubleSpinBox* m_startAHWidthUSBox;
+- KoUnitDoubleSpinBox* m_startAHHeightUSBox;
+- KoUnitDoubleSpinBox* m_endAHWidthUSBox;
+- KoUnitDoubleSpinBox* m_endAHHeightUSBox;
++ KoBuggyUnitDoubleSpinBox* m_startAHWidthUSBox;
++ KoBuggyUnitDoubleSpinBox* m_startAHHeightUSBox;
++ KoBuggyUnitDoubleSpinBox* m_endAHWidthUSBox;
++ KoBuggyUnitDoubleSpinBox* m_endAHHeightUSBox;
+ KComboBox* m_startAHTypeCBox;
+ KComboBox* m_endAHTypeCBox;
+ KoUnit::Unit m_unit;
+Index: kpresenter/kppieobject.h
+===================================================================
+--- kpresenter/kppieobject.h (revision 427945)
++++ kpresenter/kppieobject.h (working copy)
+@@ -1,5 +1,6 @@
+ /* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -79,7 +80,6 @@
+ { return lineEnd; }
+
+ virtual QDomDocumentFragment save( QDomDocument& doc, double offset );
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
+
+ virtual double load(const QDomElement &element);
+ virtual void flip(bool horizontal );
+@@ -89,6 +89,9 @@
+ virtual KoPoint getRealOrig() const;
+
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++
+ virtual void paint( QPainter *_painter, KoZoomHandler*_zoomHandler,
+ int /* pageNum */, bool drawingShadow, bool drawContour );
+
+Index: kpresenter/kpcubicbeziercurveobject.h
+===================================================================
+--- kpresenter/kpcubicbeziercurveobject.h (revision 427945)
++++ kpresenter/kpcubicbeziercurveobject.h (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 2001 Toshitaka Fujioka <fujioka@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -42,10 +43,9 @@
+ virtual QString getTypeString() const { return i18n("Cubic Bezier Curve"); }
+
+ virtual QDomDocumentFragment save( QDomDocument& doc,double offset );
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
+
+ virtual double load( const QDomElement &element );
+- virtual void loadOasis( const QDomElement &element, KoOasisContext & context,KPRLoadingInfo* info );
++ virtual void loadOasis( const QDomElement &element, KoOasisContext & context, KPRLoadingInfo* info );
+
+ virtual void flip(bool horizontal );
+ void closeObject(bool _close);
+@@ -53,6 +53,9 @@
+
+
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++
+ virtual void updatePoints( double _fx, double _fy );
+ virtual KoPointArray getDrawingPoints() const;
+
+Index: kpresenter/kprectobject.h
+===================================================================
+--- kpresenter/kprectobject.h (revision 427945)
++++ kpresenter/kprectobject.h (working copy)
+@@ -53,9 +53,11 @@
+ virtual QDomDocumentFragment save( QDomDocument& doc, double offset );
+ virtual double load(const QDomElement &element);
+ virtual void loadOasis(const QDomElement &element, KoOasisContext &context, KPRLoadingInfo *info);
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
+
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++
+ virtual void paint( QPainter *_painter,KoZoomHandler*_zoomHandler,
+ int /* pageNum */, bool drawingShadow, bool drawContour );
+
+Index: kpresenter/kpellipseobject.h
+===================================================================
+--- kpresenter/kpellipseobject.h (revision 427945)
++++ kpresenter/kpellipseobject.h (working copy)
+@@ -49,9 +49,11 @@
+ { return i18n("Ellipse"); }
+
+ virtual KoSize getRealSize() const;
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
+
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++
+ virtual void paint( QPainter *_painter,KoZoomHandler *_zoomHandler,
+ int /* pageNum */, bool drawingShadow, bool drawContour = FALSE );
+
+Index: kpresenter/kpfreehandobject.h
+===================================================================
+--- kpresenter/kpfreehandobject.h (revision 427945)
++++ kpresenter/kpfreehandobject.h (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 2001 Toshitaka Fujioka <fujioka@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -43,8 +44,11 @@
+
+ virtual QDomDocumentFragment save( QDomDocument& doc,double offset );
+ virtual double load( const QDomElement &element );
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
++ virtual void loadOasis( const QDomElement &element, KoOasisContext & context, KPRLoadingInfo* info );
+
++protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
+ };
+
+ #endif
+Index: kpresenter/kppointobject.cc
+===================================================================
+--- kpresenter/kppointobject.cc (revision 427945)
++++ kpresenter/kppointobject.cc (working copy)
+@@ -1,6 +1,6 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+- Copyright (C) 2004 Thorsten Zachmann <zachmann@kde.org>
++ Copyright (C) 2004-2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -83,71 +83,24 @@
+ return fragment;
+ }
+
+-QString KPPointObject::saveOasisStrokeElement( KoGenStyles& mainStyles ) const
++const char * KPPointObject::getOasisElementName() const
+ {
+- KoGenStyle styleobjectauto( KoGenStyle::STYLE_GRAPHICAUTO, "graphic" );
+- saveOasisMarkerElement( mainStyles, styleobjectauto );
+- saveOasisObjectProtectStyle( styleobjectauto );
+- KPShadowObject::saveOasisStrokeElement( mainStyles, styleobjectauto );
+- return mainStyles.lookup( styleobjectauto, "gr" );
++ return "draw:custom-shape";
+ }
+
+-
+-bool KPPointObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context ) const
+-{
+- QString listOfPoint;
+- int maxX=0;
+- int maxY=0;
+- KoPointArray::ConstIterator it;
+- for ( it = points.begin(); it != points.end(); ++it ) {
+- int tmpX = 0;
+- int tmpY = 0;
+- tmpX = ( int ) ( KoUnit::toMM( ( *it ).x() )*100 );
+- tmpY = ( int ) ( KoUnit::toMM( ( *it ).y() )*100 );
+- if ( !listOfPoint.isEmpty() )
+- listOfPoint += QString( " %1,%2" ).arg( tmpX ).arg( tmpY );
+- else
+- listOfPoint = QString( "%1,%2" ).arg( tmpX ).arg( tmpY );
+- maxX = QMAX( maxX, tmpX );
+- maxY = QMAX( maxY, tmpY );
+- }
+- xmlWriter.addAttribute("draw:points", listOfPoint );
+- xmlWriter.addAttribute("svg:viewBox", QString( "0 0 %1 %2" ).arg( maxX ).arg( maxY ) );
+- return true;
+-}
+-
+ void KPPointObject::loadOasisMarker( KoOasisContext & context )
+ {
+ loadOasisMarkerElement( context, "marker-start", lineBegin );
+ loadOasisMarkerElement( context, "marker-end", lineEnd );
+ }
+
+-void KPPointObject::loadOasis( const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info )
++void KPPointObject::fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const
+ {
+- //kdDebug()<<"void KPPointObject::loadOasis( const QDomElement &element )*************\n";
+- KPShadowObject::loadOasis( element, context, info );
+- //load point.
+- QStringList ptList = QStringList::split(' ', element.attributeNS( KoXmlNS::draw, "points", QString::null));
+- QString pt_x, pt_y;
+- double tmp_x, tmp_y;
+- unsigned int index = 0;
+- for (QStringList::Iterator it = ptList.begin(); it != ptList.end(); ++it)
+- {
+- tmp_x = (*it).section(',',0,0).toInt() / 100;
+- tmp_y = (*it).section(',',1,1).toInt() / 100;
+-
+- pt_x.setNum(tmp_x);
+- pt_x+="mm";
+-
+- pt_y.setNum(tmp_y);
+- pt_y+="mm";
+-
+- points.putPoints( index, 1, KoUnit::parseValue(pt_x),KoUnit::parseValue(pt_y) );
+- ++index;
+- }
+- loadOasisMarker( context );
++ KPShadowObject::fillStyle( styleObjectAuto, mainStyles );
++ saveOasisMarkerElement( mainStyles, styleObjectAuto );
+ }
+
++
+ double KPPointObject::load( const QDomElement &element )
+ {
+ double offset = KPShadowObject::load( element );
+Index: kpresenter/kplineobject.h
+===================================================================
+--- kpresenter/kplineobject.h (revision 427945)
++++ kpresenter/kplineobject.h (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -63,16 +64,18 @@
+ virtual double load(const QDomElement &element);
+ virtual void loadOasis(const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info);
+
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
+-
+ virtual void flip(bool horizontal );
+
+ virtual KoSize getRealSize() const;
+ virtual KoPoint getRealOrig() const;
+
+ protected:
+- QString saveOasisStrokeElement( KoGenStyles& mainStyles ) const;
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++ virtual void saveOasisPosObject( KoXmlWriter &xmlWriter, int indexObj ) const;
+
++ virtual void fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const;
++
+ virtual void paint( QPainter *_painter, KoZoomHandler*_zoomHandler,
+ int /* pageNum */, bool drawingShadow, bool drawContour = FALSE );
+ LineType lineType;
+Index: kpresenter/kppointobject.h
+===================================================================
+--- kpresenter/kppointobject.h (revision 427945)
++++ kpresenter/kppointobject.h (working copy)
+@@ -1,6 +1,6 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+- Copyright (C) 2004 Thorsten Zachmann <zachmann@kde.org>
++ Copyright (C) 2004-2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -34,10 +34,8 @@
+ virtual KoPoint getRealOrig() const;
+
+ virtual QDomDocumentFragment save( QDomDocument& doc, double offset );
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context ) const;
+
+ virtual double load( const QDomElement &element );
+- virtual void loadOasis( const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info );
+
+ virtual void setLineBegin( LineEnd _lineBegin ) { lineBegin = _lineBegin; }
+ virtual void setLineEnd( LineEnd _lineEnd ) { lineEnd = _lineEnd; }
+@@ -53,10 +51,13 @@
+
+ virtual void closeObject( bool close );
+ virtual bool isClosed() const;
+- virtual QString saveOasisStrokeElement( KoGenStyles& mainStyles ) const;
+
+ protected:
++ virtual const char * getOasisElementName() const;
++
+ void loadOasisMarker( KoOasisContext & context );
++ virtual void fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const;
++
+ virtual void paint( QPainter *_painter,KoZoomHandler*_zoomHandler,
+ int /* pageNum */, bool drawingShadow, bool drawContour = FALSE );
+ virtual void updatePoints( double _fx, double _fy );
+Index: kpresenter/kpautoformobject.cc
+===================================================================
+--- kpresenter/kpautoformobject.cc (revision 427945)
++++ kpresenter/kpautoformobject.cc (working copy)
+@@ -76,12 +76,17 @@
+ }
+
+
+-bool KPAutoformObject::saveOasis( KoXmlWriter & xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPAutoformObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- kdDebug()<<"bool KPAutoformObject::saveOasis( KoXmlWriter & xmlWriter ) not implemented\n";
++ kdDebug()<<"bool KPAutoformObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) not implemented\n";
+ return true;
+ }
+
++const char * KPAutoformObject::getOasisElementName() const
++{
++ return "draw:custom-shape";
++}
++
+ QDomDocumentFragment KPAutoformObject::save( QDomDocument& doc, double offset )
+ {
+ QDomDocumentFragment fragment=KP2DObject::save(doc, offset);
+Index: kpresenter/kpgroupobject.h
+===================================================================
+--- kpresenter/kpgroupobject.h (revision 427945)
++++ kpresenter/kpgroupobject.h (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -70,7 +71,6 @@
+ virtual QDomDocumentFragment save( QDomDocument& doc, double offset );
+ virtual double load(const QDomElement &element, KPresenterDoc *doc);
+ virtual void loadOasisGroupObject( KPresenterDoc *doc, KPrPage * newpage, QDomNode &element, KoOasisContext & context, KPRLoadingInfo *info);
+- virtual bool saveOasis(KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj) const;
+
+ virtual void draw( QPainter *_painter, KoZoomHandler *_zoomhandler,
+ int pageNum, SelectionMode selectionMode, bool drawContour = FALSE );
+@@ -101,6 +101,9 @@
+ virtual void decCmdRef();
+
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++
+ void updateSizes( double fx, double fy );
+ void updateCoords( double dx, double dy );
+
+Index: kpresenter/kppixmapobject.h
+===================================================================
+--- kpresenter/kppixmapobject.h (revision 427945)
++++ kpresenter/kppixmapobject.h (working copy)
+@@ -2,6 +2,7 @@
+
+ /* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -72,7 +73,6 @@
+ { return i18n("Picture"); }
+
+ virtual QDomDocumentFragment save( QDomDocument& doc, double offset );
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
+
+ virtual double load(const QDomElement &element);
+ virtual void loadOasis(const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info);
+@@ -113,11 +113,15 @@
+ virtual void flip(bool horizontal );
+
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++
+ KPPixmapObject() {}
+
+ QPixmap changePictureSettings( QPixmap _tmpPixmap );
+- virtual void saveOasisPictureElement( KoGenStyle &styleobjectauto );
++ virtual void saveOasisPictureElement( KoGenStyle &styleobjectauto ) const;
+ void loadOasisPictureEffect(KoOasisContext & context );
++ virtual void fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const;
+
+ /**
+ * @internal
+Index: kpresenter/kppartobject.h
+===================================================================
+--- kpresenter/kppartobject.h (revision 427945)
++++ kpresenter/kppartobject.h (working copy)
+@@ -49,14 +49,15 @@
+
+ KPresenterChild *getChild() const { return child; }
+ void enableDrawing( bool f ) { _enableDrawing = f; }
+- virtual bool saveOasisPart( KoXmlWriter &xmlWriter, KoStore *store, KoSavingContext& context, int indexObj, int partIndexObj, KoXmlWriter* manifestWriter ) const;
+ virtual void loadOasis(const QDomElement &element, KoOasisContext &context, KPRLoadingInfo *info);
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext &context, int indexObj ) const { return true;/* use saveOasisPart*/};
+
+ public slots:
+ void slot_changed( KoChild *_koChild );
+
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++
+ void updateChildGeometry();
+ virtual void paint( QPainter *_painter,KoZoomHandler*_zoomHandler,
+ int /* pageNum */, bool drawingShadow, bool drawContour = FALSE );
+Index: kpresenter/kpobject.cc
+===================================================================
+--- kpresenter/kpobject.cc (revision 427945)
++++ kpresenter/kpobject.cc (working copy)
+@@ -344,7 +344,7 @@
+ xmlWriter.addAttributePt( "svg:width", ext.width() );
+ xmlWriter.addAttributePt( "svg:height", ext.height() );
+
+- if ( angle!=0.0 )
++ if ( kAbs( angle ) > 1E-6 )
+ {
+ double value = -1 * ( ( double )angle* M_PI )/180.0;
+ QString str=QString( "rotate (%1)" ).arg( value );
+@@ -362,6 +362,40 @@
+ }
+ }
+
++QString KPObject::getStyle( KPOasisSaveContext &sc ) const
++{
++ kdDebug(33001) << "KPObject::getStyle" << endl;
++ KoGenStyle styleObjectAuto;
++ KoGenStyles &mainStyles( sc.context.mainStyles() );
++ if ( sc.onMaster )
++ {
++ styleObjectAuto = KoGenStyle( KPresenterDoc::STYLE_PRESENTATIONSTICKYOBJECT, "presentation" );
++ }
++ else
++ {
++ styleObjectAuto = KoGenStyle( KoGenStyle::STYLE_GRAPHICAUTO, "graphic" );
++ }
++ fillStyle( styleObjectAuto, mainStyles );
++ if ( sc.onMaster )
++ {
++ return mainStyles.lookup( styleObjectAuto, "pr" );
++ }
++ return mainStyles.lookup( styleObjectAuto, "gr" );
++}
++
++void KPObject::fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& /* mainStyles */ ) const
++{
++ kdDebug(33001) << "KPObject::fillStyle" << endl;
++ saveOasisObjectProtectStyle( styleObjectAuto );
++ saveOasisShadowElement( styleObjectAuto );
++}
++
++bool KPObject::saveOasisObjectAttributes( KPOasisSaveContext &/* sc */ ) const
++{
++ kdDebug()<<"bool saveOasisObjectAttributes not implemented";
++ return true;
++}
++
+ bool KPObject::haveAnimation() const
+ {
+ //kdDebug()<<" effect :"<<effect<<" effect3 :"<<effect3<<" a_fileName :"<<a_fileName<<" d_fileName :"<<d_fileName<<" appearTimer :"<<appearTimer<<" disappearTimer :"<<disappearTimer<<endl;
+@@ -849,6 +883,20 @@
+ }
+ }
+
++bool KPObject::saveOasisObject( KPOasisSaveContext &sc ) const
++{
++ sc.xmlWriter.startElement( getOasisElementName() );
++ sc.xmlWriter.addAttribute( "draw:style-name", getStyle( sc ) );
++ saveOasisPosObject( sc.xmlWriter, sc.indexObj );
++ if( !objectName.isEmpty())
++ sc.xmlWriter.addAttribute( "draw:name", objectName );
++
++ saveOasisObjectAttributes( sc );
++
++ sc.xmlWriter.endElement();
++ return true;
++}
++
+ void KPObject::saveOasisShadowElement( KoGenStyle &styleobjectauto ) const
+ {
+ //FIXME default value
+@@ -1628,6 +1676,99 @@
+ // <draw:stroke-dash draw:name="Fine Dotted" draw:style="rect" draw:dots1="1" draw:distance="0.457cm"/>
+ }
+
++bool KPShadowObject::saveOasisDrawPoints( const KoPointArray &points, KPOasisSaveContext &sc )
++{
++ QString listOfPoint;
++ int maxX=0;
++ int maxY=0;
++ KoPointArray::ConstIterator it( points.begin() );
++ for ( ; it != points.end(); ++it )
++ {
++ int tmpX = int( ( *it ).x() * 10000 );
++ int tmpY = int( ( *it ).y() * 10000 );
++ //if ( !listOfPoint.isEmpty() )
++ listOfPoint += QString( " %1,%2" ).arg( tmpX ).arg( tmpY );
++ //else
++ // listOfPoint = QString( "%1,%2" ).arg( tmpX ).arg( tmpY );
++ maxX = QMAX( maxX, tmpX );
++ maxY = QMAX( maxY, tmpY );
++ }
++ sc.xmlWriter.addAttribute("draw:points", listOfPoint );
++ sc.xmlWriter.addAttribute("svg:viewBox", QString( "0 0 %1 %2" ).arg( maxX ).arg( maxY ) );
++ return true;
++}
++
++bool KPShadowObject::loadOasisDrawPoints( KoPointArray &points, const QDomElement &element,
++ KoOasisContext & context, KPRLoadingInfo *info )
++{
++ QStringList ptList = QStringList::split(' ', element.attributeNS( KoXmlNS::draw, "points", QString::null));
++ QStringList viewBox = QStringList::split( ' ', element.attributeNS( KoXmlNS::svg, "viewBox", QString::null ) );
++ //for ( QStringList::Iterator it = viewBox.begin(); it != viewBox.end(); ++it )
++ //{
++ // kdDebug(33001) << "viewBox = " << *it << endl;
++ //}
++
++ int left = 0;
++ int top = 0;
++ int right = 0;
++ int bottom = 0;
++
++ if ( viewBox.size() == 4 )
++ {
++ QStringList::Iterator it = viewBox.begin();
++ left = ( *it++ ).toInt();
++ top = ( *it++ ).toInt();
++ right = ( *it++ ).toInt();
++ bottom = ( *it ).toInt();
++ //kdDebug(33001) << "left = " << left
++ // << "top = " << top
++ // << "right =" << right
++ // << "bottom =" << bottom << endl;
++ }
++ else
++ {
++ //if no viewBox is found
++ for (QStringList::Iterator it = ptList.begin(); it != ptList.end(); ++it)
++ {
++ right = QMAX( (*it).section( ',', 0, 0 ).toInt(), right );
++ bottom = QMAX( (*it).section( ',', 1, 1 ).toInt(), bottom );
++ }
++ }
++
++ if ( right - left != 0 && bottom - top != 0 )
++ {
++ double tmp_x, tmp_y;
++ unsigned int index = 0;
++ for (QStringList::Iterator it = ptList.begin(); it != ptList.end(); ++it)
++ {
++ tmp_x = double( (*it).section( ',', 0, 0 ).toInt() + left ) / ( right - left ) * ext.width();
++ tmp_y = double( (*it).section( ',', 1, 1 ).toInt() + top ) / ( bottom - top ) * ext.height();
++
++ //kdDebug(33001) << "p" << index << " x: " << tmp_x << endl;
++ //kdDebug(33001) << "p" << index << " y: " << tmp_y << endl;
++
++ points.putPoints( index, 1, tmp_x, tmp_y );
++ ++index;
++ }
++ }
++ else
++ {
++ kdDebug(33001) << "problem in viewBox values are: "
++ << "left = " << left << ", "
++ << "top = " << top << ", "
++ << "right =" << right << ", "
++ << "bottom =" << bottom << endl;
++ }
++ return true;
++}
++
++void KPShadowObject::fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const
++{
++ kdDebug(33001) << "KPShadowObject::fillStyle" << endl;
++ KPObject::fillStyle( styleObjectAuto, mainStyles );
++ saveOasisStrokeElement( mainStyles, styleObjectAuto );
++}
++
+ void KPShadowObject::loadOasis(const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info)
+ {
+ //kdDebug()<<"void KPShadowObject::loadOasis(const QDomElement &element)**********************\n";
+@@ -1822,14 +1963,15 @@
+ return fragment;
+ }
+
+-QString KP2DObject::saveOasisBackgroundStyle( KoXmlWriter &xmlWriter, KoGenStyles& mainStyles, int indexObj ) const
++void KP2DObject::fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const
+ {
+- saveOasisPosObject( xmlWriter,indexObj );
+- KoGenStyle styleobjectauto;
+- if ( sticky )
+- styleobjectauto = KoGenStyle( KPresenterDoc::STYLE_PRESENTATIONSTICKYOBJECT, "presentation" );
+- else
+- styleobjectauto = KoGenStyle( KoGenStyle::STYLE_GRAPHICAUTO, "graphic" );
++ kdDebug(33001) << "KP2DObject::fillStyle" << endl;
++ KPShadowObject::fillStyle( styleObjectAuto, mainStyles );
++ saveOasisBackgroundElement( styleObjectAuto, mainStyles );
++}
++
++void KP2DObject::saveOasisBackgroundElement( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const
++{
+ switch ( getFillType() )
+ {
+ case FT_BRUSH:
+@@ -1838,34 +1980,22 @@
+ //todo FIXME when text object doesn't have a background
+ if( brush != QBrush() )
+ {
+- KoOasisStyles::saveOasisFillStyle( styleobjectauto, mainStyles, brush );
++ KoOasisStyles::saveOasisFillStyle( styleObjectAuto, mainStyles, brush );
+ }
+ else
+ {
+- styleobjectauto.addProperty( "draw:fill","none" );
++ styleObjectAuto.addProperty( "draw:fill","none" );
+ }
+ break;
+ }
+ case FT_GRADIENT:
+- styleobjectauto.addProperty( "draw:fill","gradient" );
+- styleobjectauto.addProperty( "draw:fill-gradient-name", saveOasisGradientStyle( mainStyles ) );
++ styleObjectAuto.addProperty( "draw:fill","gradient" );
++ styleObjectAuto.addProperty( "draw:fill-gradient-name", saveOasisGradientStyle( mainStyles ) );
+ break;
+ }
+- saveOasisObjectProtectStyle( styleobjectauto );
+-
+- saveOasisStrokeElement( mainStyles, styleobjectauto );
+- saveOasisMarginElement( styleobjectauto );
+- saveOasisShadowElement( styleobjectauto );
+- saveOasisPictureElement( styleobjectauto );
+-
+- if ( sticky )
+- return mainStyles.lookup( styleobjectauto, "pr" );
+- else
+- return mainStyles.lookup( styleobjectauto, "gr" );
+ }
+
+
+-
+ QString KP2DObject::saveOasisGradientStyle( KoGenStyles& mainStyles ) const
+ {
+ KoGenStyle gradientStyle( KPresenterDoc::STYLE_GRADIENT /*no family name*/);
+@@ -2170,6 +2300,56 @@
+ return offset;
+ }
+
++void KP2DObject::draw( QPainter *_painter, KoZoomHandler*_zoomHandler,
++ int pageNum, SelectionMode selectionMode, bool drawContour )
++{
++ double ox = orig.x();
++ double oy = orig.y();
++ _painter->save();
++
++ // Draw the shadow if any
++ if ( shadowDistance > 0 && !drawContour )
++ {
++ _painter->save();
++ QPen tmpPen( pen );
++ pen.setColor( shadowColor );
++ QBrush tmpBrush( m_brush.getBrush() );
++ QBrush shadowBrush( tmpBrush );
++ shadowBrush.setColor( shadowColor );
++ m_brush.setBrush( shadowBrush );
++
++ if ( angle == 0 )
++ {
++ double sx = ox;
++ double sy = oy;
++ getShadowCoords( sx, sy );
++
++ _painter->translate( _zoomHandler->zoomItX( sx ), _zoomHandler->zoomItY( sy ) );
++ paint( _painter, _zoomHandler, pageNum, true, drawContour );
++ }
++ else
++ {
++ _painter->translate( _zoomHandler->zoomItX(ox), _zoomHandler->zoomItY(oy) );
++ rotateObjectWithShadow(_painter, _zoomHandler);
++ paint( _painter, _zoomHandler, pageNum, true, drawContour );
++ }
++
++ pen = tmpPen;
++ m_brush.setBrush( tmpBrush );
++ _painter->restore();
++ }
++
++ _painter->translate( _zoomHandler->zoomItX(ox), _zoomHandler->zoomItY(oy) );
++
++ if ( angle != 0 )
++ rotateObject(_painter,_zoomHandler);
++ paint( _painter, _zoomHandler, pageNum, false, drawContour );
++
++ _painter->restore();
++
++ KPObject::draw( _painter, _zoomHandler, pageNum, selectionMode, drawContour );
++}
++
+ void KP2DObject::flip( bool horizontal ) {
+ KPObject::flip( horizontal );
+
+Index: kpresenter/kppolygonobject.cc
+===================================================================
+--- kpresenter/kppolygonobject.cc (revision 427945)
++++ kpresenter/kppolygonobject.cc (working copy)
+@@ -68,38 +68,24 @@
+ return dcop;
+ }
+
+-bool KPPolygonObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPPolygonObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- //FIXME me wait that it will define into oo spec
+- xmlWriter.startElement( "draw:regular-polygon" );
+- xmlWriter.addAttribute( "draw:style-name", KP2DObject::saveOasisBackgroundStyle( xmlWriter, context.mainStyles(), indexObj ) );
+-
+- QString listOfPoint;
+- int maxX=0;
+- int maxY=0;
+- KoPointArray::ConstIterator it;
+- for ( it = points.begin(); it != points.end(); ++it ) {
+- int tmpX = 0;
+- int tmpY = 0;
+- tmpX = ( int ) ( KoUnit::toMM( ( *it ).x() )*100 );
+- tmpY = ( int ) ( KoUnit::toMM( ( *it ).y() )*100 );
+- if ( !listOfPoint.isEmpty() )
+- listOfPoint += QString( " %1,%2" ).arg( tmpX ).arg( tmpY );
+- else
+- listOfPoint = QString( "%1,%2" ).arg( tmpX ).arg( tmpY );
+- maxX = QMAX( maxX, tmpX );
+- maxY = QMAX( maxY, tmpY );
++ sc.xmlWriter.addAttribute( "draw:corners", cornersValue );
++ sc.xmlWriter.addAttribute( "draw:concave", checkConcavePolygon ? "true" : "false" );
++ if ( checkConcavePolygon )
++ {
++ sc.xmlWriter.addAttribute( "draw:sharpness", QString( "%1%").arg( sharpnessValue ) );
+ }
+- xmlWriter.addAttribute("draw:points", listOfPoint );
+- xmlWriter.addAttribute("svg:viewBox", QString( "0 0 %1 %2" ).arg( maxX ).arg( maxY ) );
+
+- if( !objectName.isEmpty())
+- xmlWriter.addAttribute( "draw:name", objectName );
+- xmlWriter.endElement();
+ return true;
+ }
+
++const char * KPPolygonObject::getOasisElementName() const
++{
++ return "draw:regular-polygon";
++}
+
++
+ QDomDocumentFragment KPPolygonObject::save( QDomDocument& doc, double offset )
+ {
+ QDomDocumentFragment fragment = KP2DObject::save( doc, offset );
+@@ -133,26 +119,14 @@
+ {
+ kdDebug()<<"void KPPolygonObject::loadOasis( const QDomElement &element )***********\n";
+ KP2DObject::loadOasis( element,context, info );
+- //load point.
+- QStringList ptList = QStringList::split(' ', element.attributeNS( KoXmlNS::draw, "points", QString::null));
+-
+- QString pt_x, pt_y;
+- double tmp_x, tmp_y;
+- unsigned int index = 0;
+- for (QStringList::Iterator it = ptList.begin(); it != ptList.end(); ++it)
++ cornersValue = element.attributeNS( KoXmlNS::draw, "corners", QString::null ).toInt();
++ checkConcavePolygon = element.attributeNS( KoXmlNS::draw, "concave", QString::null ) == "true";
++ sharpnessValue = 0;
++ if ( checkConcavePolygon )
+ {
+- tmp_x = (*it).section(',',0,0).toInt() / 100;
+- tmp_y = (*it).section(',',1,1).toInt() / 100;
+-
+- pt_x.setNum(tmp_x);
+- pt_x+="mm";
+-
+- pt_y.setNum(tmp_y);
+- pt_y+="mm";
+-
+- points.putPoints( index, 1, KoUnit::parseValue(pt_x),KoUnit::parseValue(pt_y) );
+- ++index;
++ sharpnessValue = element.attributeNS( KoXmlNS::draw, "sharpness", QString::null ).remove( '%').toInt();
+ }
++ drawPolygon();
+ }
+
+ double KPPolygonObject::load( const QDomElement &element )
+@@ -280,7 +254,8 @@
+
+ void KPPolygonObject::drawPolygon()
+ {
+- KoRect _rect = points.boundingRect();
++ kdDebug()<<"void KPPolygonObject::drawPolygon()***********\n";
++ KoRect _rect( 0, 0, ext.width(), ext.height() );
+ double angle = 2 * M_PI / cornersValue;
+ double diameter = static_cast<double>( QMAX( _rect.width(), _rect.height() ) );
+ double radius = diameter * 0.5;
+Index: kpresenter/kpcubicbeziercurveobject.cc
+===================================================================
+--- kpresenter/kpcubicbeziercurveobject.cc (revision 427945)
++++ kpresenter/kpcubicbeziercurveobject.cc (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 2001 Toshitaka Fujioka <fujioka@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -60,16 +61,17 @@
+ return dcop;
+ }
+
+-bool KPCubicBezierCurveObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPCubicBezierCurveObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- kdDebug()<<"bool KPCubicBezierCurveObject::saveOasis( KoXmlWriter &xmlWriter ) not implemented\n";
+- //saveOasisShadowElement( styleobjectauto );
+- //KPPointObject::saveOasisStrokeElement( KoGenStyles& mainStyles );
+-//
+- //call saveOasisStrokeElement( KoGenStyle &styleobjectauto );
++ kdDebug()<<"bool KPCubicBezierCurveObject::saveOasis( KoXmlWriter & xmlWriter ) not implemented\n";
+ return true;
+ }
+
++const char * KPCubicBezierCurveObject::getOasisElementName() const
++{
++ return "draw:custom-shape";
++}
++
+ void KPCubicBezierCurveObject::loadOasis( const QDomElement &element, KoOasisContext & context, KPRLoadingInfo* info )
+ {
+ //todo
+Index: kpresenter/kpquadricbeziercurveobject.h
+===================================================================
+--- kpresenter/kpquadricbeziercurveobject.h (revision 427945)
++++ kpresenter/kpquadricbeziercurveobject.h (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 2001 Toshitaka Fujioka <fujioka@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -43,7 +44,6 @@
+ virtual QString getTypeString() const { return i18n("Quadric Bezier Curve"); }
+
+ virtual QDomDocumentFragment save( QDomDocument& doc, double offset );
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
+ virtual void loadOasis( const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info );
+
+ virtual double load( const QDomElement &element );
+@@ -53,6 +53,9 @@
+ bool isClosed()const;
+
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++
+ virtual void updatePoints( double _fx, double _fy );
+ virtual KoPointArray getDrawingPoints() const;
+
+Index: kpresenter/autoforms/Arrows/ArrowLeftUp.desktop
+===================================================================
+--- kpresenter/autoforms/Arrows/ArrowLeftUp.desktop (revision 427945)
++++ kpresenter/autoforms/Arrows/ArrowLeftUp.desktop (working copy)
+@@ -3,6 +3,7 @@
+ Type=Link
+ URL=.source/ArrowLeftUp.atf
+ Name=Arrow Left/Up
++Name[cy]=Saeth i'r Chwith/i Fyny
+ Name[da]=Pil til venstre/op
+ Name[de]=Pfeil nach links/oben
+ Name[el]=Αριστερό/πάνω βέλος
+Index: kpresenter/autoforms/Arrows/ArrowRightDown.desktop
+===================================================================
+--- kpresenter/autoforms/Arrows/ArrowRightDown.desktop (revision 427945)
++++ kpresenter/autoforms/Arrows/ArrowRightDown.desktop (working copy)
+@@ -3,6 +3,7 @@
+ Type=Link
+ URL=.source/ArrowRightDown.atf
+ Name=Arrow Right/Down
++Name[cy]=Saeth i'r Dde/i Lawr
+ Name[da]=Pil til højre/ned
+ Name[de]=Pfeil nach rechts/unten
+ Name[el]=Δεξί/κάτω βέλος
+Index: kpresenter/autoforms/Arrows/ArrowDown.desktop
+===================================================================
+--- kpresenter/autoforms/Arrows/ArrowDown.desktop (revision 427945)
++++ kpresenter/autoforms/Arrows/ArrowDown.desktop (working copy)
+@@ -3,6 +3,7 @@
+ Type=Link
+ URL=.source/ArrowDown.atf
+ Name=Arrow Down
++Name[cy]=Saeth i Lawr
+ Name[da]=Pil ned
+ Name[de]=Pfeil nach unten
+ Name[el]=Κάτω βέλος
+Index: kpresenter/autoforms/Arrows/ArrowRight.desktop
+===================================================================
+--- kpresenter/autoforms/Arrows/ArrowRight.desktop (revision 427945)
++++ kpresenter/autoforms/Arrows/ArrowRight.desktop (working copy)
+@@ -3,6 +3,7 @@
+ Type=Link
+ URL=.source/ArrowRight.atf
+ Name=Arrow Right
++Name[cy]=Saeth i'r Dde
+ Name[da]=Pil til højre
+ Name[de]=Pfeil nach rechts
+ Name[el]=Δεξί βέλος
+Index: kpresenter/autoforms/Arrows/ArrowLeftDown.desktop
+===================================================================
+--- kpresenter/autoforms/Arrows/ArrowLeftDown.desktop (revision 427945)
++++ kpresenter/autoforms/Arrows/ArrowLeftDown.desktop (working copy)
+@@ -3,6 +3,7 @@
+ Type=Link
+ URL=.source/ArrowLeftDown.atf
+ Name=Arrow Left/Down
++Name[cy]=Saeth i'r Chwith/i Lawr
+ Name[da]=Pil til venstre/ned
+ Name[de]=Pfeil nach links/unten
+ Name[el]=Αριστερό/κάτω βέλος
+Index: kpresenter/autoforms/Arrows/ArrowRightUp.desktop
+===================================================================
+--- kpresenter/autoforms/Arrows/ArrowRightUp.desktop (revision 427945)
++++ kpresenter/autoforms/Arrows/ArrowRightUp.desktop (working copy)
+@@ -3,6 +3,7 @@
+ Type=Link
+ URL=.source/ArrowRightUp.atf
+ Name=Arrow Right/Up
++Name[cy]=Saeth i'r Chwith/i Fyny
+ Name[da]=Pil til højre/op
+ Name[de]=Pfeil nach rechts/oben
+ Name[el]=Δεξί/πάνω βέλος
+Index: kpresenter/autoforms/Arrows/ArrowUp.desktop
+===================================================================
+--- kpresenter/autoforms/Arrows/ArrowUp.desktop (revision 427945)
++++ kpresenter/autoforms/Arrows/ArrowUp.desktop (working copy)
+@@ -3,6 +3,7 @@
+ Type=Link
+ URL=.source/ArrowUp.atf
+ Name=Arrow Up
++Name[cy]=Saeth i Fyny
+ Name[da]=Pil op
+ Name[de]=Pfeil nach oben
+ Name[el]=Πάνω βέλος
+Index: kpresenter/autoforms/Arrows/ArrowLeft.desktop
+===================================================================
+--- kpresenter/autoforms/Arrows/ArrowLeft.desktop (revision 427945)
++++ kpresenter/autoforms/Arrows/ArrowLeft.desktop (working copy)
+@@ -3,6 +3,7 @@
+ Type=Link
+ URL=.source/ArrowLeft.atf
+ Name=Arrow Left
++Name[cy]=Saeth i'r Chwith
+ Name[da]=Pil til venstre
+ Name[de]=Pfeil nach links
+ Name[el]=Αριστερό βέλος
+Index: kpresenter/kpfreehandobject.cc
+===================================================================
+--- kpresenter/kpfreehandobject.cc (revision 427945)
++++ kpresenter/kpfreehandobject.cc (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 2001 Toshitaka Fujioka <fujioka@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -54,21 +55,26 @@
+ return dcop;
+ }
+
+-bool KPFreehandObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPFreehandObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- kdDebug()<<"bool KPFreehandObject::saveOasis( KoXmlWriter &xmlWriter ) not implemented\n";
+- xmlWriter.startElement( "draw:path" );
+- //FIXME !!!!!!!!!!!!!!!!!!!!!
+-//xmlWriter.addAttribute( "draw:style-name", KP2DObject::saveOasisBackgroundStyle( xmlWriter, mainStyles ) );
+-//call saveOasisStrokeElement( KoGenStyle &styleobjectauto );
+- if( !objectName.isEmpty())
+- xmlWriter.addAttribute( "draw:name", objectName );
+- //save path I don't know how to do.
+- //add "svg:viewBox" add "svg:d"
+- xmlWriter.endElement();
++ kdDebug()<<"bool KPFreehandObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) not implemented\n";
+ return true;
+ }
+
++const char * KPFreehandObject::getOasisElementName() const
++{
++ return "draw:path";
++}
++
++void KPFreehandObject::loadOasis( const QDomElement &element, KoOasisContext & context, KPRLoadingInfo* info )
++{
++ //todo
++ //we use draw:path
++
++ //load marker
++ loadOasisMarker( context );
++}
++
+ QDomDocumentFragment KPFreehandObject::save( QDomDocument& doc,double offset )
+ {
+ return KPPointObject::save( doc, offset );
+Index: kpresenter/kppieobject.cc
+===================================================================
+--- kpresenter/kppieobject.cc (revision 427945)
++++ kpresenter/kppieobject.cc (working copy)
+@@ -1,5 +1,6 @@
+ /* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -86,40 +87,38 @@
+ return fragment;
+ }
+
+-bool KPPieObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPPieObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- xmlWriter.startElement( ( ext.width() == ext.height() ) ? "draw:circle" : "draw:ellipse" );
+- xmlWriter.addAttribute( "draw:style-name", KP2DObject::saveOasisBackgroundStyle( xmlWriter, context.mainStyles(),indexObj ) );
+-
+- if( !objectName.isEmpty())
+- xmlWriter.addAttribute( "draw:name", objectName );
+ switch( pieType )
+ {
+- case PT_PIE:
+- xmlWriter.addAttribute( "draw:kind", "section" );
+- break;
+- case PT_CHORD:
+- xmlWriter.addAttribute( "draw:kind", "cut" );
+- break;
+- case PT_ARC:
+- xmlWriter.addAttribute( "draw:kind", "arc" );
+- break;
+- default:
+- kdDebug()<<" type of pie not supported\n";
++ case PT_PIE:
++ sc.xmlWriter.addAttribute( "draw:kind", "section" );
++ break;
++ case PT_CHORD:
++ sc.xmlWriter.addAttribute( "draw:kind", "cut" );
++ break;
++ case PT_ARC:
++ sc.xmlWriter.addAttribute( "draw:kind", "arc" );
++ break;
++ default:
++ kdDebug() << " type of pie not supported" << endl;
+ }
+- int startangle = 45;
+- if ( p_angle != 0.0 )
+- startangle = ( ( int )p_angle )/16;
+- xmlWriter.addAttribute( "draw:start-angle", startangle );
+- int endangle = endangle = ( ( int ) p_len/16 )+startangle;
+- xmlWriter.addAttribute( "draw:end-angle", endangle );
+
+- //we don't have a simple object
+- xmlWriter.endElement();
++ int startangle = ( (int)p_angle / 16 );
++ sc.xmlWriter.addAttribute( "draw:start-angle", startangle );
++
++ int endangle = ( (int) p_len / 16 ) + startangle;
++ sc.xmlWriter.addAttribute( "draw:end-angle", endangle );
++
+ return true;
+ }
+
++const char * KPPieObject::getOasisElementName() const
++{
++ return ext.width() == ext.height() ? "draw:circle" : "draw:ellipse";
++}
+
++
+ void KPPieObject::loadOasis(const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info)
+ {
+ kdDebug()<<"void KPPieObject::loadOasis(const QDomElement &element) ***************\n";
+Index: kpresenter/kpobject.h
+===================================================================
+--- kpresenter/kpobject.h (revision 427945)
++++ kpresenter/kpobject.h (working copy)
+@@ -136,9 +136,25 @@
+ virtual double load(const QDomElement &element);
+ virtual void loadOasis(const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info);
+
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext &context, int indexObj ) const =0;
++ struct KPOasisSaveContext
++ {
++ KPOasisSaveContext( KoXmlWriter &_xmlWriter, KoSavingContext &_context,
++ int &_indexObj, int &_partIndexObj, bool _onMaster )
++ : xmlWriter( _xmlWriter )
++ , context( _context )
++ , indexObj( _indexObj )
++ , partIndexObj( _partIndexObj )
++ , onMaster( _onMaster ) {};
++
++ KoXmlWriter &xmlWriter;
++ KoSavingContext &context;
++ int &indexObj;
++ int &partIndexObj;
++ bool onMaster;
++ };
+
+- void saveOasisPosObject( KoXmlWriter &xmlWriter, int indexObj ) const;
++ virtual bool saveOasisObject( KPOasisSaveContext &sc ) const;
++
+ //return true if we have a animation into object
+ bool saveOasisObjectStyleShowAnimation( KoXmlWriter &animation, int objectId );
+ bool saveOasisObjectStyleHideAnimation( KoXmlWriter &animation, int objectId );
+@@ -297,8 +313,17 @@
+
+ void saveOasisObjectProtectStyle( KoGenStyle &styleobjectauto ) const;
+ void saveOasisShadowElement( KoGenStyle &styleobjectauto ) const;
+- virtual void saveOasisPictureElement( KoGenStyle& /*styleobjectauto*/ ) const {};
+
++ QString getStyle( KPOasisSaveContext &sc ) const;
++ virtual void fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const;
++ /**
++ * Get the element name for saving the object
++ */
++ virtual const char * getOasisElementName() const = 0;
++ //virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const = 0;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++ virtual void saveOasisPosObject( KoXmlWriter &xmlWriter, int indexObj ) const;
++
+ float angle;
+ KoPoint orig;
+ KoSize ext;
+@@ -378,6 +403,19 @@
+
+ protected:
+ /**
++ * Helper method for saving draw:points. The svg:viewBox is also saved.
++ */
++ static bool saveOasisDrawPoints( const KoPointArray &points, KPOasisSaveContext &sc );
++
++ /**
++ * Helper method for loading draw:points. The svg:viewBox is taken into account.
++ */
++ bool loadOasisDrawPoints( KoPointArray &points, const QDomElement &element,
++ KoOasisContext & context, KPRLoadingInfo *info );
++
++ virtual void fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const;
++
++ /**
+ * @ref save() only saves if the pen is different from the default pen.
+ * The default pen can vary depending on the subclass of KPShadowObject
+ * (e.g. it's a black solidline for lines and rects, but it's NoPen
+@@ -445,14 +483,16 @@
+ virtual QDomDocumentFragment save( QDomDocument& doc, double offset );
+ virtual double load(const QDomElement &element);
+ virtual void loadOasis(const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info);
++ virtual void draw( QPainter *_painter, KoZoomHandler*_zoomHandler,
++ int pageNum, SelectionMode selectionMode, bool drawContour = FALSE );
+
+ virtual void flip(bool horizontal );
+
+ protected:
+ QString saveOasisGradientStyle( KoGenStyles& mainStyles ) const;
+- QString saveOasisBackgroundStyle( KoXmlWriter &xmlWriter, KoGenStyles& mainStyles, int indexObj ) const;
+
+- virtual void saveOasisMarginElement( KoGenStyle& /*styleobjectauto*/ ) const { /* nothing just used into kptextobject*/};
++ virtual void fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const;
++ void saveOasisBackgroundElement( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const;
+
+ KPrBrush m_brush;
+ KPGradient *gradient;
+Index: kpresenter/kptextobject.h
+===================================================================
+--- kpresenter/kptextobject.h (revision 427945)
++++ kpresenter/kptextobject.h (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -81,7 +82,6 @@
+ virtual QDomDocumentFragment save( QDomDocument& doc, double offset );
+ virtual double load(const QDomElement &element);
+ virtual void loadOasis(const QDomElement &element, KoOasisContext& context, KPRLoadingInfo *info);
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
+ virtual void saveOasisMarginElement( KoGenStyle &styleobjectauto ) const;
+
+ virtual void paint( QPainter *_painter, KoZoomHandler*_zoomHandler,
+@@ -180,9 +180,14 @@
+ void slotAfterFormatting( int, KoTextParag*, bool* );
+ void slotParagraphDeleted(KoTextParag*_parag);
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++
+ virtual QDomElement saveKTextObject( QDomDocument& doc );
+ QDomElement saveHelper(const QString &tmpText,KoTextFormat*lastFormat ,QDomDocument &doc);
+
++ virtual void fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const;
++
+ virtual void loadKTextObject( const QDomElement &e );
+ void drawText( QPainter* _painter, KoZoomHandler* zoomHandler, bool onlyChanged, KoTextCursor* cursor, bool resetChanged );
+ void drawParags( QPainter *p, KoZoomHandler* zoomHandler, const QColorGroup& cg, int from, int to );
+Index: kpresenter/kppolygonobject.h
+===================================================================
+--- kpresenter/kppolygonobject.h (revision 427945)
++++ kpresenter/kppolygonobject.h (working copy)
+@@ -59,7 +59,6 @@
+ int getSharpnessValue() const { return sharpnessValue; }
+
+ virtual QDomDocumentFragment save( QDomDocument& doc, double offset );
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
+
+ virtual double load( const QDomElement &element );
+ virtual void loadOasis( const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info );
+@@ -69,6 +68,9 @@
+ virtual KoPoint getRealOrig() const;
+
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++
+ virtual void paint( QPainter *_painter,KoZoomHandler*_zoomHandler,
+ int /* pageNum */, bool drawingShadow, bool drawContour );
+
+Index: kpresenter/kpgroupobject.cc
+===================================================================
+--- kpresenter/kpgroupobject.cc (revision 427945)
++++ kpresenter/kpgroupobject.cc (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -132,24 +133,23 @@
+ }
+
+
+-bool KPGroupObject::saveOasis(KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj) const
++bool KPGroupObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- xmlWriter.startElement( "draw:g" );
+-
+ QPtrListIterator<KPObject> it( objects );
+ for ( ; it.current() ; ++it )
+ {
+-#if 0
+- if ( it.current()->getType() == OT_PART )
+- continue;
+-#endif
+- it.current()->saveOasis( xmlWriter, context, indexObj );
++ //TODO what to do with parts?
++ it.current()->saveOasisObject( sc );
+ }
+- xmlWriter.endElement();
+ return true;
+ }
+
++const char * KPGroupObject::getOasisElementName() const
++{
++ return "draw:g";
++}
+
++
+ void KPGroupObject::loadOasisGroupObject( KPresenterDoc *_doc, KPrPage * newpage, QDomNode &element, KoOasisContext & context, KPRLoadingInfo *info)
+ {
+ //KPObject::loadOasis( element, context, info );
+Index: kpresenter/kprectobject.cc
+===================================================================
+--- kpresenter/kprectobject.cc (revision 427945)
++++ kpresenter/kprectobject.cc (working copy)
+@@ -76,18 +76,19 @@
+ return fragment;
+ }
+
+-bool KPRectObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPRectObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- xmlWriter.startElement( "draw:rect" );
+- xmlWriter.addAttribute( "draw:style-name", KP2DObject::saveOasisBackgroundStyle( xmlWriter, context.mainStyles(), indexObj ) );
+-
+- if( !objectName.isEmpty())
+- xmlWriter.addAttribute( "draw:name", objectName );
+- xmlWriter.endElement();
++ // TODO corner-radius
+ return true;
+ }
+
+
++const char * KPRectObject::getOasisElementName() const
++{
++ return "draw:rect";
++}
++
++
+ void KPRectObject::loadOasis(const QDomElement &element, KoOasisContext&context, KPRLoadingInfo *info)
+ {
+ KP2DObject::loadOasis(element, context, info);
+Index: kpresenter/kpellipseobject.cc
+===================================================================
+--- kpresenter/kpellipseobject.cc (revision 427945)
++++ kpresenter/kpellipseobject.cc (working copy)
+@@ -116,14 +116,14 @@
+ return size;
+ }
+
+-bool KPEllipseObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPEllipseObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- xmlWriter.startElement( ( ext.width() == ext.height() ) ? "draw:circle" : "draw:ellipse" );
+- xmlWriter.addAttribute( "draw:style-name", KP2DObject::saveOasisBackgroundStyle( xmlWriter, context.mainStyles(), indexObj ) );
+-
+- if( !objectName.isEmpty())
+- xmlWriter.addAttribute( "draw:name", objectName );
+- xmlWriter.endElement();
++ // nothing to do
+ return true;
+ }
+
++const char * KPEllipseObject::getOasisElementName() const
++{
++ return ext.width() == ext.height() ? "draw:circle" : "draw:ellipse";
++}
++
+Index: kpresenter/kppolylineobject.h
+===================================================================
+--- kpresenter/kppolylineobject.h (revision 427945)
++++ kpresenter/kppolylineobject.h (working copy)
+@@ -47,8 +47,10 @@
+ virtual QDomDocumentFragment save( QDomDocument& doc, double offset );
+ virtual double load( const QDomElement &element );
+ virtual void loadOasis(const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info);
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
+
++protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
+ };
+
+ #endif
+Index: kpresenter/kpclosedlineobject.cc
+===================================================================
+--- kpresenter/kpclosedlineobject.cc (revision 427945)
++++ kpresenter/kpclosedlineobject.cc (working copy)
+@@ -90,36 +90,18 @@
+ return fragment;
+ }
+
+-bool KPClosedLineObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPClosedLineObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- xmlWriter.startElement( "draw:polygon" );
+- xmlWriter.addAttribute( "draw:style-name", KP2DObject::saveOasisBackgroundStyle( xmlWriter, context.mainStyles(), indexObj ) );
+-
+- QString listOfPoint;
+- int maxX=0;
+- int maxY=0;
+- KoPointArray::ConstIterator it;
+- for ( it = points.begin(); it != points.end(); ++it ) {
+- int tmpX = 0;
+- int tmpY = 0;
+- tmpX = ( int ) ( KoUnit::toMM( ( *it ).x() )*100 );
+- tmpY = ( int ) ( KoUnit::toMM( ( *it ).y() )*100 );
+- if ( !listOfPoint.isEmpty() )
+- listOfPoint += QString( " %1,%2" ).arg( tmpX ).arg( tmpY );
+- else
+- listOfPoint = QString( "%1,%2" ).arg( tmpX ).arg( tmpY );
+- maxX = QMAX( maxX, tmpX );
+- maxY = QMAX( maxY, tmpY );
+- }
+- xmlWriter.addAttribute("draw:points", listOfPoint );
+- xmlWriter.addAttribute("svg:viewBox", QString( "0 0 %1 %2" ).arg( maxX ).arg( maxY ) );
+-
+- if( !objectName.isEmpty())
+- xmlWriter.addAttribute( "draw:name", objectName );
+- xmlWriter.endElement();
++ KPShadowObject::saveOasisDrawPoints( points, sc );
+ return true;
+ }
+
++const char * KPClosedLineObject::getOasisElementName() const
++{
++ return "draw:polygon";
++}
++
++
+ double KPClosedLineObject::load( const QDomElement &element )
+ {
+ double offset = KP2DObject::load( element );
+@@ -269,26 +251,7 @@
+ {
+ kdDebug()<<"void KPClosedLineObject::loadOasis( const QDomElement &element )***********\n";
+ KP2DObject::loadOasis( element,context, info );
+- //load point.
+- QStringList ptList = QStringList::split(' ', element.attributeNS( KoXmlNS::draw, "points", QString::null));
+-
+- QString pt_x, pt_y;
+- double tmp_x, tmp_y;
+- unsigned int index = 0;
+- for (QStringList::Iterator it = ptList.begin(); it != ptList.end(); ++it)
+- {
+- tmp_x = (*it).section(',',0,0).toInt() / 100;
+- tmp_y = (*it).section(',',1,1).toInt() / 100;
+-
+- pt_x.setNum(tmp_x);
+- pt_x+="mm";
+-
+- pt_y.setNum(tmp_y);
+- pt_y+="mm";
+-
+- points.putPoints( index, 1, KoUnit::parseValue(pt_x),KoUnit::parseValue(pt_y) );
+- ++index;
+- }
++ KPShadowObject::loadOasisDrawPoints( points, element, context, info );
+ }
+
+ KoSize KPClosedLineObject::getRealSize() const {
+Index: kpresenter/kpclosedlineobject.h
+===================================================================
+--- kpresenter/kpclosedlineobject.h (revision 427945)
++++ kpresenter/kpclosedlineobject.h (working copy)
+@@ -53,13 +53,14 @@
+ virtual QDomDocumentFragment save( QDomDocument& doc, double offset );
+ virtual double load( const QDomElement &element );
+ virtual void loadOasis( const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info );
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
+
+ virtual void flip(bool horizontal );
+ virtual KoSize getRealSize() const;
+ virtual KoPoint getRealOrig() const;
+
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
+ virtual void paint( QPainter *_painter,KoZoomHandler*_zoomHandler,
+ int /* pageNum */, bool drawingShadow, bool drawContour );
+
+Index: kpresenter/kpresenter_doc.cc
+===================================================================
+--- kpresenter/kpresenter_doc.cc (revision 427945)
++++ kpresenter/kpresenter_doc.cc (working copy)
+@@ -1770,33 +1770,35 @@
+ else
+ newpage->appendObject(kppixmapobject);
+ }
+-
+- QDomNode object = KoDom::namedItemNS( o, KoXmlNS::draw, "object" );
+- kdDebug()<<" object:"<<object.isNull()<<endl;
+- if ( !object.isNull() )
+- {
+- fillStyleStack( o, context );
+- KPresenterChild *ch = new KPresenterChild( this );
+- QRect r;
+- KPPartObject *kppartobject = new KPPartObject( ch );
+- kppartobject->loadOasis( o, context, m_loadingInfo );
+- r = ch->geometry();
+- if ( groupObject )
+- groupObject->addObjects( kppartobject );
+- else
+- newpage->appendObject(kppartobject);
+- insertChild( ch );
+- kppartobject->setOrig( r.x(), r.y() );
+- kppartobject->setSize( r.width(), r.height() );
+- }
+ else
+ {
+- KPTextObject *kptextobject = new KPTextObject( this );
+- kptextobject->loadOasis(o, context, m_loadingInfo);
+- if ( groupObject )
+- groupObject->addObjects( kptextobject );
++ QDomNode object = KoDom::namedItemNS( o, KoXmlNS::draw, "object" );
++ kdDebug()<<" object:"<<object.isNull()<<endl;
++ if ( !object.isNull() )
++ {
++ fillStyleStack( o, context );
++ KPresenterChild *ch = new KPresenterChild( this );
++ QRect r;
++ KPPartObject *kppartobject = new KPPartObject( ch );
++ kppartobject->loadOasis( o, context, m_loadingInfo );
++ r = ch->geometry();
++ if ( groupObject )
++ groupObject->addObjects( kppartobject );
++ else
++ newpage->appendObject(kppartobject);
++ insertChild( ch );
++ kppartobject->setOrig( r.x(), r.y() );
++ kppartobject->setSize( r.width(), r.height() );
++ }
+ else
+- newpage->appendObject(kptextobject);
++ {
++ KPTextObject *kptextobject = new KPTextObject( this );
++ kptextobject->loadOasis(o, context, m_loadingInfo);
++ if ( groupObject )
++ groupObject->addObjects( kptextobject );
++ else
++ newpage->appendObject(kptextobject);
++ }
+ }
+ }
+ else if ( name == "rect" && isDrawNS) // rectangle
+@@ -1836,7 +1838,10 @@
+ fillStyleStack( o, context );
+ KPLineObject *kplineobject = new KPLineObject();
+ kplineobject->loadOasis(o, context, m_loadingInfo);
+- newpage->appendObject(kplineobject);
++ if ( groupObject )
++ groupObject->addObjects( kplineobject );
++ else
++ newpage->appendObject( kplineobject );
+ }
+ else if (name=="polyline" && isDrawNS) { // polyline
+ fillStyleStack( o, context );
+Index: kpresenter/kppixmapobject.cc
+===================================================================
+--- kpresenter/kppixmapobject.cc (revision 427945)
++++ kpresenter/kppixmapobject.cc (working copy)
+@@ -2,6 +2,7 @@
+
+ /* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -101,7 +102,7 @@
+ return QString::number( val )+"%";
+ }
+
+-void KPPixmapObject::saveOasisPictureElement( KoGenStyle &styleobjectauto )
++void KPPixmapObject::saveOasisPictureElement( KoGenStyle &styleobjectauto ) const
+ {
+
+ if ( bright != 0 )
+@@ -201,26 +202,24 @@
+ }
+ }
+
+-
+-bool KPPixmapObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPPixmapObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- xmlWriter.startElement( "draw:frame" );
+- xmlWriter.addAttribute( "draw:style-name", KP2DObject::saveOasisBackgroundStyle( xmlWriter, context.mainStyles(),indexObj ) );
+- if( !objectName.isEmpty())
+- xmlWriter.addAttribute( "draw:name", objectName );
++ sc.xmlWriter.startElement( "draw:image" );
++ sc.xmlWriter.addAttribute( "xlink:type", "simple" );
++ sc.xmlWriter.addAttribute( "xlink:show", "embed" );
++ sc.xmlWriter.addAttribute( "xlink:actuate", "onLoad" );
++ sc.xmlWriter.addAttribute( "xlink:href", imageCollection->getOasisFileName( image ) );
++ sc.xmlWriter.endElement();
+
+- xmlWriter.startElement( "draw:image" );
+- xmlWriter.addAttribute( "xlink:type", "simple" );
+- xmlWriter.addAttribute( "xlink:show", "embed" );
+- xmlWriter.addAttribute( "xlink:actuate", "onLoad" );
+- xmlWriter.addAttribute( "xlink:href", imageCollection->getOasisFileName(image) );
+- xmlWriter.endElement();
+-
+- xmlWriter.endElement();
+ return true;
+ }
+
++const char * KPPixmapObject::getOasisElementName() const
++{
++ return "draw:frame";
++}
+
++
+ // Deprecated, same as KPPixmapObject::loadPicture
+ void KPPixmapObject::loadImage( const QString & fileName )
+ {
+@@ -339,6 +338,12 @@
+
+ }
+
++void KPPixmapObject::fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const
++{
++ KP2DObject::fillStyle( styleObjectAuto, mainStyles );
++ saveOasisPictureElement( styleObjectAuto );
++}
++
+ void KPPixmapObject::loadOasis(const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info)
+ {
+ //load it into kpresenter_doc
+Index: kpresenter/kpautoformobject.h
+===================================================================
+--- kpresenter/kpautoformobject.h (revision 427945)
++++ kpresenter/kpautoformobject.h (working copy)
+@@ -63,10 +63,12 @@
+ { return lineEnd; }
+
+ virtual QDomDocumentFragment save( QDomDocument& doc,double offset );
+- virtual bool saveOasis( KoXmlWriter & xmlWriter, KoSavingContext& context, int indexObj ) const;
+
+ virtual double load(const QDomElement &element);
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++
+ virtual void paint( QPainter *_painter, KoZoomHandler *_zoomHandler,
+ int /* pageNum */, bool drawingShadow, bool drawContour = FALSE );
+
+Index: kpresenter/kppartobject.cc
+===================================================================
+--- kpresenter/kppartobject.cc (revision 427945)
++++ kpresenter/kppartobject.cc (working copy)
+@@ -63,39 +63,25 @@
+ zh->zoomItY( getOrig().y() + getSize().height() / 2 ) ) );
+ }
+
+-bool KPPartObject::saveOasisPart( KoXmlWriter &xmlWriter, KoStore *store, KoSavingContext& context, int indexObj, int partIndexObj, KoXmlWriter* manifestWriter ) const
++bool KPPartObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- kdDebug() << "KPPartObject::saveOasisPart " << partIndexObj << endl;
+- xmlWriter.startElement( "draw:frame" );
+- // saveOasisBackgroundStyle also saves draw:id, x,y,width and height....
+- xmlWriter.addAttribute( "draw:style-name", KP2DObject::saveOasisBackgroundStyle( xmlWriter, context.mainStyles(),indexObj ) );
+- if( !objectName.isEmpty())
+- xmlWriter.addAttribute( "draw:name", objectName );
++ kdDebug() << "KPPartObject::saveOasisPart " << sc.partIndexObj << endl;
+
+-#if 0 // geometry was already saved, this isn't needed
+- // geometry is no zoom value !
+- QRect _rect = child->geometry();
+- KoZoomHandler* zh = child->parent()->zoomHandler();
+- double tmpX = zh->unzoomItX( _rect.x() );
+- double tmpY = zh->unzoomItY( _rect.y() );
+- double tmpWidth = zh->unzoomItX( _rect.width() );
+- double tmpHeight = zh->unzoomItY( _rect.height() );
+- //child->setGeometry( QRect( tmpX, tmpY, tmpWidth, tmpHeight ) ); // ## why?
+- xmlWriter.addAttributePt( "svg:width", tmpWidth );
+- xmlWriter.addAttributePt( "svg:height", tmpHeight );
+- xmlWriter.addAttributePt( "svg:x", tmpX );
+- xmlWriter.addAttributePt( "svg:y", tmpY );
+-#endif
++ sc.xmlWriter.startElement( "draw:object" );
++ const QString name = QString( "Object_%1" ).arg( sc.partIndexObj + 1 );
++ ++sc.partIndexObj;
++ child->saveOasisAttributes( sc.xmlWriter, name );
+
+- xmlWriter.startElement( "draw:object" );
+- const QString name = QString( "Object_%1" ).arg( partIndexObj+1 );
+- child->saveOasisAttributes( xmlWriter, name );
+-
+- xmlWriter.endElement(); // draw:object
+- xmlWriter.endElement(); // draw:frame
++ sc.xmlWriter.endElement();
+ return true;
+ }
+
++const char * KPPartObject::getOasisElementName() const
++{
++ return "draw:frame";
++}
++
++
+ void KPPartObject::loadOasis(const QDomElement &element, KoOasisContext&context, KPRLoadingInfo *info)
+ {
+ kdDebug()<<"void KPPartObject::loadOasis(const QDomElement &element)******************\n";
+Index: kpresenter/kprpage.cc
+===================================================================
+--- kpresenter/kprpage.cc (revision 427945)
++++ kpresenter/kprpage.cc (working copy)
+@@ -131,6 +131,8 @@
+
+ void KPrPage::saveOasisObject( KoStore *store, KoXmlWriter &xmlWriter, KoSavingContext& context, int & indexObj, int &partIndexObj, KoXmlWriter* manifestWriter, bool stickyObj ) const
+ {
++ KPObject::KPOasisSaveContext sc( xmlWriter, context, indexObj, partIndexObj, isMasterPage() );
++
+ KTempFile animationTmpFile;
+ animationTmpFile.setAutoDelete( true );
+ QFile* tmpFile = animationTmpFile.file();
+@@ -139,17 +141,10 @@
+ QPtrListIterator<KPObject> it( m_objectList );
+ for ( ; it.current() ; ++it )
+ {
+- if ( it.current()->getType() == OT_PART )
+- {
+- static_cast<KPPartObject*>( it.current() )->saveOasisPart( xmlWriter, store, context, indexObj, partIndexObj, manifestWriter);
+- ++partIndexObj;
+- }
+- else
+- {
+- if ( it.current()== m_doc->header() || it.current()== m_doc->footer())
+- continue;
+- it.current()->saveOasis( xmlWriter, context, indexObj );
+- }
++ if ( it.current()== m_doc->header() || it.current()== m_doc->footer())
++ continue;
++ it.current()->saveOasisObject( sc );
++
+ if ( !stickyObj && it.current()->haveAnimation() )
+ {
+ kdDebug()<<" it.current()->haveAnimation() \n";
+Index: kpresenter/kptextobject.cc
+===================================================================
+--- kpresenter/kptextobject.cc (revision 427945)
++++ kpresenter/kptextobject.cc (working copy)
+@@ -212,22 +212,19 @@
+ return fragment;
+ }
+
+-bool KPTextObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPTextObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- xmlWriter.startElement( "draw:frame" );
+- // #### This should use KoGenStyle to share the style
+- xmlWriter.addAttribute( "draw:style-name", KP2DObject::saveOasisBackgroundStyle( xmlWriter, context.mainStyles(), indexObj ) );
+- if( !objectName.isEmpty())
+- xmlWriter.addAttribute( "draw:name", objectName );
+-
+- xmlWriter.startElement( "draw:text-box" );
+- m_textobj->saveOasisContent( xmlWriter, context );
+- xmlWriter.endElement();
+-
+- xmlWriter.endElement();
++ sc.xmlWriter.startElement( "draw:text-box" );
++ m_textobj->saveOasisContent( sc.xmlWriter, sc.context );
++ sc.xmlWriter.endElement();
+ return true;
+ }
+
++const char * KPTextObject::getOasisElementName() const
++{
++ return "draw:frame";
++}
++
+ void KPTextObject::saveOasisMarginElement( KoGenStyle &styleobjectauto ) const
+ {
+ kdDebug()<<"void KPTextObject::saveOasisMarginElement( KoGenStyle &styleobjectauto )\n";
+@@ -673,6 +670,12 @@
+ return element;
+ }
+
++void KPTextObject::fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const
++{
++ KP2DObject::fillStyle( styleObjectAuto, mainStyles );
++ saveOasisMarginElement( styleObjectAuto );
++}
++
+ void KPTextObject::loadKTextObject( const QDomElement &elem )
+ {
+ QDomElement e = elem.firstChild().toElement();
+Index: kpresenter/kplineobject.cc
+===================================================================
+--- kpresenter/kplineobject.cc (revision 427945)
++++ kpresenter/kplineobject.cc (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -64,21 +65,23 @@
+ }
+
+
+-QString KPLineObject::saveOasisStrokeElement( KoGenStyles& mainStyles ) const
++void KPLineObject::fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const
+ {
+- KoGenStyle styleobjectauto( KoGenStyle::STYLE_GRAPHICAUTO, "graphic" );
+- saveOasisMarkerElement( mainStyles, styleobjectauto );
+- KPShadowObject::saveOasisStrokeElement( mainStyles, styleobjectauto );
+- saveOasisShadowElement( styleobjectauto );
+- saveOasisObjectProtectStyle( styleobjectauto );
+- return mainStyles.lookup( styleobjectauto, "gr" );
++ KPShadowObject::fillStyle( styleObjectAuto, mainStyles );
++ saveOasisMarkerElement( mainStyles, styleObjectAuto );
+ }
+
+-bool KPLineObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++
++bool KPLineObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- xmlWriter.startElement( "draw:line" );
+- xmlWriter.addAttribute( "draw:style-name", saveOasisStrokeElement( context.mainStyles() ) );
++ // nothing to do
++ return true;
++}
+
++void KPLineObject::saveOasisPosObject( KoXmlWriter &xmlWriter, int indexObj ) const
++{
++ xmlWriter.addAttribute( "draw:id", "object" + QString::number( indexObj ) );
++
+ float x1 = orig.x();
+ float y1 = orig.y();
+ float x2 = x1 + ext.width();
+@@ -102,17 +105,24 @@
+ break;
+ }
+
++ //save all into pt
++ xmlWriter.addAttributePt( "svg:x1", x1 );
+ xmlWriter.addAttributePt( "svg:y1", y1 );
++ xmlWriter.addAttributePt( "svg:x2", x2 );
+ xmlWriter.addAttributePt( "svg:y2", y2 );
+- xmlWriter.addAttributePt( "svg:x1", x1 );
+- xmlWriter.addAttributePt( "svg:x2", x2 );
+
+- if( !objectName.isEmpty())
+- xmlWriter.addAttribute( "draw:name", objectName );
+- xmlWriter.endElement();
+- return true;
++ if ( kAbs( angle ) > 1E-6 )
++ {
++ double value = -1 * ( ( double )angle* M_PI )/180.0;
++ QString str=QString( "rotate (%1)" ).arg( value );
++ xmlWriter.addAttribute( "draw:transform", str );
++ }
+ }
+
++const char * KPLineObject::getOasisElementName() const
++{
++ return "draw:line";
++}
+
+ QDomDocumentFragment KPLineObject::save( QDomDocument& doc, double offset )
+ {
+@@ -163,10 +173,10 @@
+
+ kdDebug()<<"KPLineObject::loadOasis(const QDomElement &element) : real position x :"<<orig.x()<<" y "<<orig.y()<< " width :"<<ext.width()<<" height :"<<ext.height()<<endl;
+
+- QString attr = (x1 < x2) ? "marker-start" : "marker-end";
++ QString attr = (x1 <= x2) ? "marker-start" : "marker-end";
+ loadOasisMarkerElement( context, attr, lineBegin );
+
+- attr = (x1 < x2) ? "marker-end" : "marker-start";
++ attr = (x1 <= x2) ? "marker-end" : "marker-start";
+ loadOasisMarkerElement( context, attr, lineEnd );
+ }
+
+Index: kpresenter/kppolylineobject.cc
+===================================================================
+--- kpresenter/kppolylineobject.cc (revision 427945)
++++ kpresenter/kppolylineobject.cc (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 2001 Toshitaka Fujioka <fujioka@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -29,6 +30,7 @@
+ #include <kdebug.h>
+ #include <kozoomhandler.h>
+ #include <kooasiscontext.h>
++#include <koUnit.h>
+
+ #include <math.h>
+ using namespace std;
+@@ -68,22 +70,22 @@
+ return KPPointObject::load( element );
+ }
+
+-bool KPPolylineObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPPolylineObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- xmlWriter.startElement( "draw:polyline" );
+- saveOasisPosObject(xmlWriter, indexObj );
+- xmlWriter.addAttribute( "draw:style-name", saveOasisStrokeElement( context.mainStyles() ) );
+-
+- KPPointObject::saveOasis( xmlWriter, context );
+- if( !objectName.isEmpty())
+- xmlWriter.addAttribute( "draw:name", objectName );
+- xmlWriter.endElement();
++ KPShadowObject::saveOasisDrawPoints( points, sc );
+ return true;
+ }
+
++const char * KPPolylineObject::getOasisElementName() const
++{
++ return "draw:polyline";
++}
+
++
+ void KPPolylineObject::loadOasis(const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info)
+ {
+ kdDebug()<<"void KPPolylineObject::loadOasis(const QDomElement &element)************\n";
+- KPPointObject::loadOasis( element,context, info );
++ KPShadowObject::loadOasis( element, context, info );
++ KPShadowObject::loadOasisDrawPoints( points, element, context, info );
++ loadOasisMarker( context );
+ }
+Index: kpresenter/kpquadricbeziercurveobject.cc
+===================================================================
+--- kpresenter/kpquadricbeziercurveobject.cc (revision 427945)
++++ kpresenter/kpquadricbeziercurveobject.cc (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 2001 Toshitaka Fujioka <fujioka@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -60,16 +61,18 @@
+ return *this;
+ }
+
+-bool KPQuadricBezierCurveObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPQuadricBezierCurveObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- kdDebug()<<"bool KPQuadricBezierCurveObject::saveOasis( KoXmlWriter &xmlWriter ) not implemented\n";
+- //todo
+- // call saveOasisShadowElement( styleobjectauto );
+- // call saveOasisStrokeElement( KoGenStyle &styleobjectauto );
+- //call xmlWriter.addAttribute( "draw:style-name", style );
++ kdDebug()<<"bool KPQuadricBezierCurveObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) not implemented\n";
+ return true;
+ }
+
++const char * KPQuadricBezierCurveObject::getOasisElementName() const
++{
++ // use draw:path ?
++ return "draw:custom-shape";
++}
++
+ void KPQuadricBezierCurveObject::loadOasis( const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info )
+ {
+ //todo
+Index: kspread/dialogs/kspread_dlg_database.cc
+===================================================================
+--- kspread/dialogs/kspread_dlg_database.cc (revision 427945)
++++ kspread/dialogs/kspread_dlg_database.cc (working copy)
+@@ -600,8 +600,8 @@
+ // An update command must also be followed by a space, or it would be parsed
+ // as an identifier.
+ // For sanity, also check that there is a SELECT
+- QRegExp couldModifyDB( "(^|[( \s])(UPDATE|DELETE|INSERT|CREATE) ", false /* cs */ );
+- QRegExp couldQueryDB( "(^|[( \s])(SELECT) ", false /* cs */ );
++ QRegExp couldModifyDB( "(^|[( \\s])(UPDATE|DELETE|INSERT|CREATE) ", false /* cs */ );
++ QRegExp couldQueryDB( "(^|[( \\s])(SELECT) ", false /* cs */ );
+
+ if (couldModifyDB.search( queryStr ) != -1 || couldQueryDB.search ( queryStr ) == -1 )
+ {
+Index: kspread/CHANGES
+===================================================================
+--- kspread/CHANGES (revision 427945)
++++ kspread/CHANGES (working copy)
+@@ -1,5 +1,9 @@
++since 1.4.0
++===========
++- Fix potential crash when rendering obscured cells (#108659)
++
+ since 1.4-beta1
+-=============================
++===============
+ - Use General/Blank Worksheet as default template.
+ - KSpread crashes on exit if there is a chart in the sheet (#101915).
+ - The data editor is disabled for charts which has been loaded.
+Index: kspread/kspreadpart.desktop
+===================================================================
+--- kspread/kspreadpart.desktop (revision 427945)
++++ kspread/kspreadpart.desktop (working copy)
+@@ -19,6 +19,7 @@
+ Name[pt]=Componente de Folha de Cálculo do KOffice
+ Name[pt_BR]=Componente de Planilha de Cálculo do KOffice
+ Name[ru]=Компонент электронных таблиц KOffice
++Name[sl]=Komponenta za preglednice za KOffice
+ Name[sr]=KOffice-ова компонента за унакрсне табеле
+ Name[sr@Latn]=KOffice-ova komponenta za unakrsne tabele
+ Name[sv]=Koffice-kalkylarkskomponent
+Index: kspread/kspread_cell.cc
+===================================================================
+--- kspread/kspread_cell.cc (revision 427945)
++++ kspread/kspread_cell.cc (working copy)
+@@ -825,7 +825,12 @@
+ if (!d->hasExtra())
+ return (KSpreadCell *) this;
+
+- return d->extra()->obscuringCells.first();
++ else if (d->extra()->obscuringCells.isEmpty())
++ return (KSpreadCell *) this;
++
++ else
++ return d->extra()->obscuringCells.first();
++
+ #if 0
+ QValueList<KSpreadCell*>::const_iterator it = d->extra()->obscuringCells.begin();
+ QValueList<KSpreadCell*>::const_iterator end = d->extra()->obscuringCells.end();
+@@ -2489,6 +2494,7 @@
+ // If the cell towards the top is part of a merged cell, get
+ // the pointer to the master cell.
+ cellUp = cellUp->ultimateObscuringCell();
++
+ topPen = cellUp->effBottomBorderPen( cellUp->column(),
+ cellUp->row() );
+
+Index: templates/SpreadSheet.desktop
+===================================================================
+--- templates/SpreadSheet.desktop (revision 427945)
++++ templates/SpreadSheet.desktop (working copy)
+@@ -23,7 +23,7 @@
+ Name[pl]=Arkusz kalkulacyjny...
+ Name[pt]=Documento de Folha de Cálculo...
+ Name[pt_BR]=Planilha de Cálculo...
+-Name[ru]=Электронная таблица...
++Name[ru]=Электронную таблицу...
+ Name[se]=Rehkenastinárka ...
+ Name[sl]=Preglednični dokument ...
+ Name[sr]=Документ са прорачунским листовима...
+@@ -54,6 +54,7 @@
+ Comment[fa]=KSpread سند جدید:
+ Comment[fi]=Uusi KSpread-asiakirja:
+ Comment[fr]=Nouveau document KSpread :
++Comment[ga]=Cáipéis nua KSpread:
+ Comment[he]=מסמך חדש של KSpread
+ Comment[hr]=Novi KSpread dokument:
+ Comment[hu]=Új KSpread-dokumentum:
+@@ -67,7 +68,7 @@
+ Comment[pl]=Nowy arkusz KSpread:
+ Comment[pt]=Novo documento do KSpread:
+ Comment[pt_BR]=Novo documento KSpread:
+-Comment[ru]=Новый документ KSpread:
++Comment[ru]=Новая электронная таблица KSpread:
+ Comment[se]=Ođđa KSpread-dokumeanta:
+ Comment[sk]=Nový dokument KSpread:
+ Comment[sl]=Nov dokument za KSpread
+Index: templates/Illustration.desktop
+===================================================================
+--- templates/Illustration.desktop (revision 427945)
++++ templates/Illustration.desktop (working copy)
+@@ -22,7 +22,7 @@
+ Name[pl]=Rysunek...
+ Name[pt]=Documento de Ilustração....
+ Name[pt_BR]=Documento de Ilustração...
+-Name[ru]=Иллюстрированный документ...
++Name[ru]=Векторный рисунок...
+ Name[se]=Illustrašuvdna ...
+ Name[sl]=Ilustracijski dokument ...
+ Name[sr]=Илустрациони документ...
+@@ -49,6 +49,7 @@
+ Comment[fa]=Karbon14 سند جدید:
+ Comment[fi]=Uusi Karbon14-asiakirja:
+ Comment[fr]=Nouveau document Karbon14 :
++Comment[ga]=Cáipéis nua Karbon14:
+ Comment[he]=מסמך Karbon14 חדש
+ Comment[hr]=Novi Karbon14 dokument:
+ Comment[hu]=Új Karbon14-dokumentum:
+@@ -59,7 +60,7 @@
+ Comment[pl]=Nowy dokument Karbon14:
+ Comment[pt]=Novo documento do Karbon14:
+ Comment[pt_BR]=Novo documento do Karbon14
+-Comment[ru]=Новый документ Karbon14:
++Comment[ru]=Новый рисунок Karbon14:
+ Comment[se]=Ođđa Karbon14-dokumeanta:
+ Comment[sk]=Nový dokument Karbon14:
+ Comment[sl]=Nov dokument za Karbon14
+Index: templates/Presentation.desktop
+===================================================================
+--- templates/Presentation.desktop (revision 427945)
++++ templates/Presentation.desktop (working copy)
+@@ -23,7 +23,7 @@
+ Name[pl]=Prezentacja...
+ Name[pt]=Documento de Apresentação...
+ Name[pt_BR]=Apresentação de Slides...
+-Name[ru]=Презентация...
++Name[ru]=Презентацию...
+ Name[se]=Presentašuvdna ...
+ Name[sl]=Predstavitveni dokument ...
+ Name[sr]=Презентациони документ...
+@@ -67,7 +67,7 @@
+ Comment[pl]=Nowa prezentacja KPresenter:
+ Comment[pt]=Novo documento do KPresenter:
+ Comment[pt_BR]=Novo documento de apresentação KPresenter:
+-Comment[ru]=Новый документ KPresenter:
++Comment[ru]=Новая презентация KPresenter:
+ Comment[se]=Ođđa KPresenter-presentašuvdna:
+ Comment[sk]=Nový dokument KPresenter:
+ Comment[sl]=Nov predstavitveni dokument za KPresenter
+Index: templates/TextDocument.desktop
+===================================================================
+--- templates/TextDocument.desktop (revision 427945)
++++ templates/TextDocument.desktop (working copy)
+@@ -13,6 +13,7 @@
+ Name[et]=Tekstidokument...
+ Name[fi]=Tekstiasiakirja...
+ Name[fr]=Document texte...
++Name[ga]=Cáipéis Téacs...
+ Name[he]=מסמך טקסט...
+ Name[hr]=Tekst datoteka...
+ Name[hu]=KWord-dokumentum...
+@@ -24,7 +25,7 @@
+ Name[pl]=Dokument tekstowy...
+ Name[pt]=Documento de Texto...
+ Name[pt_BR]=Documento de Texto...
+-Name[ru]=Текстовый документ...
++Name[ru]=Документ...
+ Name[se]=Teakstadokumeanta ...
+ Name[sl]=Besedilni dokument ...
+ Name[sr]=Текстуални документ...
+@@ -55,6 +56,7 @@
+ Comment[fa]=KWord سند جدید برای:
+ Comment[fi]=Uusi KWord-asiakirja:
+ Comment[fr]=Nouveau document KWord :
++Comment[ga]=Cáipéis nua KWord:
+ Comment[he]=מסמך חדש של KWord
+ Comment[hr]=Novi KWord dokument
+ Comment[hu]=Új KWord-dokumentum:
+Index: karbon/tools/vroundrecttool.h
+===================================================================
+--- karbon/tools/vroundrecttool.h (revision 427945)
++++ karbon/tools/vroundrecttool.h (working copy)
+@@ -29,7 +29,7 @@
+
+ class KarbonPart;
+ class QLabel;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+
+
+ class VRoundRectTool : public VShapeTool
+Index: karbon/tools/vpolygontool.cc
+===================================================================
+--- karbon/tools/vpolygontool.cc (revision 427945)
++++ karbon/tools/vpolygontool.cc (working copy)
+@@ -37,6 +37,7 @@
+
+ new QLabel( i18n( "Radius:" ), group );
+ m_radius = new KDoubleSpinBox(0.0, 1000.0, 0.5, 5.0,2, group );
++ //m_radius = new KoBuggyUnitDoubleSpinBox( group, 0.0, 1000.0, 0.5, 50.0, KoUnit::U_MM );
+ refreshUnit();
+ new QLabel( i18n( "Edges:" ), group );
+ m_edges = new KIntSpinBox( group );
+Index: karbon/tools/vpolygontool.h
+===================================================================
+--- karbon/tools/vpolygontool.h (revision 427945)
++++ karbon/tools/vpolygontool.h (working copy)
+@@ -58,7 +58,9 @@
+ void refreshUnit();
+
+ private:
++ // FIXME: This should be a KoUnitDoubleSpinBox!
+ KDoubleSpinBox *m_radius;
++
+ KIntSpinBox *m_edges;
+ KarbonPart *m_part;
+ };
+Index: karbon/tools/vspiraltool.h
+===================================================================
+--- karbon/tools/vspiraltool.h (revision 427945)
++++ karbon/tools/vspiraltool.h (working copy)
+@@ -67,7 +67,9 @@
+ void refreshUnit();
+
+ private:
++ // FIXME: This should be a KoUnitDoubleSpinBox!
+ KDoubleSpinBox *m_radius;
++
+ KIntSpinBox *m_segments;
+ KDoubleNumInput *m_fade;
+ KComboBox *m_type;
+Index: karbon/tools/vellipsetool.cc
+===================================================================
+--- karbon/tools/vellipsetool.cc (revision 427945)
++++ karbon/tools/vellipsetool.cc (working copy)
+@@ -49,8 +49,10 @@
+ // add width/height-input:
+ new QLabel( i18n( "Width:" ), group );
+ m_width = new KDoubleSpinBox( 0.0, 1000.0, 0.5, 10.0, 2, group );
++ //m_width = new KoBuggyUnitDoubleSpinBox( group, 0.0, 1000.0, 0.5, 100.0, KoUnit::U_MM );
+ new QLabel( i18n( "Height:" ), group );
+ m_height = new KDoubleSpinBox( 0.0, 1000.0, 0.5, 10.0, 2, group );
++ //m_height = new KoBuggyUnitDoubleSpinBox( group, 0.0, 1000.0, 0.5, 100.0, KoUnit::U_MM );
+
+ new QLabel( i18n( "Start angle:" ), group );
+ m_startAngle = new KIntSpinBox( group );
+Index: karbon/tools/vellipsetool.h
+===================================================================
+--- karbon/tools/vellipsetool.h (revision 427945)
++++ karbon/tools/vellipsetool.h (working copy)
+@@ -25,8 +25,7 @@
+
+ #include "vshapetool.h"
+
+-class KoUnitDoubleSpinBox;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+ class KComboBox;
+ class KIntSpinBox;
+ class KarbonPart;
+@@ -55,8 +54,11 @@
+ KComboBox *m_type;
+ KIntSpinBox *m_startAngle;
+ KIntSpinBox *m_endAngle;
++
++ // FIXME: These should be KoUnitDoubleSpinBoxes!
+ KDoubleSpinBox *m_width;
+ KDoubleSpinBox *m_height;
++
+ KarbonPart *m_part;
+ };
+
+Index: karbon/tools/vsinustool.cc
+===================================================================
+--- karbon/tools/vsinustool.cc (revision 427945)
++++ karbon/tools/vsinustool.cc (working copy)
+@@ -40,8 +40,10 @@
+ // add width/height-input:
+ new QLabel( i18n( "Width:" ), group );
+ m_width = new KDoubleSpinBox( 0.0, 1000.0, 0.5, 10.0, 2, group );
++ //m_width = new KoBuggyUnitDoubleSpinBox( group, 0.0, 1000.0, 0.5, 100.0, KoUnit::U_MM );
+ new QLabel( i18n( "Height:" ), group );
+ m_height = new KDoubleSpinBox( 0.0, 1000.0, 0.5, 10.0, 2, group );
++ //m_height = new KoBuggyUnitDoubleSpinBox( group, 0.0, 1000.0, 0.5, 100.0, KoUnit::U_MM );
+
+ refreshUnit();
+
+Index: karbon/tools/vsinustool.h
+===================================================================
+--- karbon/tools/vsinustool.h (revision 427945)
++++ karbon/tools/vsinustool.h (working copy)
+@@ -24,7 +24,7 @@
+ #include <knuminput.h>
+ #include "vshapetool.h"
+
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+ class KIntSpinBox;
+ class KarbonPart;
+ class QLabel;
+@@ -58,8 +58,10 @@
+ void refreshUnit();
+
+ private:
++ // FIXME: These should be KoUnitDoubleSpinBoxes!
+ KDoubleSpinBox *m_width;
+ KDoubleSpinBox *m_height;
++
+ KIntSpinBox *m_periods;
+ KarbonPart *m_part;
+ };
+Index: karbon/tools/vrectangletool.cc
+===================================================================
+--- karbon/tools/vrectangletool.cc (revision 427945)
++++ karbon/tools/vrectangletool.cc (working copy)
+@@ -37,10 +37,11 @@
+ // add width/height-input:
+ new QLabel( i18n( "Width:" ), group );
+ m_width = new KDoubleSpinBox( 0.0, 1000.0, 0.5, 10.0, 2, group );
++ //m_width = new KoBuggyUnitDoubleSpinBox( group, 0.0, 1000.0, 0.5, 100.0, KoUnit::U_MM );
+
+ new QLabel( i18n( "Height:" ), group );
+ m_height = new KDoubleSpinBox( 0.0, 1000.0, 0.5, 10.0, 2, group );
+-
++ //m_height = new KoBuggyUnitDoubleSpinBox( group, 0.0, 1000.0, 0.5, 100.0, KoUnit::U_MM );
+ refreshUnit();
+
+ group->setInsideMargin( 4 );
+Index: karbon/tools/vstartool.cc
+===================================================================
+--- karbon/tools/vstartool.cc (revision 427945)
++++ karbon/tools/vstartool.cc (working copy)
+@@ -49,10 +49,12 @@
+ // add width/height-input:
+ new QLabel( i18n( "Outer radius:" ), group );
+ m_outerR = new KDoubleSpinBox( 0.0, 1000.0, 0.5, 5.0, 2, group );
++ //m_outerR = new KoBuggyUnitDoubleSpinBox( group, 0.0, 1000.0, 0.5, 50.0, KoUnit::U_MM );
+ connect( m_outerR, SIGNAL( valueChanged( double ) ), this, SLOT( setOuterRadius( double ) ) );
+
+ new QLabel( i18n( "Inner radius:" ), group );
+ m_innerR = new KDoubleSpinBox( 0.0, 1000.0, 0.5, 5.0, 2, group );
++ //m_innerR = new KoBuggyUnitDoubleSpinBox( group, 0.0, 1000.0, 0.5, 25.0, KoUnit::U_MM );
+
+ refreshUnit();
+
+Index: karbon/tools/vstartool.h
+===================================================================
+--- karbon/tools/vstartool.h (revision 427945)
++++ karbon/tools/vstartool.h (working copy)
+@@ -54,8 +54,10 @@
+ void setOuterRadius( double );
+
+ private:
++ // FIXME: These should be KoUnitDoubleSpinBoxes!
+ KDoubleSpinBox *m_innerR;
+ KDoubleSpinBox *m_outerR;
++
+ KDoubleNumInput *m_roundness;
+ KIntSpinBox *m_edges;
+ KIntSpinBox *m_innerAngle;
+Index: karbon/tools/vspiraltool.cc
+===================================================================
+--- karbon/tools/vspiraltool.cc (revision 427945)
++++ karbon/tools/vspiraltool.cc (working copy)
+@@ -43,6 +43,7 @@
+
+ new QLabel( i18n( "Radius:" ), group );
+ m_radius = new KDoubleSpinBox( 0.0, 1000.0, 0.5, 5.0, 2, group );
++ //m_radius = new KoBuggyUnitDoubleSpinBox( group, 0.0, 1000.0, 0.5, 50.0, KoUnit::U_MM );
+ refreshUnit();
+ new QLabel( i18n( "Segments:" ), group );
+ m_segments = new KIntSpinBox( group );
+Index: karbon/tools/vrectangletool.h
+===================================================================
+--- karbon/tools/vrectangletool.h (revision 427945)
++++ karbon/tools/vrectangletool.h (working copy)
+@@ -29,7 +29,7 @@
+
+ class KarbonPart;
+ class QLabel;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+
+ class VRectangleTool : public VShapeTool
+ {
+@@ -59,8 +59,10 @@
+ void refreshUnit();
+
+ private:
++ // FIXME: These should be KoUnitDoubleSpinBoxes!
+ KDoubleSpinBox *m_width;
+ KDoubleSpinBox *m_height;
++
+ KarbonPart *m_part;
+ };
+
+Index: karbon/dialogs/vconfiguredlg.cc
+===================================================================
+--- karbon/dialogs/vconfiguredlg.cc (revision 427945)
++++ karbon/dialogs/vconfiguredlg.cc (working copy)
+@@ -317,17 +317,17 @@
+ gridColorLbl->setBuddy( m_gridColorBtn );
+ QGroupBox* spacingGrp = new QGroupBox( 2, Qt::Horizontal, i18n( "Spacing" ), page );
+ QLabel* spaceHorizLbl = new QLabel( i18n( "&Horizontal:" ), spacingGrp );
+- m_spaceHorizUSpin = new KoUnitDoubleSpinBox( spacingGrp, 0.0, pgw, 0.1, fw, unit );
++ m_spaceHorizUSpin = new KoBuggyUnitDoubleSpinBox( spacingGrp, 0.0, pgw, 0.1, fw, unit );
+ spaceHorizLbl->setBuddy( m_spaceHorizUSpin );
+ QLabel* spaceVertLbl = new QLabel( i18n( "&Vertical:" ), spacingGrp );
+- m_spaceVertUSpin = new KoUnitDoubleSpinBox( spacingGrp, 0.0, pgh, 0.1, fh, unit );
++ m_spaceVertUSpin = new KoBuggyUnitDoubleSpinBox( spacingGrp, 0.0, pgh, 0.1, fh, unit );
+ spaceVertLbl->setBuddy( m_spaceVertUSpin );
+ QGroupBox* snapGrp = new QGroupBox( 2, Qt::Horizontal, i18n( "Snap Distance" ), page );
+ QLabel* snapHorizLbl = new QLabel( i18n( "H&orizontal:" ), snapGrp );
+- m_snapHorizUSpin = new KoUnitDoubleSpinBox( snapGrp, 0.0, fw, 0.1, sw, unit );
++ m_snapHorizUSpin = new KoBuggyUnitDoubleSpinBox( snapGrp, 0.0, fw, 0.1, sw, unit );
+ snapHorizLbl->setBuddy( m_snapHorizUSpin );
+ QLabel* snapVertLbl = new QLabel( i18n( "V&ertical:" ), snapGrp );
+- m_snapVertUSpin = new KoUnitDoubleSpinBox( snapGrp, 0.0, fh, 0.1, sh, unit );
++ m_snapVertUSpin = new KoBuggyUnitDoubleSpinBox( snapGrp, 0.0, fh, 0.1, sh, unit );
+ snapVertLbl->setBuddy( m_snapVertUSpin );
+
+ QGridLayout* gl = new QGridLayout();
+Index: karbon/dialogs/vconfiguredlg.h
+===================================================================
+--- karbon/dialogs/vconfiguredlg.h (revision 427945)
++++ karbon/dialogs/vconfiguredlg.h (working copy)
+@@ -27,7 +27,7 @@
+ class KConfig;
+ class KIntNumInput;
+ class KColorButton;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+ class QCheckBox;
+ class QComboBox;
+
+@@ -129,10 +129,10 @@
+
+ private:
+ KarbonView* m_view;
+- KoUnitDoubleSpinBox* m_spaceHorizUSpin;
+- KoUnitDoubleSpinBox* m_spaceVertUSpin;
+- KoUnitDoubleSpinBox* m_snapHorizUSpin;
+- KoUnitDoubleSpinBox* m_snapVertUSpin;
++ KoBuggyUnitDoubleSpinBox* m_spaceHorizUSpin;
++ KoBuggyUnitDoubleSpinBox* m_spaceVertUSpin;
++ KoBuggyUnitDoubleSpinBox* m_snapHorizUSpin;
++ KoBuggyUnitDoubleSpinBox* m_snapVertUSpin;
+ QCheckBox* m_gridChBox;
+ QCheckBox* m_snapChBox;
+ KColorButton* m_gridColorBtn;
+Index: karbon/dialogs/vstrokedlg.cc
+===================================================================
+--- karbon/dialogs/vstrokedlg.cc (revision 427945)
++++ karbon/dialogs/vstrokedlg.cc (working copy)
+@@ -50,7 +50,7 @@
+
+ QLabel* widthLabel = new QLabel( i18n ( "Width:" ), mainWidget );
+ leftLayout->addWidget ( widthLabel );
+- m_setLineWidth = new KoUnitDoubleSpinBox( mainWidget, 0.0, 1000.0, 0.5, 1.0, KoUnit::U_PT, 1 );
++ m_setLineWidth = new KoBuggyUnitDoubleSpinBox( mainWidget, 0.0, 1000.0, 0.5, 1.0, KoUnit::U_PT, 1 );
+ leftLayout->addWidget ( m_setLineWidth );
+
+ //Dashing ->
+Index: karbon/dialogs/vstrokedlg.h
+===================================================================
+--- karbon/dialogs/vstrokedlg.h (revision 427945)
++++ karbon/dialogs/vstrokedlg.h (working copy)
+@@ -27,7 +27,7 @@
+ class QVButtonGroup;
+
+ class KarbonPart;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+ class VStroke;
+ class VColorTab;
+
+@@ -41,7 +41,7 @@
+ private:
+ VColorTab* m_colortab;
+ KarbonPart *m_part;
+- KoUnitDoubleSpinBox *m_setLineWidth;
++ KoBuggyUnitDoubleSpinBox *m_setLineWidth;
+ QComboBox *m_styleCombo;
+ QVButtonGroup *m_typeOption;
+ QVButtonGroup *m_capOption;
+Index: karbon/dockers/vtransformdocker.h
+===================================================================
+--- karbon/dockers/vtransformdocker.h (revision 427945)
++++ karbon/dockers/vtransformdocker.h (working copy)
+@@ -25,7 +25,7 @@
+
+ class KarbonPart;
+ class KarbonView;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+
+ class VTransformDocker : public VDocker
+ {
+@@ -43,10 +43,10 @@
+ private:
+ KarbonPart *m_part;
+ KarbonView *m_view;
+- KoUnitDoubleSpinBox *m_x;
+- KoUnitDoubleSpinBox *m_y;
+- KoUnitDoubleSpinBox *m_width;
+- KoUnitDoubleSpinBox *m_height;
++ KoBuggyUnitDoubleSpinBox *m_x;
++ KoBuggyUnitDoubleSpinBox *m_y;
++ KoBuggyUnitDoubleSpinBox *m_width;
++ KoBuggyUnitDoubleSpinBox *m_height;
+ QWidget *mainWidget;
+ };
+
+Index: karbon/dockers/vstrokedocker.cc
+===================================================================
+--- karbon/dockers/vstrokedocker.cc (revision 427945)
++++ karbon/dockers/vstrokedocker.cc (working copy)
+@@ -50,7 +50,7 @@
+
+ QLabel* widthLabel = new QLabel( i18n ( "Width:" ), mainWidget );
+ mainLayout->addWidget( widthLabel, 0, 0 );
+- m_setLineWidth = new KoUnitDoubleSpinBox( mainWidget, 0.0, 1000.0, 0.5, 1.0, KoUnit::U_PT, 1 );
++ m_setLineWidth = new KoBuggyUnitDoubleSpinBox( mainWidget, 0.0, 1000.0, 0.5, 1.0, KoUnit::U_PT, 1 );
+ mainLayout->addWidget ( m_setLineWidth, 0, 1 );
+ connect( m_setLineWidth, SIGNAL( valueChanged( double ) ), this, SLOT( widthChanged() ) );
+
+Index: karbon/dockers/vstrokedocker.h
+===================================================================
+--- karbon/dockers/vstrokedocker.h (revision 427945)
++++ karbon/dockers/vstrokedocker.h (working copy)
+@@ -26,7 +26,7 @@
+ class QHButtonGroup;
+ class QWidget;
+
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+
+ class KoMainWindow;
+ class KarbonView;
+@@ -48,7 +48,7 @@
+ QWidget *mainWidget;
+ KarbonPart *m_part;
+ KarbonView *m_view;
+- KoUnitDoubleSpinBox *m_setLineWidth;
++ KoBuggyUnitDoubleSpinBox *m_setLineWidth;
+
+ private slots:
+ void slotCapChanged( int ID );
+Index: karbon/dockers/vtransformdocker.cc
+===================================================================
+--- karbon/dockers/vtransformdocker.cc (revision 427945)
++++ karbon/dockers/vtransformdocker.cc (working copy)
+@@ -48,25 +48,25 @@
+ //X: (TODO: Set 5000 limit to real Karbon14 limit)
+ QLabel* xLabel = new QLabel( i18n ( "X:" ), mainWidget );
+ mainLayout->addWidget( xLabel, 1, 0 );
+- m_x = new KoUnitDoubleSpinBox( mainWidget, -5000.0, 5000.0, 1.0, 10.0, m_part->unit(), 1 );
++ m_x = new KoBuggyUnitDoubleSpinBox( mainWidget, -5000.0, 5000.0, 1.0, 10.0, m_part->unit(), 1 );
+ mainLayout->addWidget( m_x, 1, 1 );
+
+ //Y: (TODO: Set 5000 limit to real Karbon14 limit)
+ QLabel* yLabel = new QLabel( i18n ( "Y:" ), mainWidget );
+ mainLayout->addWidget( yLabel, 2, 0 );
+- m_y = new KoUnitDoubleSpinBox( mainWidget, -5000.0, 5000.0, 1.0, 10.0, m_part->unit(), 1 );
++ m_y = new KoBuggyUnitDoubleSpinBox( mainWidget, -5000.0, 5000.0, 1.0, 10.0, m_part->unit(), 1 );
+ mainLayout->addWidget( m_y, 2, 1 );
+
+ //Width: (TODO: Set 5000 limit to real Karbon14 limit)
+ QLabel* wLabel = new QLabel( i18n ( "W:" ), mainWidget );
+ mainLayout->addWidget( wLabel, 1, 2 );
+- m_width = new KoUnitDoubleSpinBox( mainWidget, 0.0, 5000.0, 1.0, 10.0, m_part->unit(), 1 );
++ m_width = new KoBuggyUnitDoubleSpinBox( mainWidget, 0.0, 5000.0, 1.0, 10.0, m_part->unit(), 1 );
+ mainLayout->addWidget( m_width, 1, 3 );
+
+ //Height: (TODO: Set 5000 limit to real Karbon14 limit)
+ QLabel* hLabel = new QLabel( i18n ( "H:" ), mainWidget );
+ mainLayout->addWidget( hLabel, 2, 2 );
+- m_height = new KoUnitDoubleSpinBox( mainWidget, 0.0, 5000.0, 1.0, 10.0, m_part->unit(), 1 );
++ m_height = new KoBuggyUnitDoubleSpinBox( mainWidget, 0.0, 5000.0, 1.0, 10.0, m_part->unit(), 1 );
+ mainLayout->addWidget( m_height, 2, 3 );
+
+ //TODO: Add Rotation, Shear
+Index: karbon/widgets/vselecttoolbar.cc
+===================================================================
+--- karbon/widgets/vselecttoolbar.cc (revision 427945)
++++ karbon/widgets/vselecttoolbar.cc (working copy)
+@@ -38,24 +38,24 @@
+ setCaption( i18n( "Object Properties" ) );
+ QLabel *x_label = new QLabel( i18n( "X:" ), this, "kde toolbar widget" );
+ insertWidget( 0, x_label->width(), x_label );
+- m_x = new KoUnitDoubleSpinBox( this, 0.0, 1000.0, 0.5 );
++ m_x = new KoBuggyUnitDoubleSpinBox( this, 0.0, 1000.0, 0.5 );
+ connect( m_x, SIGNAL( valueChanged( double ) ), this, SLOT( slotXChanged( double ) ) );
+ insertWidget( 1, m_x->width(), m_x );
+ QLabel *y_label = new QLabel( i18n( "Y:" ), this, "kde toolbar widget" );
+ insertWidget( 2, y_label->width(), y_label );
+- m_y = new KoUnitDoubleSpinBox( this, 0.0, 1000.0, 0.5 );
++ m_y = new KoBuggyUnitDoubleSpinBox( this, 0.0, 1000.0, 0.5 );
+ connect( m_y, SIGNAL( valueChanged( double ) ), this, SLOT( slotYChanged( double ) ) );
+ insertWidget( 3, m_y->width(), m_y );
+
+ insertSeparator( 4 );
+ QLabel *w_label = new QLabel( i18n( "Width:" ), this, "kde toolbar widget" );
+ insertWidget( 5, w_label->width(), w_label );
+- m_width = new KoUnitDoubleSpinBox( this, 0.0, 1000.0, 0.5 );
++ m_width = new KoBuggyUnitDoubleSpinBox( this, 0.0, 1000.0, 0.5 );
+ connect( m_width, SIGNAL( valueChanged( double ) ), this, SLOT( slotWidthChanged( double ) ) );
+ insertWidget( 6, m_width->width(), m_width );
+ QLabel *h_label = new QLabel( i18n( "Height:" ), this, "kde toolbar widget" );
+ insertWidget( 7, h_label->width(), h_label );
+- m_height = new KoUnitDoubleSpinBox( this, 0.0, 1000.0, 0.5 );
++ m_height = new KoBuggyUnitDoubleSpinBox( this, 0.0, 1000.0, 0.5 );
+ connect( m_height, SIGNAL( valueChanged( double ) ), this, SLOT( slotHeightChanged( double ) ) );
+ insertWidget( 8, m_height->width(), m_height );
+
+Index: karbon/widgets/vselecttoolbar.h
+===================================================================
+--- karbon/widgets/vselecttoolbar.h (revision 427945)
++++ karbon/widgets/vselecttoolbar.h (working copy)
+@@ -24,7 +24,7 @@
+
+ #include <ktoolbar.h>
+
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+ class KarbonView;
+
+ class VSelectToolBar : public KToolBar
+@@ -42,10 +42,10 @@
+ void slotHeightChanged( double );
+
+ private:
+- KoUnitDoubleSpinBox *m_x;
+- KoUnitDoubleSpinBox *m_y;
+- KoUnitDoubleSpinBox *m_width;
+- KoUnitDoubleSpinBox *m_height;
++ KoBuggyUnitDoubleSpinBox *m_x;
++ KoBuggyUnitDoubleSpinBox *m_y;
++ KoBuggyUnitDoubleSpinBox *m_width;
++ KoBuggyUnitDoubleSpinBox *m_height;
+ KarbonView *m_view;
+ };
+
diff --git a/editors/koffice-kde3/files/patch-filters-kspread-excel-sidewinder-excel.cpp b/editors/koffice-kde3/files/patch-filters-kspread-excel-sidewinder-excel.cpp
deleted file mode 100644
index 65e60fd83a86..000000000000
--- a/editors/koffice-kde3/files/patch-filters-kspread-excel-sidewinder-excel.cpp
+++ /dev/null
@@ -1,11 +0,0 @@
---- filters/kspread/excel/sidewinder/excel.cpp.orig Wed Jun 29 02:06:17 2005
-+++ filters/kspread/excel/sidewinder/excel.cpp Wed Jun 29 02:04:06 2005
-@@ -5412,7 +5412,7 @@
- case 10: valueFormat = "0.00%"; break;
- case 11: valueFormat = "0.00E+00"; break;
- case 12: valueFormat = "#?/?"; break;
-- case 13: valueFormat = "#\?\?\/\?\?"; break;
-+ case 13: valueFormat = "#\?\?/\?\?"; break;
- case 14: valueFormat = "M/D/YY"; break;
- case 15: valueFormat = "D-MMM-YY"; break;
- case 16: valueFormat = "D-MMM"; break;
diff --git a/editors/koffice-kde3/files/patch-krita-plugins-cimg-CImg.h b/editors/koffice-kde3/files/patch-krita-plugins-cimg-CImg.h
deleted file mode 100644
index 9c914acb3d05..000000000000
--- a/editors/koffice-kde3/files/patch-krita-plugins-cimg-CImg.h
+++ /dev/null
@@ -1,11 +0,0 @@
---- krita/plugins/cimg/CImg.h.orig Tue Jun 28 02:31:30 2005
-+++ krita/plugins/cimg/CImg.h Tue Jun 28 02:32:10 2005
-@@ -5135,7 +5135,7 @@
- if (ny1<0 || ny0>=dimy()) return *this;
- if (ny0<0) { nx0-=ny0*(nx1-nx0)/(ny1-ny0); ny0=0; }
- if (ny1>=dimy()) { nx1+=(ny1-dimy())*(nx0-nx1)/(ny1-ny0); ny1=dimy()-1;}
-- const unsigned int dmax = (unsigned int)cimg::max(std::abs(nx1-nx0),ny1-ny0), whz = width*height*depth;
-+ const unsigned int dmax = (unsigned int)cimg::max(std::abs((long int)(nx1-nx0)),(long int)(ny1-ny0)), whz = width*height*depth;
- const float px = dmax?(nx1-nx0)/(float)dmax:0, py = dmax?(ny1-ny0)/(float)dmax:0;
- float x = (float)nx0, y = (float)ny0;
- if (opacity>=1) for (unsigned int t=0; t<=dmax; t++) {
diff --git a/editors/koffice-kde3/files/patch-kspread-dialogs-kspread_dlg_database.cc b/editors/koffice-kde3/files/patch-kspread-dialogs-kspread_dlg_database.cc
deleted file mode 100644
index 0f733f0e891f..000000000000
--- a/editors/koffice-kde3/files/patch-kspread-dialogs-kspread_dlg_database.cc
+++ /dev/null
@@ -1,13 +0,0 @@
---- kspread/dialogs/kspread_dlg_database.cc.orig Tue Jun 28 03:42:22 2005
-+++ kspread/dialogs/kspread_dlg_database.cc Tue Jun 28 03:48:20 2005
-@@ -600,8 +600,8 @@
- // An update command must also be followed by a space, or it would be parsed
- // as an identifier.
- // For sanity, also check that there is a SELECT
-- QRegExp couldModifyDB( "(^|[( \s])(UPDATE|DELETE|INSERT|CREATE) ", false /* cs */ );
-- QRegExp couldQueryDB( "(^|[( \s])(SELECT) ", false /* cs */ );
-+ QRegExp couldModifyDB( "(^|[( \\s])(UPDATE|DELETE|INSERT|CREATE) ", false /* cs */ );
-+ QRegExp couldQueryDB( "(^|[( \\s])(SELECT) ", false /* cs */ );
-
- if (couldModifyDB.search( queryStr ) != -1 || couldQueryDB.search ( queryStr ) == -1 )
- {
diff --git a/editors/koffice-kde4/Makefile b/editors/koffice-kde4/Makefile
index 36889951226f..e85d413c5897 100644
--- a/editors/koffice-kde4/Makefile
+++ b/editors/koffice-kde4/Makefile
@@ -7,6 +7,7 @@
PORTNAME= koffice
PORTVERSION= 1.4.0a
+PORTREVISION= 1
PORTEPOCH= 1
CATEGORIES= editors kde
MASTER_SITES= ${MASTER_SITE_KDE}
diff --git a/editors/koffice-kde4/files/patch-1.4.0_patchset_1.diff b/editors/koffice-kde4/files/patch-1.4.0_patchset_1.diff
new file mode 100644
index 000000000000..bf61a1b9ba41
--- /dev/null
+++ b/editors/koffice-kde4/files/patch-1.4.0_patchset_1.diff
@@ -0,0 +1,5060 @@
+Index: kformula/kformulapart.desktop
+===================================================================
+--- kformula/kformulapart.desktop (revision 427945)
++++ kformula/kformulapart.desktop (working copy)
+@@ -19,6 +19,7 @@
+ Name[pt]=Componente de Fórmulas do KOffice
+ Name[pt_BR]=Componente de Fórmulas do KOffice
+ Name[ru]=Компонент формул KOffice
++Name[sl]=Komponenta za enačbe za KOffice
+ Name[sr]=KOffice-ова компонента за формуле
+ Name[sr@Latn]=KOffice-ova komponenta za formule
+ Name[sv]=Koffice-formelkomponent
+Index: servicetypes/koplugin.desktop
+===================================================================
+--- servicetypes/koplugin.desktop (revision 427945)
++++ servicetypes/koplugin.desktop (working copy)
+@@ -22,6 +22,7 @@
+ Comment[fi]=KOffice-laajennus
+ Comment[fo]=KSkrivstovu-ístingur
+ Comment[fr]=Module externe de KOffice
++Comment[ga]=Breiseán KOffice
+ Comment[he]=תוסף של KOffice
+ Comment[hr]=KOffice dodatak
+ Comment[hu]=KOffice-bővítőmodul
+Index: servicetypes/kofficepart.desktop
+===================================================================
+--- servicetypes/kofficepart.desktop (revision 427945)
++++ servicetypes/kofficepart.desktop (working copy)
+@@ -22,6 +22,7 @@
+ Comment[fa]=KOffice اجزای
+ Comment[fi]=KOffice-komponentti
+ Comment[fr]=Composant KOffice
++Comment[ga]=Comhpháirt KOffice
+ Comment[he]=רכיב של KOffice
+ Comment[hr]=KOffice komponenta
+ Comment[hu]=KOffice-komponens
+Index: servicetypes/kofilter.desktop
+===================================================================
+--- servicetypes/kofilter.desktop (revision 427945)
++++ servicetypes/kofilter.desktop (working copy)
+@@ -22,6 +22,7 @@
+ Comment[fi]=KOffice-suodin
+ Comment[fo]=KSkrivstovu-filtur
+ Comment[fr]=Filtre KOffice
++Comment[ga]=Scagaire KOffice
+ Comment[he]=מסנן של KOffice
+ Comment[hr]=KOffice filter
+ Comment[hu]=KOffice-szűrő
+Index: kword/kwordpart.desktop
+===================================================================
+--- kword/kwordpart.desktop (revision 427945)
++++ kword/kwordpart.desktop (working copy)
+@@ -20,6 +20,7 @@
+ Name[pt]=Componente de Processamento de Texto do KOffice
+ Name[pt_BR]=Componente de Processamento de Texto do KOffice
+ Name[ru]=Компонент текстового редактора KOffice
++Name[sl]=Komponenta za obdelovanje besedil za KOffice
+ Name[sr]=KOffice-ова компонента за обраду текста
+ Name[sr@Latn]=KOffice-ova komponenta za obradu teksta
+ Name[sv]=Koffice-ordbehandlingskomponent
+Index: kword/kwmailmerge.desktop
+===================================================================
+--- kword/kwmailmerge.desktop (revision 427945)
++++ kword/kwmailmerge.desktop (working copy)
+@@ -17,6 +17,7 @@
+ Comment[et]=KWordi kirjakoosteplugin
+ Comment[fi]=KWord-postituslaajennus
+ Comment[fr]=Module fusion de courrier pour KWord
++Comment[ga]=Breiseán postchumaisc KWord
+ Comment[he]=תוסף מיזוג דואר ל־KWord
+ Comment[hr]=KWord dodatak za mailmerge
+ Comment[hu]=KWord körlevél-bővítőmodul
+Index: kword/configfootnotedia.h
+===================================================================
+--- kword/configfootnotedia.h (revision 427945)
++++ kword/configfootnotedia.h (working copy)
+@@ -28,7 +28,7 @@
+ class QRadioButton;
+ class KIntNumInput;
+ class QComboBox;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+
+ class KWConfigFootNoteDia : public KDialogBase
+ {
+@@ -47,7 +47,7 @@
+ QRadioButton *rbPosCentered;
+ QRadioButton *rbPosRight;
+ KIntNumInput *spLength;
+- KoUnitDoubleSpinBox *spWidth;
++ KoBuggyUnitDoubleSpinBox *spWidth;
+ QComboBox *m_cbLineType;
+ protected slots:
+ virtual void slotOk();
+Index: kword/kwconfig.cc
+===================================================================
+--- kword/kwconfig.cc (revision 427945)
++++ kword/kwconfig.cc (working copy)
+@@ -301,7 +301,7 @@
+
+ QHBox* hbGridX = new QHBox( gbInterfaceGroup );
+ QLabel* labelGridX = new QLabel( i18n("&Horizontal grid size:"), hbGridX );
+- gridX=new KoUnitDoubleSpinBox( hbGridX,
++ gridX=new KoBuggyUnitDoubleSpinBox( hbGridX,
+ 0.1,
+ 50,
+ 0.1,
+@@ -313,7 +313,7 @@
+
+ QHBox* hbGridY = new QHBox( gbInterfaceGroup );
+ QLabel* labelGridY = new QLabel( i18n("&Vertical grid size:"), hbGridY );
+- gridY=new KoUnitDoubleSpinBox( hbGridY,
++ gridY=new KoBuggyUnitDoubleSpinBox( hbGridY,
+ 0.1,
+ 50,
+ 0.1,
+@@ -326,7 +326,7 @@
+
+ QHBox* hbIndent = new QHBox( gbInterfaceGroup );
+ QLabel* labelIdent = new QLabel( i18n("&Paragraph indent by toolbar buttons:"), hbIndent );
+- indent = new KoUnitDoubleSpinBox( hbIndent,
++ indent = new KoBuggyUnitDoubleSpinBox( hbIndent,
+ 0.1,
+ 50,
+ 0.1,
+@@ -662,7 +662,7 @@
+
+ QHBox* hbColumnSpacing = new QHBox( gbDocumentDefaults );
+ QLabel* columnSpacingLabel = new QLabel( i18n("Default column spacing:"), hbColumnSpacing );
+- m_columnSpacing = new KoUnitDoubleSpinBox( hbColumnSpacing,
++ m_columnSpacing = new KoBuggyUnitDoubleSpinBox( hbColumnSpacing,
+ 0.1,
+ 50,
+ 0.1,
+@@ -764,7 +764,7 @@
+
+ QHBox* hbTabStop = new QHBox( gbDocumentSettings );
+ tabStop = new QLabel(i18n("Tab stop (%1):").arg(doc->unitName()), hbTabStop);
+- m_tabStopWidth = new KoUnitDoubleSpinBox( hbTabStop,
++ m_tabStopWidth = new KoBuggyUnitDoubleSpinBox( hbTabStop,
+ MM_TO_POINT(2),
+ doc->ptPaperWidth(),
+ 0.1,
+Index: kword/framedia.cc
+===================================================================
+--- kword/framedia.cc (revision 427945)
++++ kword/framedia.cc (working copy)
+@@ -956,7 +956,7 @@
+ lx->resize( lx->sizeHint() );
+ pGrid->addWidget( lx, 1, 0 );
+
+- sx = new KoUnitDoubleSpinBox( grp1, 0, 9999, 1, 0.0, doc->unit() );
++ sx = new KoBuggyUnitDoubleSpinBox( grp1, 0, 9999, 1, 0.0, doc->unit() );
+
+ sx->resize( sx->sizeHint() );
+ pGrid->addWidget( sx, 1, 1 );
+@@ -965,7 +965,7 @@
+ ly->resize( ly->sizeHint() );
+ pGrid->addWidget( ly, 1, 2 );
+
+- sy = new KoUnitDoubleSpinBox( grp1, 0, 9999, 1, 0.0, doc->unit() );
++ sy = new KoBuggyUnitDoubleSpinBox( grp1, 0, 9999, 1, 0.0, doc->unit() );
+ sy->resize( sy->sizeHint() );
+ pGrid->addWidget( sy, 1, 3 );
+
+@@ -973,7 +973,7 @@
+ lw->resize( lw->sizeHint() );
+ pGrid->addWidget( lw, 2, 0 );
+
+- sw = new KoUnitDoubleSpinBox( grp1, 0, 9999, 1, 0.0, doc->unit() );
++ sw = new KoBuggyUnitDoubleSpinBox( grp1, 0, 9999, 1, 0.0, doc->unit() );
+
+ sw->resize( sw->sizeHint() );
+ connect( sw, SIGNAL(valueChanged(double)),
+@@ -985,7 +985,7 @@
+ lh->resize( lh->sizeHint() );
+ pGrid->addWidget( lh, 2, 2 );
+
+- sh = new KoUnitDoubleSpinBox( grp1, 0, 9999, 1, 0.0, doc->unit() );
++ sh = new KoBuggyUnitDoubleSpinBox( grp1, 0, 9999, 1, 0.0, doc->unit() );
+ connect( sh, SIGNAL(valueChanged(double)),
+ this, SLOT(slotUpdateWidthForHeight(double)) );
+
+@@ -1095,7 +1095,7 @@
+
+ f=allFrames.next();
+ }
+- // TODO port to KoUnitDoubleSpinBox
++ // TODO port to KoBuggyUnitDoubleSpinBox
+ // and TODO show a special value when frames have a different width/height
+ if ( sw->isEnabled() )
+ sw->setValue( KoUnit::toUserValue( commonWidth, doc->unit() ) );
+@@ -2103,7 +2103,7 @@
+ //lml->resize( lml->sizeHint() );
+ mGrid->addWidget( lml, 2, 0 );
+
+- m_inputLeft = new KoUnitDoubleSpinBox( grp2, 0, 9999, 1, 0.0, doc->unit() );
++ m_inputLeft = new KoBuggyUnitDoubleSpinBox( grp2, 0, 9999, 1, 0.0, doc->unit() );
+
+ mGrid->addWidget( m_inputLeft, 2, 1 );
+
+@@ -2111,7 +2111,7 @@
+ //lmt->resize( lmt->sizeHint() );
+ mGrid->addWidget( lmt, 2, 2 );
+
+- m_inputTop = new /*KDoubleNumInput*/KoUnitDoubleSpinBox( grp2, 0, 9999, 1, 0.0, doc->unit() );
++ m_inputTop = new /*KDoubleNumInput*/KoBuggyUnitDoubleSpinBox( grp2, 0, 9999, 1, 0.0, doc->unit() );
+
+ //m_inputTop->resize( m_inputTop->sizeHint() );
+
+@@ -2121,7 +2121,7 @@
+ //lmr->resize( lmr->sizeHint() );
+ mGrid->addWidget( lmr, 3, 0 );
+
+- m_inputRight = new KoUnitDoubleSpinBox( grp2, 0, 9999, 1, 0.0, doc->unit() );
++ m_inputRight = new KoBuggyUnitDoubleSpinBox( grp2, 0, 9999, 1, 0.0, doc->unit() );
+
+ //m_inputRight->resize( m_inputRight->sizeHint() );
+ mGrid->addWidget( m_inputRight, 3, 1 );
+@@ -2130,7 +2130,7 @@
+ //lmb->resize( lmb->sizeHint() );
+ mGrid->addWidget( lmb, 3, 2 );
+
+- m_inputBottom = new KoUnitDoubleSpinBox( grp2, 0, 9999, 1, 0.0, doc->unit() );
++ m_inputBottom = new KoBuggyUnitDoubleSpinBox( grp2, 0, 9999, 1, 0.0, doc->unit() );
+
+ //m_inputBottom->resize( m_inputBottom->sizeHint() );
+ mGrid->addWidget( m_inputBottom, 3, 3 );
+Index: kword/resizetabledia.cc
+===================================================================
+--- kword/resizetabledia.cc (revision 427945)
++++ kword/resizetabledia.cc (working copy)
+@@ -77,7 +77,7 @@
+ else
+ value->setValue( type == ROW ? (rowSelected+1) : (colSelected+1) );
+ rc = new QLabel( type == ROW ? i18n( "Height (%1):" ).arg(doc->unitName()) : i18n( "Width (%1):" ).arg(doc->unitName()), page );
+- position= new KoUnitDoubleSpinBox( page, 0.01, table->anchorFrameset()->isFloating() ? table->anchorFrameset()->frame(0)->width(): 9999, 1, 0.0, doc->unit(), doc->unit() );
++ position= new KoBuggyUnitDoubleSpinBox( page, 0.01, table->anchorFrameset()->isFloating() ? table->anchorFrameset()->frame(0)->width(): 9999, 1, 0.0, doc->unit(), doc->unit() );
+ slotValueChanged( value->value());
+ connect( value, SIGNAL( valueChanged ( int )), this, SLOT( slotValueChanged( int )));
+
+Index: kword/mailmerge/sql/kwserialletter_qtsqldb.desktop
+===================================================================
+--- kword/mailmerge/sql/kwserialletter_qtsqldb.desktop (revision 427945)
++++ kword/mailmerge/sql/kwserialletter_qtsqldb.desktop (working copy)
+@@ -4,6 +4,7 @@
+ ServiceTypes=KWord/MailMergePlugin
+
+ Name=Qt-SQL Source (single table)
++Name[cy]=Ffynhonell Qt-SQL (tabl sengl)
+ Name[da]=Qt-SQL-kilde (enkelt tabel)
+ Name[de]=Qt-SQL (Einzeltabelle)
+ Name[el]=Qt-SQL πηγή (μονός πίνακας)
+Index: kword/mailmerge/kspread/kwmailmerge_kspread.desktop
+===================================================================
+--- kword/mailmerge/kspread/kwmailmerge_kspread.desktop (revision 427945)
++++ kword/mailmerge/kspread/kwmailmerge_kspread.desktop (working copy)
+@@ -22,6 +22,7 @@
+ Name[pt]=Fonte de Tabela do KSpread
+ Name[pt_BR]=Fonte de Tabela do KSpread
+ Name[ru]=Источник таблиц KSpread
++Name[sl]=Vir tabel KSpread
+ Name[sr]=KSpread-ов извор табеле
+ Name[sr@Latn]=KSpread-ov izvor tabele
+ Name[sv]=Kspread-tabellkällfil
+Index: kword/framedia.h
+===================================================================
+--- kword/framedia.h (revision 427945)
++++ kword/framedia.h (working copy)
+@@ -81,7 +81,7 @@
+ void slotValueChanged( double );
+
+ private:
+- KoUnitDoubleSpinBox *m_inputLeft, *m_inputRight, *m_inputTop, *m_inputBottom;
++ KoBuggyUnitDoubleSpinBox *m_inputLeft, *m_inputRight, *m_inputTop, *m_inputBottom;
+ QCheckBox *m_synchronize;
+ KWDocument *doc;
+ bool m_changed;
+@@ -168,7 +168,7 @@
+ QWidget *tab4;
+ QGroupBox *grp1;
+ QLabel *lx, *ly, *lw, *lh;
+- KoUnitDoubleSpinBox *sx, *sy, *sw, *sh;
++ KoBuggyUnitDoubleSpinBox *sx, *sy, *sw, *sh;
+ KWFourSideConfigWidget* m_paddingConfigWidget;
+ QCheckBox *floating;
+ QCheckBox *protectSize;
+Index: kword/kwconfig.h
+===================================================================
+--- kword/kwconfig.h (revision 427945)
++++ kword/kwconfig.h (working copy)
+@@ -29,7 +29,7 @@
+ class KWView;
+ class QCheckBox;
+ class KIntNumInput;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+ class KConfig;
+ class QComboBox;
+ class KIntNumInput;
+@@ -69,8 +69,8 @@
+ KWView* m_pView;
+ KConfig* config;
+ QComboBox *m_unitCombo;
+- KoUnitDoubleSpinBox* gridX,*gridY;
+- KoUnitDoubleSpinBox* indent;
++ KoBuggyUnitDoubleSpinBox* gridX,*gridY;
++ KoBuggyUnitDoubleSpinBox* indent;
+ KIntNumInput* recentFiles;
+ QCheckBox *showStatusBar, *showScrollBar, *pgUpDownMovesCaret;
+ int oldNbRecentFiles;
+@@ -114,7 +114,7 @@
+ QLabel *fontName;
+ QLabel *tabStop;
+
+- KoUnitDoubleSpinBox* m_columnSpacing;
++ KoBuggyUnitDoubleSpinBox* m_columnSpacing;
+
+ KIntNumInput* autoSave;
+ int oldAutoSaveValue;
+@@ -123,7 +123,7 @@
+ int m_oldStartingPage;
+ bool m_oldBackupFile;
+ KIntNumInput* m_variableNumberOffset;
+- KoUnitDoubleSpinBox *m_tabStopWidth;
++ KoBuggyUnitDoubleSpinBox *m_tabStopWidth;
+ QCheckBox *m_cursorInProtectedArea;
+ QCheckBox *m_createBackupFile;
+ // QCheckBox *m_directInsertCursor;
+Index: kword/configfootnotedia.cc
+===================================================================
+--- kword/configfootnotedia.cc (revision 427945)
++++ kword/configfootnotedia.cc (working copy)
+@@ -106,7 +106,7 @@
+
+ QGridLayout *layout = new QGridLayout( 0, 1, 1, 0, 6);
+
+- spWidth = new KoUnitDoubleSpinBox(page, 0, 5, 0.5, 1.0, m_doc->unit(), 1);
++ spWidth = new KoBuggyUnitDoubleSpinBox(page, 0, 5, 0.5, 1.0, m_doc->unit(), 1);
+ spWidth->setValue( m_doc->footNoteSeparatorLineWidth());
+ layout->addWidget( spWidth, 1, 1 );
+
+Index: kword/templates/DTP/SimpleLayout.desktop
+===================================================================
+--- kword/templates/DTP/SimpleLayout.desktop (revision 427945)
++++ kword/templates/DTP/SimpleLayout.desktop (working copy)
+@@ -21,6 +21,7 @@
+ Name[fa]=نمونه طرح بندی
+ Name[fi]=Yksinkertainen taittomalli
+ Name[fr]=Mise en page simple
++Name[ga]=Leagan Amach Simplí
+ Name[he]=פריסה פשוטה
+ Name[hr]=Jednostavni raspored
+ Name[hu]=Egyszerű elrendezés
+Index: kword/templates/DTP/Empty.desktop
+===================================================================
+--- kword/templates/DTP/Empty.desktop (revision 427945)
++++ kword/templates/DTP/Empty.desktop (working copy)
+@@ -17,6 +17,7 @@
+ Name[fa]=صفحه خالی
+ Name[fi]=Tyhjä sivu
+ Name[fr]=Page vide
++Name[ga]=Leathanach Folamh
+ Name[he]=דף ריק
+ Name[hr]=Prazna stranica
+ Name[hu]=Üres oldal
+Index: kword/templates/DTP/fax.desktop
+===================================================================
+--- kword/templates/DTP/fax.desktop (revision 427945)
++++ kword/templates/DTP/fax.desktop (working copy)
+@@ -20,6 +20,7 @@
+ Name[fa]=نمونه دورنگار
+ Name[fi]=Faksipohja
+ Name[fr]=Modèle de fax
++Name[ga]=Teimpléad Facs
+ Name[he]=תבנית פקס
+ Name[hr]=Fax predložak
+ Name[hu]=Faxsablon
+@@ -63,6 +64,7 @@
+ Comment[et]=Faks päisega
+ Comment[fi]=Faksiasiakirja otsikolla
+ Comment[fr]=Document de fax. avec en-tête
++Comment[ga]=Cáipéis fhacs, le ceanntásc
+ Comment[he]=מסמך פקס עם כותרת
+ Comment[hr]=Faks dokument, sa zaglavljem
+ Comment[hu]=Fax dokumentum (fejléccel)
+Index: kword/templates/Wordprocessing/TwoColumns.desktop
+===================================================================
+--- kword/templates/Wordprocessing/TwoColumns.desktop (revision 427945)
++++ kword/templates/Wordprocessing/TwoColumns.desktop (working copy)
+@@ -22,6 +22,7 @@
+ Name[fi]=Kaksi palstaa
+ Name[fo]=Tveir teigar
+ Name[fr]=Deux colonnes
++Name[ga]=Dhá Cholún
+ Name[he]=שני טורים
+ Name[hr]=Dva stupca
+ Name[hu]=Kétoszlopos
+Index: kword/resizetabledia.h
+===================================================================
+--- kword/resizetabledia.h (revision 427945)
++++ kword/resizetabledia.h (working copy)
+@@ -31,7 +31,7 @@
+ class QRadioButton;
+ class QLabel;
+ class QSpinBox;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+
+ class KWResizeTableDia : public KDialogBase
+ {
+@@ -48,7 +48,7 @@
+ KWDocument *doc;
+ ResizeType type;
+ KWCanvas *canvas;
+- KoUnitDoubleSpinBox *position;
++ KoBuggyUnitDoubleSpinBox *position;
+ double resetValue;
+ protected slots:
+ virtual void slotOk();
+Index: kexi/plugins/forms/kexilabel.cpp
+===================================================================
+--- kexi/plugins/forms/kexilabel.cpp (revision 427945)
++++ kexi/plugins/forms/kexilabel.cpp (working copy)
+@@ -33,6 +33,20 @@
+ #define SHADOW_DIAGONAL_FACTOR 1.0
+ #define SHADOW_THICKNESS 1
+
++class KexiLabelPrivate : public QLabel {
++ friend class KexiLabel;
++ public:
++ KexiLabelPrivate( KexiLabel* );
++ virtual ~KexiLabelPrivate();
++ private:
++ QImage makeShadow( const QImage& textImage, const QColor &bgColor, const QRect& boundingRect );
++ QRect getBounding( const QImage &image, const QRect& startRect );
++// double defaultDecay( QImage& source, int i, int j );
++ KPixmap getShadowPixmap();
++
++ QRect p_shadowRect;
++};
++
+ KexiLabelPrivate::KexiLabelPrivate( KexiLabel* parent )
+ : QLabel( parent )
+ {
+@@ -404,6 +418,40 @@
+ QLabel::paintEvent( e );
+ }
+
++void KexiLabel::fontChange( const QFont& font ) {
++ p_pixmapDirty = true;
++ p_privateLabel->setFont( font );
++ QLabel::fontChange( font );
++}
++
++void KexiLabel::styleChange( QStyle& style ) {
++ p_pixmapDirty = true;
++ QLabel::styleChange( style );
++}
++
++void KexiLabel::enabledChange( bool enabled ) {
++ p_pixmapDirty = true;
++ p_privateLabel->setEnabled( enabled );
++ QLabel::enabledChange( enabled );
++}
++
++void KexiLabel::paletteChange( const QPalette& pal ) {
++ p_pixmapDirty = true;
++ p_privateLabel->setPalette( pal );
++ QLabel::paletteChange( pal );
++}
++
++void KexiLabel::frameChanged() {
++ p_pixmapDirty = true;
++ p_privateLabel->frameChanged();
++ QFrame::frameChanged();
++}
++
++void KexiLabel::showEvent( QShowEvent* e ) {
++ p_pixmapDirty = true;
++ QLabel::showEvent( e );
++}
++
+ void KexiLabel::setValueInternal( const QVariant& add, bool removeOld ) {
+ if (removeOld)
+ setText(add.toString());
+Index: kexi/plugins/forms/kexilabel.h
+===================================================================
+--- kexi/plugins/forms/kexilabel.h (revision 427945)
++++ kexi/plugins/forms/kexilabel.h (working copy)
+@@ -32,20 +32,10 @@
+ class QTimer;
+ class KexiLabel;
+
+-class KexiLabelPrivate : public QLabel {
+- friend class KexiLabel;
+- public:
+- KexiLabelPrivate( KexiLabel* );
+- virtual ~KexiLabelPrivate();
+- private:
+- QImage makeShadow( const QImage& textImage, const QColor &bgColor, const QRect& boundingRect );
+- QRect getBounding( const QImage &image, const QRect& startRect );
+-// double defaultDecay( QImage& source, int i, int j );
+- KPixmap getShadowPixmap();
++class KexiLabelPrivate;
+
+- QRect p_shadowRect;
+-};
+
++
+ /**
+ An extended, data-aware, read-only text label.
+ It's text may have a drop-shadow.
+@@ -139,40 +129,14 @@
+ */
+ virtual void setValueInternal( const QVariant& add, bool removeOld );
+
+- virtual void fontChange( const QFont& font ) {
+- p_pixmapDirty = true;
+- p_privateLabel->setFont( font );
+- QLabel::fontChange( font );
+- }
++ virtual void fontChange( const QFont& font );
++ virtual void styleChange( QStyle& style );
++ virtual void enabledChange( bool enabled );
+
+- virtual void styleChange( QStyle& style ) {
+- p_pixmapDirty = true;
+- QLabel::styleChange( style );
+- }
++ virtual void paletteChange( const QPalette& pal );
++ virtual void frameChanged();
++ virtual void showEvent( QShowEvent* e );
+
+- virtual void enabledChange( bool enabled ) {
+- p_pixmapDirty = true;
+- p_privateLabel->setEnabled( enabled );
+- QLabel::enabledChange( enabled );
+- }
+-
+- virtual void paletteChange( const QPalette& pal ) {
+- p_pixmapDirty = true;
+- p_privateLabel->setPalette( pal );
+- QLabel::paletteChange( pal );
+- }
+-
+- virtual void frameChanged() {
+- p_pixmapDirty = true;
+- p_privateLabel->frameChanged();
+- QFrame::frameChanged();
+- }
+-
+- virtual void showEvent( QShowEvent* e ) {
+- p_pixmapDirty = true;
+- QLabel::showEvent( e );
+- }
+-
+ private:
+ void updatePixmapLater();
+
+Index: kexi/plugins/kugar/kexikugarhandler.desktop
+===================================================================
+--- kexi/plugins/kugar/kexikugarhandler.desktop (revision 427945)
++++ kexi/plugins/kugar/kexikugarhandler.desktop (working copy)
+@@ -60,7 +60,7 @@
+ Comment[nn]=Integrasjon av Kugar-basert rapportgenerering
+ Comment[pt]=Integração da geração de relatórios do Kugar
+ Comment[pt_BR]=Integração do Kugar baseada na geração de relatório
+-Comment[ru]=Интеграция с Kugar для построения отчётов
++Comment[ru]=Отчёт посредством Kugar
+ Comment[sk]=Integrácia generovaných správ založených na Kugar
+ Comment[sl]=Integracija ustvarjanja poročil na osnovi Kugarja
+ Comment[sr]=Интеграција прављења извештаја заснованог на Kugar-у
+Index: kexi/plugins/reports/kexireportfactory.desktop
+===================================================================
+--- kexi/plugins/reports/kexireportfactory.desktop (revision 427945)
++++ kexi/plugins/reports/kexireportfactory.desktop (working copy)
+@@ -19,6 +19,7 @@
+ Name[pt]=Elementos de Relatório do Kexi
+ Name[pt_BR]=Widgets de Relatório do Kexi
+ Name[ru]=Элементы управления для отчётов Kexi
++Name[sl]=Gradniki za poročila za Kexi
+ Name[sr]=Kexi-јеве контроле за извештаје
+ Name[sr@Latn]=Kexi-jeve kontrole za izveštaje
+ Name[sv]=Kexi-rapportkomponenter
+Index: kexi/kexipart.desktop
+===================================================================
+--- kexi/kexipart.desktop (revision 427945)
++++ kexi/kexipart.desktop (working copy)
+@@ -19,6 +19,7 @@
+ Name[pt]=Componente de Bases de Dados do KOffice
+ Name[pt_BR]=Componente de Banco de Dados do KOffice
+ Name[ru]=Компонент баз данных KOffice
++Name[sl]=Komponenta za zbirke podatkov za KOffice
+ Name[sr]=KOffice-ова компонента за базе података
+ Name[sr@Latn]=KOffice-ova komponenta za baze podataka
+ Name[sv]=Koffice-databaskomponent
+Index: kexi/filters/import/csv/kexicsvimport.desktop
+===================================================================
+--- kexi/filters/import/csv/kexicsvimport.desktop (revision 427945)
++++ kexi/filters/import/csv/kexicsvimport.desktop (working copy)
+@@ -42,7 +42,7 @@
+ Comment[pl]=Import pliku CVS...
+ Comment[pt]=Importar um Ficheiro CSV...
+ Comment[pt_BR]=Importar Arquivo CSV...
+-Comment[ru]=Импорт данных из CSV...
++Comment[ru]=Импорт из CSV...
+ Comment[sk]=Import súborov CSV...
+ Comment[sl]=Uvoz datoteke CSV ...
+ Comment[sr]=Увози се CSV фајл...
+Index: kexi/filters/import/kspread_chain/kexikspreadimport.desktop
+===================================================================
+--- kexi/filters/import/kspread_chain/kexikspreadimport.desktop (revision 427945)
++++ kexi/filters/import/kspread_chain/kexikspreadimport.desktop (working copy)
+@@ -38,7 +38,7 @@
+ Comment[nn]=Importer KSpread-lesbar fil ...
+ Comment[pt]=Importar um ficheiro KSpread...
+ Comment[pt_BR]=Importar arquivo legível do KSpread...
+-Comment[ru]=Импорт в KSpread...
++Comment[ru]=Импорт данных из KSpread...
+ Comment[sk]=Import súboru podporovaného KSpread...
+ Comment[sl]=Uvoz datoteke za KSpread ...
+ Comment[sr]=Увози се фајл који се може читати KSpread-ом...
+Index: kexi/data/x-kexiproject-sqlite2.desktop
+===================================================================
+--- kexi/data/x-kexiproject-sqlite2.desktop (revision 427945)
++++ kexi/data/x-kexiproject-sqlite2.desktop (working copy)
+@@ -21,6 +21,7 @@
+ Comment[pt]=Projecto do Kexi em Ficheiro de Base de Dados
+ Comment[pt_BR]=Projeto Baseado em Arquivo de Banco de Dados do Kexi
+ Comment[ru]=Проект Kexi с хранилищем данных в файлах
++Comment[sl]=Na datotekah zasnovan projekt zbirke podatkov Kexi
+ Comment[sr]=Kexi-јев пројекат базе података заснован на фајлу
+ Comment[sr@Latn]=Kexi-jev projekat baze podataka zasnovan na fajlu
+ Comment[sv]=Kexi filbaserat databasprojekt
+Index: kexi/data/x-kexiproject-sqlite3.desktop
+===================================================================
+--- kexi/data/x-kexiproject-sqlite3.desktop (revision 427945)
++++ kexi/data/x-kexiproject-sqlite3.desktop (working copy)
+@@ -21,6 +21,7 @@
+ Comment[pt]=Projecto do Kexi em Ficheiro de Base de Dados
+ Comment[pt_BR]=Projeto Baseado em Arquivo de Banco de Dados do Kexi
+ Comment[ru]=Проект Kexi с хранилищем данных в файлах
++Comment[sl]=Na datotekah zasnovan projekt zbirke podatkov Kexi
+ Comment[sr]=Kexi-јев пројекат базе података заснован на фајлу
+ Comment[sr@Latn]=Kexi-jev projekat baze podataka zasnovan na fajlu
+ Comment[sv]=Kexi filbaserat databasprojekt
+Index: kexi/data/x-kexiproject-sqlite.desktop
+===================================================================
+--- kexi/data/x-kexiproject-sqlite.desktop (revision 427945)
++++ kexi/data/x-kexiproject-sqlite.desktop (working copy)
+@@ -22,6 +22,7 @@
+ Comment[pt]=Projecto do Kexi em Ficheiro de Base de Dados
+ Comment[pt_BR]=Projeto Baseado em Arquivo de Banco de Dados do Kexi
+ Comment[ru]=Проект Kexi с хранилищем данных в файлах
++Comment[sl]=Na datotekah zasnovan projekt zbirke podatkov Kexi
+ Comment[sr]=Kexi-јев пројекат базе података заснован на фајлу
+ Comment[sr@Latn]=Kexi-jev projekat baze podataka zasnovan na fajlu
+ Comment[sv]=Kexi filbaserat databasprojekt
+Index: kexi/data/kde32compat/x-sqlite2.desktop
+===================================================================
+--- kexi/data/kde32compat/x-sqlite2.desktop (revision 427945)
++++ kexi/data/kde32compat/x-sqlite2.desktop (working copy)
+@@ -21,6 +21,7 @@
+ Comment[pt]=Ficheiro de Base de Dados do SQLite2
+ Comment[pt_BR]=Ficheiro de Base de Dados do SQLite2
+ Comment[ru]=База данных SQLite2
++Comment[sl]=Datoteka zbirke podatkov SQLite2
+ Comment[sr]=Фајл базе података SQLite2
+ Comment[sr@Latn]=Fajl baze podataka SQLite2
+ Comment[sv]=SQLite2-databasfil
+Index: kexi/data/kde32compat/x-sqlite3.desktop
+===================================================================
+--- kexi/data/kde32compat/x-sqlite3.desktop (revision 427945)
++++ kexi/data/kde32compat/x-sqlite3.desktop (working copy)
+@@ -20,6 +20,7 @@
+ Comment[pt]=Ficheiro de Base de Dados do SQLite3
+ Comment[pt_BR]=Ficheiro de Base de Dados do SQLite3
+ Comment[ru]=База данных SQLite3
++Comment[sl]=Datoteka zbirke podatkov SQLite3
+ Comment[sr]=Фајл базе података SQLite3
+ Comment[sr@Latn]=Fajl baze podataka SQLite3
+ Comment[sv]=SQLite3-databasfil
+Index: kexi/data/kexiscripthandler.desktop
+===================================================================
+--- kexi/data/kexiscripthandler.desktop (revision 427945)
++++ kexi/data/kexiscripthandler.desktop (working copy)
+@@ -5,6 +5,7 @@
+
+ GenericName=Scripts
+ GenericName[br]=Urzhiaouegoù
++GenericName[cy]=Sgriptiau
+ GenericName[da]=Scripter
+ GenericName[de]=Skripte
+ GenericName[el]=Σενάρια
+@@ -27,6 +28,7 @@
+ GenericName[zh_CN]=脚本
+ Name=Scripts
+ Name[br]=Urzhiaouegoù
++Name[cy]=Sgriptiau
+ Name[da]=Scripter
+ Name[de]=Skripte
+ Name[el]=Σενάρια
+Index: kexi/formeditor/kdevelop_plugin/kformdesigner_kdev_part.desktop
+===================================================================
+--- kexi/formeditor/kdevelop_plugin/kformdesigner_kdev_part.desktop (revision 427945)
++++ kexi/formeditor/kdevelop_plugin/kformdesigner_kdev_part.desktop (working copy)
+@@ -17,6 +17,7 @@
+ Name[pt]='Plugin' para o KDevelop de Desenho de Formulários
+ Name[pt_BR]=Plugin do Desenhista de Formulário do KDevelop
+ Name[ru]=Модуль форм KDevelop
++Name[sl]=Vstavek za oblikovanje obrazcev za KDevelop
+ Name[sr]=Прикључак дизајнера форми за KDevelop
+ Name[sr@Latn]=Priključak dizajnera formi za KDevelop
+ Name[sv]=KDevelop insticksprogram för formulärkonstruktion
+Index: tools/thumbnail/kofficethumbnail.desktop
+===================================================================
+--- tools/thumbnail/kofficethumbnail.desktop (revision 427945)
++++ tools/thumbnail/kofficethumbnail.desktop (working copy)
+@@ -20,6 +20,7 @@
+ Name[fi]=KOffice-tiedostot
+ Name[fo]=KSkrivstovu-fílir
+ Name[fr]=Fichiers KOffice
++Name[ga]=Comhaid KOffice
+ Name[he]=קבצי KOffice
+ Name[hr]=KOffice datoteke
+ Name[hu]=KOffice-fájlok
+Index: tools/kfile-plugins/koffice/kfile_koffice.desktop
+===================================================================
+--- tools/kfile-plugins/koffice/kfile_koffice.desktop (revision 427945)
++++ tools/kfile-plugins/koffice/kfile_koffice.desktop (working copy)
+@@ -5,6 +5,7 @@
+ Name[af]=Koffice Inligting
+ Name[ar]=معلومات KOffice
+ Name[bg]=Информация за KOffice
++Name[br]=Titouroù diwar-benn KOffice
+ Name[ca]=Informació KOffice
+ Name[cs]=KOffice info
+ Name[cy]=Gwybodaeth KOffice
+@@ -18,6 +19,7 @@
+ Name[fi]=KOffice tiedot
+ Name[fo]=KSkrivstovu-upplýsingar
+ Name[fr]=Informations sur KOffice
++Name[ga]=Eolas faoi KOffice
+ Name[he]=מידע KOffice
+ Name[hu]=KOffice-információ
+ Name[it]=Informazioni KOffice
+@@ -32,7 +34,7 @@
+ Name[pl]=Dane koffice
+ Name[pt]=Informação do KOffice
+ Name[pt_BR]=Informações do KOffice
+-Name[ru]=Информация о KOffice
++Name[ru]=Информация KOffice
+ Name[se]=KOffice-dieđut
+ Name[sk]=Informácie o KOffice
+ Name[sl]=Informacije o KOffice
+Index: tools/kfile-plugins/ooo/kfile_ooo.desktop
+===================================================================
+--- tools/kfile-plugins/ooo/kfile_ooo.desktop (revision 427945)
++++ tools/kfile-plugins/ooo/kfile_ooo.desktop (working copy)
+@@ -13,6 +13,7 @@
+ Name[et]=OpenOffice.org-i info
+ Name[fi]=KOffice tiedot
+ Name[fr]=Informations sur OpenOffice.org
++Name[ga]=Eolas faoi OpenOffice.org
+ Name[he]=מידע OpenOffice.org
+ Name[hu]=OpenOffice.org-információ
+ Name[it]=Informazioni OpenOffice.org
+@@ -23,7 +24,7 @@
+ Name[pl]=Informacja OpenOffice.org
+ Name[pt]=Informação do OpenOffice.org
+ Name[pt_BR]=Informações do OpenOffice.org
+-Name[ru]=Информация об OpenOffice.org
++Name[ru]=Информация OpenOffice.org
+ Name[se]=OpenOffice.org-dieđut
+ Name[sk]=Informácie o OpenOffice.org
+ Name[sl]=Informacije o OpenOffice.org
+Index: lib/kofficecore/koApplication.cc
+===================================================================
+--- lib/kofficecore/koApplication.cc (revision 427945)
++++ lib/kofficecore/koApplication.cc (working copy)
+@@ -149,7 +149,10 @@
+ shell->setRootDocument( doc );
+ }
+ else
++ {
++ delete doc;
+ return false;
++ }
+
+ QObject::disconnect(doc, SIGNAL(sigProgress(int)), shell, SLOT(slotProgress(int)));
+ } else {
+Index: lib/kofficecore/koMainWindow.cc
+===================================================================
+--- lib/kofficecore/koMainWindow.cc (revision 427945)
++++ lib/kofficecore/koMainWindow.cc (working copy)
+@@ -1033,6 +1033,13 @@
+ if ( !newdoc->initDoc( (KoDocument::InitDocFlags)initDocFlags, this ) )
+ {
+ delete newdoc;
++ // See cancelQuits() in KoTemplateChooseDia.
++ // The quit() must be done here so that the KoDocument got deleted already.
++ bool onlyDoc = !KoDocument::documentList() || KoDocument::documentList()->isEmpty();
++ bool onlyMainWindow = !KMainWindow::memberList || KMainWindow::memberList->count() <= 1;
++ if ( onlyDoc && onlyMainWindow && kapp->instanceName() != "koshell" ) {
++ kapp->quit();
++ }
+ return;
+ }
+ disconnect(newdoc, SIGNAL(sigProgress(int)), this, SLOT(slotProgress(int)));
+Index: lib/kofficecore/koDocument.cc
+===================================================================
+--- lib/kofficecore/koDocument.cc (revision 427945)
++++ lib/kofficecore/koDocument.cc (working copy)
+@@ -890,6 +890,9 @@
+ kdDebug(30003)<<k_funcinfo<<" external (don't save) url:" << childDoc->url().url()<<endl;
+ path = childDoc->url().url();
+ }
++ // OOo uses a trailing slash for the path to embedded objects (== directories)
++ if ( !path.endsWith( "/" ) )
++ path += '/';
+ manifestWriter->addManifestEntry( path, childDoc->nativeOasisMimeType() );
+ }
+ }
+@@ -1793,7 +1796,9 @@
+ //if ( !oasisStore.loadAndParse( "tar:/META-INF/manifest.xml", manifestDoc, d->lastErrorMessage ) )
+ // return false;
+
+- (void)oasisStore.loadAndParse( "settings.xml", settingsDoc, d->lastErrorMessage );
++ if ( store->hasFile( "settings.xml" ) ) {
++ (void)oasisStore.loadAndParse( "settings.xml", settingsDoc, d->lastErrorMessage );
++ }
+ if ( !loadOasis( contentDoc, oasisStyles, settingsDoc, store ) )
+ return false;
+
+@@ -1920,9 +1925,12 @@
+ KoDocument *doc = it.current()->document();
+ if ( doc )
+ {
+- if ( doc->isStoredExtern() ) //###TODO: Handle non-native mimetype docs
++ bool foo = doc->isStoredExtern();
++ kdDebug(36001) << "========== isStoredExtern() returned "
++ << foo << " ==========" << endl;
++
++ if ( foo ) //###TODO: Handle non-native mimetype docs
+ {
+- if ( doc->isModified() )
+ {
+ kdDebug(30003)<<k_funcinfo<<" found modified child: "<<doc->url().url()<<" extern="<<doc->isStoredExtern()<<endl;
+ if ( doc->queryCloseDia() == KMessageBox::Cancel )
+Index: lib/kofficecore/koDocumentChild.cc
+===================================================================
+--- lib/kofficecore/koDocumentChild.cc (revision 427945)
++++ lib/kofficecore/koDocumentChild.cc (working copy)
+@@ -230,6 +230,8 @@
+ QString relPath = KURL( m_tmpURL ).path();
+ path += relPath.mid( 1 ); // remove leading '/'
+ }
++ if ( !path.endsWith( "/" ) )
++ path += '/';
+ const QString mimeType = KoOasisStore::mimeForPath( manifestDoc, path );
+ kdDebug() << k_funcinfo << "path for manifest file=" << path << " mimeType=" << mimeType << endl;
+ if ( mimeType.isEmpty() ) {
+@@ -312,6 +314,8 @@
+ }
+ if ( !res )
+ {
++ // Keep the error message from the attempted loading
++ QString errorMessage = d->m_doc->errorMessage();
+ delete d->m_doc;
+ d->m_doc = 0;
+ QString tmpURL = m_tmpURL; // keep a copy, createUnavailDocument will erase it
+@@ -322,7 +326,7 @@
+ d->m_doc->setProperty( "realURL", tmpURL ); // so that it gets saved correctly
+ d->m_doc->setStoreInternal( true );
+ if ( internalURL )
+- d->m_doc->setProperty( "unavailReason", i18n( "Could not load embedded object." ) );
++ d->m_doc->setProperty( "unavailReason", i18n( "Could not load embedded object." ) + "\n" + errorMessage );
+ else
+ d->m_doc->setProperty( "unavailReason", i18n( "External document not found:\n%1" ).arg( tmpURL ) );
+ }
+Index: lib/kofficeui/koTemplateChooseDia.cc
+===================================================================
+--- lib/kofficeui/koTemplateChooseDia.cc (revision 427945)
++++ lib/kofficeui/koTemplateChooseDia.cc (working copy)
+@@ -210,6 +210,7 @@
+ d=0L;
+ }
+
++// Keep in sync with KoMainWindow::chooseNewDocument
+ static bool cancelQuits() {
+ bool onlyDoc = !KoDocument::documentList() || KoDocument::documentList()->count() <= 1;
+ bool onlyMainWindow = !KMainWindow::memberList || KMainWindow::memberList->count() <= 1;
+@@ -261,10 +262,6 @@
+ }
+
+ delete dlg;
+- if ( rt == Cancel && dialogType == Everything && cancelQuits() )
+- // The button says quit, so let's quit
+- kapp->quit();
+-
+ return rt;
+ }
+
+@@ -458,8 +455,8 @@
+ d->m_jwidget->showPage(templateNum);
+ else if ( defaultTemplateGroup != -1)
+ d->m_jwidget->showPage(defaultTemplateGroup);
+-
+
++
+ // Set the initially selected template, possibly from the last usage of the dialog
+ currentChanged(itemtoselect);
+
+Index: lib/kofficeui/koUnitWidgets.h
+===================================================================
+--- lib/kofficeui/koUnitWidgets.h (revision 427945)
++++ lib/kofficeui/koUnitWidgets.h (working copy)
+@@ -77,7 +77,7 @@
+ */
+ QString getVisibleText( double value ) const;
+ /**
+- * Transfrom a string inot a double, while taking care of locale specific symbols.
++ * Transfrom a string into a double, while taking care of locale specific symbols.
+ * @param str the string to transform into a number
+ * @param ok true, if the conversion was succesful
+ * @return the value as double
+@@ -94,11 +94,11 @@
+ * Spin box for double precision numbers with unit display
+ * \since 1.4 (change of behavior)
+ */
+-class KOFFICEUI_EXPORT KoUnitDoubleSpinBox : public KDoubleSpinBox, public KoUnitDoubleBase
++class KOFFICEUI_EXPORT KoBuggyUnitDoubleSpinBox : public KDoubleSpinBox, public KoUnitDoubleBase
+ {
+ public:
+ // lower, upper, step and value are in pt
+- KoUnitDoubleSpinBox( QWidget *parent, double lower, double upper, double step, double value = 0.0,
++ KoBuggyUnitDoubleSpinBox( QWidget *parent, double lower, double upper, double step, double value = 0.0,
+ KoUnit::Unit unit = KoUnit::U_PT, unsigned int precision = 2, const char *name = 0 );
+
+ virtual void changeValue( double );
+@@ -123,6 +123,22 @@
+ };
+
+ /**
++ * Temporary class that will be merged with koBuggyUnitDoubleSpinBox
++ * and renamed into KoUnitDoubleSpinBox when all the users of that
++ * class have been converted.
++ */
++class KOFFICEUI_EXPORT KoUnitDoubleSpinBox2 : public KoBuggyUnitDoubleSpinBox
++{
++public:
++ // lower, upper, step and value are in pt
++ KoUnitDoubleSpinBox2( QWidget *parent, double lower, double upper, double step, double value = 0.0,
++ KoUnit::Unit unit = KoUnit::U_PT, unsigned int precision = 2, const char *name = 0 );
++
++ virtual void changeValue( double );
++};
++
++
++/**
+ * Line edit for double precision numbers with unit display
+ * \since 1.4 (change of behavior)
+ */
+Index: lib/kofficeui/kolinewidthaction.cpp
+===================================================================
+--- lib/kofficeui/kolinewidthaction.cpp (revision 427945)
++++ lib/kofficeui/kolinewidthaction.cpp (working copy)
+@@ -160,7 +160,7 @@
+ {
+ public:
+ KoUnit::Unit m_unit;
+- KoUnitDoubleSpinBox* m_lineWidthUSBox;
++ KoBuggyUnitDoubleSpinBox* m_lineWidthUSBox;
+ };
+
+ KoLineWidthChooser::KoLineWidthChooser(QWidget* parent, const char* name)
+@@ -174,7 +174,7 @@
+ setMainWidget(mainWidget);
+ QGridLayout* gl = new QGridLayout(mainWidget, 1, 2, KDialog::marginHint(), KDialog::spacingHint());
+ QLabel* textLbl = new QLabel(i18n("Line width:"), mainWidget);
+- d->m_lineWidthUSBox = new KoUnitDoubleSpinBox(mainWidget, 0.0, 1000.0, 0.1, 1.0, d->m_unit, 2);
++ d->m_lineWidthUSBox = new KoBuggyUnitDoubleSpinBox(mainWidget, 0.0, 1000.0, 0.1, 1.0, d->m_unit, 2);
+ gl->addWidget(textLbl, 0, 0);
+ gl->addWidget(d->m_lineWidthUSBox, 0, 1);
+ }
+Index: lib/kofficeui/koUnitWidgets.cc
+===================================================================
+--- lib/kofficeui/koUnitWidgets.cc (revision 427945)
++++ lib/kofficeui/koUnitWidgets.cc (working copy)
+@@ -25,6 +25,7 @@
+ #include <qpushbutton.h>
+ #include <qlayout.h>
+
++
+ KoUnitDoubleValidator::KoUnitDoubleValidator( KoUnitDoubleBase *base, QObject *parent, const char *name )
+ : KDoubleValidator( parent, name ), m_base( base )
+ {
+@@ -108,7 +109,10 @@
+ }
+
+
+-KoUnitDoubleSpinBox::KoUnitDoubleSpinBox( QWidget *parent, double lower, double upper, double step, double value, KoUnit::Unit unit, unsigned int precision, const char *name )
++// ----------------------------------------------------------------
++
++
++KoBuggyUnitDoubleSpinBox::KoBuggyUnitDoubleSpinBox( QWidget *parent, double lower, double upper, double step, double value, KoUnit::Unit unit, unsigned int precision, const char *name )
+ : KDoubleSpinBox( lower, upper, step, value, precision, parent, name ), KoUnitDoubleBase( unit, precision ),
+ m_lowerInPoints( lower ), m_upperInPoints( upper ), m_stepInPoints( step )
+ {
+@@ -120,7 +124,7 @@
+ }
+
+ void
+-KoUnitDoubleSpinBox::changeValue( double val )
++KoBuggyUnitDoubleSpinBox::changeValue( double val )
+ {
+ KDoubleSpinBox::setValue( val );
+ // TODO: emit valueChanged ONLY if the value was out-of-bounds
+@@ -129,7 +133,7 @@
+ }
+
+ void
+-KoUnitDoubleSpinBox::setUnit( KoUnit::Unit unit )
++KoBuggyUnitDoubleSpinBox::setUnit( KoUnit::Unit unit )
+ {
+ double oldvalue = KoUnit::fromUserValue( KDoubleSpinBox::value(), m_unit );
+ KDoubleSpinBox::setMinValue( KoUnit::toUserValue( m_lowerInPoints, unit ) );
+@@ -140,31 +144,53 @@
+ setSuffix( KoUnit::unitName( unit ).prepend( ' ' ) );
+ }
+
+-double KoUnitDoubleSpinBox::value( void ) const
++double KoBuggyUnitDoubleSpinBox::value( void ) const
+ {
+ return KoUnit::fromUserValue( KDoubleSpinBox::value(), m_unit );
+ }
+
+-void KoUnitDoubleSpinBox::setMinValue( double min )
++void KoBuggyUnitDoubleSpinBox::setMinValue( double min )
+ {
+ m_lowerInPoints = min;
+ KDoubleSpinBox::setMinValue( KoUnit::toUserValue( m_lowerInPoints, m_unit ) );
+ }
+
+-void KoUnitDoubleSpinBox::setMaxValue( double max )
++void KoBuggyUnitDoubleSpinBox::setMaxValue( double max )
+ {
+ m_upperInPoints = max;
+ KDoubleSpinBox::setMaxValue( KoUnit::toUserValue( m_upperInPoints, m_unit ) );
+ }
+
+-void KoUnitDoubleSpinBox::setLineStep( double step )
++void KoBuggyUnitDoubleSpinBox::setLineStep( double step )
+ {
+ m_stepInPoints = step;
+ KDoubleSpinBox::setLineStep( KoUnit::toUserValue( m_stepInPoints, m_unit ) );
+ }
+
+
++// ----------------------------------------------------------------
+
++
++KoUnitDoubleSpinBox2::KoUnitDoubleSpinBox2( QWidget *parent, double lower, double upper, double step, double value, KoUnit::Unit unit, unsigned int precision, const char *name )
++ : KoBuggyUnitDoubleSpinBox( parent, lower, upper, step, value, unit, precision, name )
++{
++ m_validator = new KoUnitDoubleValidator( this, this );
++ QSpinBox::setValidator( m_validator );
++ setAcceptLocalizedNumbers( true );
++ setUnit( unit );
++ changeValue( value );
++}
++
++void
++KoUnitDoubleSpinBox2::changeValue( double val )
++{
++ KDoubleSpinBox::setValue( KoUnit::toUserValue( val, m_unit ) );
++}
++
++
++// ----------------------------------------------------------------
++
++
+ KoUnitDoubleLineEdit::KoUnitDoubleLineEdit( QWidget *parent, double lower, double upper, double value, KoUnit::Unit unit,
+ unsigned int precision, const char *name )
+ : KLineEdit( parent, name ), KoUnitDoubleBase( unit, precision ), m_value( value ), m_lower( lower ), m_upper( upper ),
+Index: lib/CHANGES
+===================================================================
+--- lib/CHANGES (revision 427945)
++++ lib/CHANGES (working copy)
+@@ -1,6 +1,15 @@
++Changes after KOffice-1.4
++=========================
++KOfficeCore:
++- OASIS loading/saving fix for embedded objects
++- Fix crash when pressing Quit in the initial startup dialog (#107911)
++
++KoText:
++- Fix crash when updating a TOC with a table inside it (#107961)
++
+ Changes after KOffice-1.4-beta1
+ ===============================
+-KForumula:
++KFormula:
+ - Disable the matrix actions when the cursor isn't in a matrix element.
+ - Do not crash when exporting to PNG.
+
+Index: lib/kotext/kotextdocument.cc
+===================================================================
+--- lib/kotext/kotextdocument.cc (revision 427945)
++++ lib/kotext/kotextdocument.cc (working copy)
+@@ -135,6 +135,7 @@
+ flow_->clear();
+ while ( fParag ) {
+ KoTextParag *p = fParag->next();
++ fParag->string()->clear(); // avoid the "unregister custom items" code, not needed
+ delete fParag;
+ fParag = p;
+ }
+@@ -142,6 +143,7 @@
+ if ( createEmptyParag )
+ fParag = lParag = createParag( this );
+ selections.clear();
++ customItems.clear();
+ }
+
+ /*
+Index: lib/kotext/kotextparag.cc
+===================================================================
+--- lib/kotext/kotextparag.cc (revision 427945)
++++ lib/kotext/kotextparag.cc (working copy)
+@@ -109,6 +109,17 @@
+ KoTextParag::~KoTextParag()
+ {
+ //kdDebug(32500) << "KoTextParag::~KoTextParag " << this << " id=" << paragId() << endl;
++
++ // #107961: unregister custom items; KoTextString::clear() will delete them
++ const int len = str->length();
++ for ( int i = 0; i < len; ++i ) {
++ KoTextStringChar *c = at( i );
++ if ( doc && c->isCustom() ) {
++ doc->unregisterCustomItem( c->customItem(), this );
++ //removeCustomItem();
++ }
++ }
++
+ delete str;
+ str = 0;
+ // if ( doc && p == doc->minwParag ) {
+Index: filters/kword/ascii/kword_ascii_import.desktop
+===================================================================
+--- filters/kword/ascii/kword_ascii_import.desktop (revision 427945)
++++ filters/kword/ascii/kword_ascii_import.desktop (working copy)
+@@ -5,6 +5,7 @@
+ Name[br]=Sil Enporzh ASCII KWord
+ Name[ca]=Filtre d'importació ASCII per a KWord
+ Name[cs]=KWord ASCII importní filtr
++Name[cy]=Hidlen Fewnforio Ascii KWord
+ Name[da]=KWord ASCII-importfilter
+ Name[de]=ASCII-Importfilter für KWord
+ Name[el]=Φίλτρο εισαγωγής ascii του KWord
+Index: filters/kspread/excel/sidewinder/excel.cpp
+===================================================================
+--- filters/kspread/excel/sidewinder/excel.cpp (revision 427945)
++++ filters/kspread/excel/sidewinder/excel.cpp (working copy)
+@@ -5412,7 +5412,7 @@
+ case 10: valueFormat = "0.00%"; break;
+ case 11: valueFormat = "0.00E+00"; break;
+ case 12: valueFormat = "#?/?"; break;
+- case 13: valueFormat = "#\?\?\/\?\?"; break;
++ case 13: valueFormat = "#\?\?/\?\?"; break;
+ case 14: valueFormat = "M/D/YY"; break;
+ case 15: valueFormat = "D-MMM-YY"; break;
+ case 16: valueFormat = "D-MMM"; break;
+Index: filters/karbon/svg/svgexport.cc
+===================================================================
+--- filters/karbon/svg/svgexport.cc (revision 427945)
++++ filters/karbon/svg/svgexport.cc (working copy)
+@@ -36,8 +36,10 @@
+ #include "vfill.h"
+ #include "vgradient.h"
+ #include "vgroup.h"
++#include "vimage.h"
+ #include "vlayer.h"
+ #include "vpath.h"
++#include "vpattern.h"
+ #include "vsegment.h"
+ #include "vselection.h"
+ #include "vstroke.h"
+@@ -119,11 +121,9 @@
+ "\"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd\">"
+ << endl;
+
+- // add some PR
++ // add some PR. one line is more than enough.
+ *m_defs <<
+- "<!-- This file was created using the SVG export filter from Karbon14, a free vector drawing app. -->" << endl;
+- *m_defs <<
+- "<!-- It is part of koffice, the free, integrated office suite for KDE (http://www.koffice.org/). -->" << endl;
++ "<!-- Created using Karbon14, part of koffice: http://www.koffice.org/karbon -->" << endl;
+
+ *m_defs <<
+ "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"" <<
+@@ -164,7 +164,30 @@
+ *m_body << "</g>" << endl;
+ }
+
++// horrible but at least something gets exported now
++// will need this for patterns
+ void
++SvgExport::visitVImage( VImage& image )
++{
++ *m_body << "<image ";
++ VVisitor::visitVImage( image );
++ *m_body << "x=\"" << "\" ";
++ *m_body << "y=\"" << "\" ";
++ *m_body << "width=\"" << "\" ";
++ *m_body << "height=\"" << "\" ";
++ *m_body << "xlink:href=\"" << "\"";
++ *m_body << " />" << endl;
++}
++
++void
++SvgExport::visitVLayer( VLayer& layer )
++{
++ *m_body << "<g" << getID( &layer ) << ">" << endl;
++ VVisitor::visitVLayer( layer );
++ *m_body << "</g>" << endl;
++}
++
++void
+ SvgExport::visitVPath( VPath& composite )
+ {
+ *m_body << "<path" << getID( &composite );
+@@ -261,9 +284,50 @@
+ *m_defs << "</radialGradient>" << endl;
+ *m_body << "url(#" << uid << ")";
+ }
++ // gah! pointless abbreviation of conical to conic
++ else if( grad.type() == VGradient::conic )
++ {
++ // fake conical grad as radial.
++ // fugly but better than data loss.
++ *m_defs << "<radialGradient id=\"" << uid << "\" ";
++ *m_defs << "gradientUnits=\"userSpaceOnUse\" ";
++ *m_defs << "cx=\"" << grad.origin().x() << "\" ";
++ *m_defs << "cy=\"" << grad.origin().y() << "\" ";
++ *m_defs << "fx=\"" << grad.focalPoint().x() << "\" ";
++ *m_defs << "fy=\"" << grad.focalPoint().y() << "\" ";
++ double r = sqrt( pow( grad.vector().x() - grad.origin().x(), 2 ) + pow( grad.vector().y() - grad.origin().y(), 2 ) );
++ *m_defs << "r=\"" << QString().setNum( r ) << "\" ";
++ if( grad.repeatMethod() == VGradient::reflect )
++ *m_defs << "spreadMethod=\"reflect\" ";
++ else if( grad.repeatMethod() == VGradient::repeat )
++ *m_defs << "spreadMethod=\"repeat\" ";
++ *m_defs << ">" << endl;
++
++ // color stops
++ getColorStops( grad.colorStops() );
++
++ *m_defs << "</radialGradient>" << endl;
++ *m_body << "url(#" << uid << ")";
++ }
+ }
+
++// better than nothing
+ void
++SvgExport::getPattern( const VPattern & patt )
++{
++ QString uid = createUID();
++ *m_defs << "<pattern id=\"" << uid << "\" ";
++ *m_defs << "width=\"" << "\" ";
++ *m_defs << "height=\"" << "\" ";
++ *m_defs << "patternUnits=\"userSpaceOnUse\" ";
++ *m_defs << "patternContentUnits=\"userSpaceOnUse\" ";
++ *m_defs << " />" << endl;
++ // TODO: insert hard work here ;)
++ *m_defs << "</pattern>" << endl;
++ *m_body << "url(#" << uid << ")";
++}
++
++void
+ SvgExport::getFill( const VFill& fill )
+ {
+ *m_body << " fill=\"";
+@@ -271,6 +335,8 @@
+ *m_body << "none";
+ else if( fill.type() == VFill::grad )
+ getGradient( fill.gradient() );
++ else if( fill.type() == VFill::patt )
++ getPattern( fill.pattern() );
+ else
+ getHexColor( m_body, fill.color() );
+ *m_body << "\"";
+Index: filters/karbon/svg/svgexport.h
+===================================================================
+--- filters/karbon/svg/svgexport.h (revision 427945)
++++ filters/karbon/svg/svgexport.h (working copy)
+@@ -35,6 +35,7 @@
+ class VDocument;
+ class VFill;
+ class VGroup;
++class VImage;
+ class VLayer;
+ class VSubpath;
+ class VStroke;
+@@ -55,6 +56,8 @@
+ virtual void visitVPath( VPath& composite );
+ virtual void visitVDocument( VDocument& document );
+ virtual void visitVGroup( VGroup& group );
++ virtual void visitVImage( VImage& image );
++ virtual void visitVLayer( VLayer& layer );
+ virtual void visitVSubpath( VSubpath& path );
+ virtual void visitVText( VText& text );
+
+@@ -62,6 +65,7 @@
+ void getColorStops( const QPtrVector<VColorStop> &colorStops );
+ void getFill( const VFill& fill );
+ void getGradient( const VGradient& grad );
++ void getPattern( const VPattern& patt );
+ void getHexColor( QTextStream *, const VColor& color );
+ QString getID( VObject *obj );
+
+Index: filters/generic_wrapper/generic_filter.desktop
+===================================================================
+--- filters/generic_wrapper/generic_filter.desktop (revision 427945)
++++ filters/generic_wrapper/generic_filter.desktop (working copy)
+@@ -3,6 +3,7 @@
+ Name=Generic KOffice Filter
+ Name[ca]=Filtre genèric de KOffice
+ Name[cs]=Obecný filtr KOffice
++Name[cy]=Hidlen generig KOffice
+ Name[da]=Generisk KOffice-filter
+ Name[de]=Generischer KOffice-Filter
+ Name[el]=Γενικό φίλτρο του KOffice
+Index: krita/plugins/cimg/CImg.h
+===================================================================
+--- krita/plugins/cimg/CImg.h (revision 427945)
++++ krita/plugins/cimg/CImg.h (working copy)
+@@ -5135,7 +5135,7 @@
+ if (ny1<0 || ny0>=dimy()) return *this;
+ if (ny0<0) { nx0-=ny0*(nx1-nx0)/(ny1-ny0); ny0=0; }
+ if (ny1>=dimy()) { nx1+=(ny1-dimy())*(nx0-nx1)/(ny1-ny0); ny1=dimy()-1;}
+- const unsigned int dmax = (unsigned int)cimg::max(std::abs(nx1-nx0),ny1-ny0), whz = width*height*depth;
++ const unsigned int dmax = (unsigned int)cimg::max(std::abs((long int)(nx1-nx0)),(long int)(ny1-ny0)), whz = width*height*depth;
+ const float px = dmax?(nx1-nx0)/(float)dmax:0, py = dmax?(ny1-ny0)/(float)dmax:0;
+ float x = (float)nx0, y = (float)ny0;
+ if (opacity>=1) for (unsigned int t=0; t<=dmax; t++) {
+Index: krita/plugins/tool_polygon/kritatoolpolygon.desktop
+===================================================================
+--- krita/plugins/tool_polygon/kritatoolpolygon.desktop (revision 427945)
++++ krita/plugins/tool_polygon/kritatoolpolygon.desktop (working copy)
+@@ -2,6 +2,7 @@
+ Encoding=UTF-8
+ Name=Polygon Tool
+ Name[br]=Ostilh liestueg
++Name[cy]=Erfyn Polygon
+ Name[da]=Polygonværktøj
+ Name[de]=Polygon-Werkzeug
+ Name[el]=Εργαλείο πολυγώνου
+Index: krita/plugins/tool_polyline/kritatoolpolyline.desktop
+===================================================================
+--- krita/plugins/tool_polyline/kritatoolpolyline.desktop (revision 427945)
++++ krita/plugins/tool_polyline/kritatoolpolyline.desktop (working copy)
+@@ -1,6 +1,7 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+ Name=Polyline Tool
++Name[cy]=Erfyn Polylinell
+ Name[da]=Flerlinjeværktøj
+ Name[de]=Polylinien-Werkzeug
+ Name[el]=Εργαλείο Polyline
+Index: krita/plugins/imagemagick/kritamagick.desktop
+===================================================================
+--- krita/plugins/imagemagick/kritamagick.desktop (revision 427945)
++++ krita/plugins/imagemagick/kritamagick.desktop (working copy)
+@@ -14,7 +14,8 @@
+ Name[nn]=ImageMagick-omslag
+ Name[pt]=Interface para ImageMagick
+ Name[pt_BR]=Wrapper do ImageMagick
+-Name[ru]=Интерфейс к ImageMagick
++Name[ru]=Оболочка к ImageMagick
++Name[sl]=Ovojnik za ImageMagick
+ Name[sr]=Омотач ImageMagick-а
+ Name[sr@Latn]=Omotač ImageMagick-a
+ Name[sv]=ImageMagick-gränssnitt
+@@ -35,7 +36,7 @@
+ Comment[nn]=ImageMagick-basert import, eksport og filkonvertering
+ Comment[pt]=Importação/exportação e conversão de ficheiro com o ImageMagick
+ Comment[pt_BR]=Conversão de arquivos e filtro de importação/exportação baseado no ImageMagick
+-Comment[ru]=Фильтр импорта/экспорта рисунков посредством ImageMagick
++Comment[ru]=Фильтр импорта/экспорта и преобразования формата посредством ImageMagick
+ Comment[sr]=Увоз, извоз и конверзија фајлова помоћу ImageMagick-а
+ Comment[sr@Latn]=Uvoz, izvoz i konverzija fajlova pomoću ImageMagick-a
+ Comment[sv]=ImageMagick-baserad import, export och filkonvertering
+Index: krita/plugins/tool_crop/kritatoolcrop.desktop
+===================================================================
+--- krita/plugins/tool_crop/kritatoolcrop.desktop (revision 427945)
++++ krita/plugins/tool_crop/kritatoolcrop.desktop (working copy)
+@@ -16,7 +16,7 @@
+ Name[nn]=Beskjæringsverktøy
+ Name[pt]=Ferramenta de Recorte
+ Name[pt_BR]=Ferramenta de Recorte
+-Name[ru]=Инструмент обрезки
++Name[ru]=Обрезка
+ Name[sl]=Orodje za obrezavo
+ Name[sr]=Алат за сасецање
+ Name[sr@Latn]=Alat za sasecanje
+Index: krita/plugins/selectiontools/kritaselectiontools.desktop
+===================================================================
+--- krita/plugins/selectiontools/kritaselectiontools.desktop (revision 427945)
++++ krita/plugins/selectiontools/kritaselectiontools.desktop (working copy)
+@@ -2,12 +2,14 @@
+ Encoding=UTF-8
+ Name=Selection Tools
+ Name[ca]=Eines de selecció
++Name[cy]=Offer Detholi
+ Name[da]=Markeringsværktøj
+ Name[de]=Auswahlwerkzeuge
+ Name[el]=Εργαλεία επιλογής
+ Name[es]=Herramientas de selección
+ Name[et]=Valikutööriistad
+ Name[fr]=Outils de sélection
++Name[ga]=Uirlisí Roghnúcháin
+ Name[he]=כלי בחירה
+ Name[hu]=Kiválasztó eszközök
+ Name[it]=Strumenti di selezione
+Index: krita/plugins/tool_star/kritatoolstar.desktop
+===================================================================
+--- krita/plugins/tool_star/kritatoolstar.desktop (revision 427945)
++++ krita/plugins/tool_star/kritatoolstar.desktop (working copy)
+@@ -2,6 +2,7 @@
+ Encoding=UTF-8
+ Name=Star Tool
+ Name[br]=Ostilh steredenn
++Name[cy]=Erfyn Seren
+ Name[da]=Stjerneværktøj
+ Name[de]=Sterne-Werkzeug
+ Name[el]=Εργαλείο αστέρα
+@@ -18,6 +19,7 @@
+ Name[pt]=Ferramenta de Estrelas
+ Name[pt_BR]=Ferramenta Estrela
+ Name[ru]=Звёзды
++Name[sl]=Zvezdno orodje
+ Name[sr]=Алат за звезде
+ Name[sr@Latn]=Alat za zvezde
+ Name[sv]=Stjärnverktyg
+Index: krita/plugins/tool_transform/kritatooltransform.desktop
+===================================================================
+--- krita/plugins/tool_transform/kritatooltransform.desktop (revision 427945)
++++ krita/plugins/tool_transform/kritatooltransform.desktop (working copy)
+@@ -16,7 +16,7 @@
+ Name[nn]=Beskjæringsverktøy
+ Name[pt]=Ferramenta de Recorte
+ Name[pt_BR]=Ferramenta de Recorte
+-Name[ru]=Инструмент обрезки
++Name[ru]=Обрезка
+ Name[sl]=Orodje za obrezavo
+ Name[sr]=Алат за сасецање
+ Name[sr@Latn]=Alat za sasecanje
+Index: krita/krita.desktop
+===================================================================
+--- krita/krita.desktop (revision 427945)
++++ krita/krita.desktop (working copy)
+@@ -22,6 +22,7 @@
+ GenericName[fa]=برنامه دستکاری تصویر
+ GenericName[fi]=Kuvienmuokkausohjelma
+ GenericName[fr]=Logiciel de manipulation d'images
++GenericName[ga]=Clár Ionramhála na nÍomhánna
+ GenericName[he]=תוכנית לטיפול בתמונות
+ GenericName[hr]=Program za obradu slika
+ GenericName[hu]=Képszerkesztő
+@@ -39,7 +40,7 @@
+ GenericName[pt]=Programa de Manipulação de Imagens
+ GenericName[pt_BR]=Manipulador de Imagens
+ GenericName[ro]=Program de procesare imagini
+-GenericName[ru]=Редактор графических изображений
++GenericName[ru]=Программа редактирования изображений
+ GenericName[sk]=Program pre úpravu obrázkov
+ GenericName[sl]=Program za obdelavo slik
+ GenericName[sr]=Програм за уређивање слика
+Index: krita/core/kis_paint_device.cc
+===================================================================
+--- krita/core/kis_paint_device.cc (revision 427945)
++++ krita/core/kis_paint_device.cc (working copy)
+@@ -791,24 +791,23 @@
+ QRect r = m_selection -> selectedRect();
+ r = r.normalize();
+
++ for (Q_INT32 y = 0; y < r.height(); y++) {
++ KisHLineIterator devIt = createHLineIterator(r.x(), r.y() + y, r.width(), true);
++ KisHLineIterator selectionIt = m_selection -> createHLineIterator(r.x(), r.y() + y, r.width(), false);
+
+- KisRectIterator devIt = createRectIterator(r.x(), r.y(), r.width(), r.height(), true);
+- KisRectIterator selectionIt = m_selection -> createRectIterator(r.x(), r.y(), r.width(), r.height(), false);
++ while (!devIt.isDone()) {
++ KisPixel p = toPixel(devIt.rawData());
++ KisPixel s = m_selection -> toPixel(selectionIt.rawData());
++ Q_UINT16 p_alpha, s_alpha;
++ p_alpha = p.alpha();
++ s_alpha = MAX_SELECTED - s.alpha();
+
+- while (!devIt.isDone()) {
+- KisPixel p = toPixel(devIt.rawData());
+- KisPixel s = m_selection -> toPixel(selectionIt.rawData());
+- Q_UINT16 p_alpha, s_alpha;
+- p_alpha = p.alpha();
+- s_alpha = MAX_SELECTED - s.alpha();
+-
+- p.alpha() = (Q_UINT8) ((p_alpha * s_alpha) >> 8);
++ p.alpha() = (Q_UINT8) ((p_alpha * s_alpha) >> 8);
+
+- ++devIt;
+- ++selectionIt;
++ ++devIt;
++ ++selectionIt;
++ }
+ }
+-
+-
+ }
+
+ void KisPaintDevice::applySelectionMask(KisSelectionSP mask)
+Index: krita/core/kis_selection_manager.cc
+===================================================================
+--- krita/core/kis_selection_manager.cc (revision 427945)
++++ krita/core/kis_selection_manager.cc (working copy)
+@@ -319,20 +319,22 @@
+
+ // Apply selection mask.
+
+- KisRectIterator layerIt = clip -> createRectIterator(0, 0, r.width(), r.height(), true);
+- KisRectIterator selectionIt = selection -> createRectIterator(r.x(), r.y(), r.width(), r.height(), false);
++ for (Q_INT32 y = 0; y < r.height(); y++) {
++ KisHLineIterator layerIt = clip -> createHLineIterator(0, y, r.width(), true);
++ KisHLineIterator selectionIt = selection -> createHLineIterator(r.x(), r.y() + y, r.width(), false);
+
+- while (!layerIt.isDone()) {
+- KisPixel p = clip -> toPixel(layerIt.rawData());
+- KisPixel s = selection -> toPixel(selectionIt.rawData());
+- Q_UINT16 p_alpha, s_alpha;
+- p_alpha = p.alpha();
+- s_alpha = s.alpha();
+-
+- p.alpha() = (Q_UINT8) ((p_alpha * s_alpha) >> 8);
+-
+- ++layerIt;
+- ++selectionIt;
++ while (!layerIt.isDone()) {
++ KisPixel p = clip -> toPixel(layerIt.rawData());
++ KisPixel s = selection -> toPixel(selectionIt.rawData());
++ Q_UINT16 p_alpha, s_alpha;
++ p_alpha = p.alpha();
++ s_alpha = s.alpha();
++
++ p.alpha() = (Q_UINT8) ((p_alpha * s_alpha) >> 8);
++
++ ++layerIt;
++ ++selectionIt;
++ }
+ }
+
+ // kdDebug() << "Selection copied: "
+Index: krita/core/tiles/kis_tiledrectiterator.cc
+===================================================================
+--- krita/core/tiles/kis_tiledrectiterator.cc (revision 427945)
++++ krita/core/tiles/kis_tiledrectiterator.cc (working copy)
+@@ -66,7 +66,8 @@
+ m_xInTile = m_leftInTile;
+ m_yInTile = m_topInTile;
+
+- fetchTileData(m_col, m_row);
++ if (! m_beyondEnd)
++ fetchTileData(m_col, m_row);
+ m_offset = m_pixelSize * (m_yInTile * KisTile::WIDTH + m_xInTile);
+ }
+
+Index: krita/core/builder/kis_image_magick_converter.cc
+===================================================================
+--- krita/core/builder/kis_image_magick_converter.cc (revision 427945)
++++ krita/core/builder/kis_image_magick_converter.cc (working copy)
+@@ -64,10 +64,10 @@
+ */
+ KisStrategyColorSpaceSP getColorSpaceForColorType(ColorspaceType type) {
+ if (type == GRAYColorspace) {
+- KisColorSpaceRegistry::instance() -> get(KisID("CMYK", ""));
++ return KisColorSpaceRegistry::instance() -> get(KisID("GRAYA", ""));
+ }
+ else if (type == CMYKColorspace) {
+- return KisColorSpaceRegistry::instance() -> get(KisID("GRAYA", ""));
++ return KisColorSpaceRegistry::instance() -> get(KisID("CMYK", ""));
+ }
+ else if (type == RGBColorspace || type == sRGBColorspace || type == TransparentColorspace) {
+ return KisColorSpaceRegistry::instance() -> get(KisID("RGBA", ""));
+Index: krita/core/kis_view.cc
+===================================================================
+--- krita/core/kis_view.cc (revision 427945)
++++ krita/core/kis_view.cc (working copy)
+@@ -218,8 +218,7 @@
+ {
+ delete m_dcop;
+ delete m_dockerManager;
+-
+-
++ delete m_selectionManager;
+ }
+
+ DCOPObject* KisView::dcopObject()
+Index: krita/core/kis_iterators_pixel.h
+===================================================================
+--- krita/core/kis_iterators_pixel.h (revision 427945)
++++ krita/core/kis_iterators_pixel.h (working copy)
+@@ -37,6 +37,7 @@
+ public:
+ KisHLineIteratorPixel( KisPaintDevice *ndevice, KisDataManager *dm, KisDataManager *sel_dm, Q_INT32 x , Q_INT32 y , Q_INT32 w, Q_INT32 offsetx, Q_INT32 offsety, bool writable);
+
++ ~KisHLineIteratorPixel() { delete m_selectionIterator; }
+ inline KisHLineIteratorPixel & operator ++() { KisHLineIterator::operator++(); advance(1); return *this;}
+
+ /// Advances a number of pixels until it reaches the end of the line
+@@ -52,6 +53,7 @@
+ {
+ public:
+ KisVLineIteratorPixel( KisPaintDevice *ndevice, KisDataManager *dm, KisDataManager *sel_dm, Q_INT32 xpos , Q_INT32 ypos , Q_INT32 height, Q_INT32 offsetx, Q_INT32 offsety, bool writable);
++ ~KisVLineIteratorPixel() { delete m_selectionIterator; }
+
+ inline KisVLineIteratorPixel & operator ++() { KisVLineIterator::operator++(); advance(1); return *this;}
+
+@@ -65,6 +67,7 @@
+ {
+ public:
+ KisRectIteratorPixel( KisPaintDevice *ndevice, KisDataManager *dm, KisDataManager *sel_dm, Q_INT32 x, Q_INT32 y, Q_INT32 w, Q_INT32 h, Q_INT32 offsetx, Q_INT32 offsety, bool writable);
++ ~KisRectIteratorPixel() { delete m_selectionIterator; }
+
+ inline KisRectIteratorPixel & operator ++() { KisRectIterator::operator++(); advance(1); return *this;}
+
+Index: krita/paintops/kritadefaultpaintops.desktop
+===================================================================
+--- krita/paintops/kritadefaultpaintops.desktop (revision 427945)
++++ krita/paintops/kritadefaultpaintops.desktop (working copy)
+@@ -15,7 +15,7 @@
+ Name[nn]=Standard måleoperasjonar
+ Name[pt]=Operações de Pintura Predefinidas
+ Name[pt_BR]=Operações de pintura padrão
+-Name[ru]=Стандартные действия рисования
++Name[ru]=Стандартные операции рисования
+ Name[sr]=Подразумеване сликарске операције
+ Name[sr@Latn]=Podrazumevane slikarske operacije
+ Name[sv]=Förvalda målningsoperationer
+@@ -36,7 +36,7 @@
+ Comment[nn]=Standard måleoperasjonar
+ Comment[pt]=Operações de pintura predefinidas
+ Comment[pt_BR]=Operações de pintura padrão
+-Comment[ru]=Действия рисования по умолчанию
++Comment[ru]=Операции рисования по умолчанию
+ Comment[sr]=Подразумеване сликарске операције
+ Comment[sr@Latn]=Podrazumevane slikarske operacije
+ Comment[sv]=Förvalda ritåtgärder
+Index: krita/modules/colorspace_ws/kritawsplugin.desktop
+===================================================================
+--- krita/modules/colorspace_ws/kritawsplugin.desktop (revision 427945)
++++ krita/modules/colorspace_ws/kritawsplugin.desktop (working copy)
+@@ -13,7 +13,7 @@
+ Name[nn]=Fargemodell for vått lerret
+ Name[pt]=Modelo de Cores de Tela Molhado e Pegajoso
+ Name[pt_BR]=Modelo de cores de tela Molhada & Pegajosa
+-Name[ru]=Цветовая модель влажности и прилипания
++Name[ru]=Цветовая модель с параметрами влажности и прилипания
+ Name[sr]=Модел боја мокрог и лепљивог платна
+ Name[sr@Latn]=Model boja mokrog i lepljivog platna
+ Name[sv]=Våt och klibbig dukfärgmodell
+Index: krita/modules/colorspace_rgb/templates/transparent_1280x1024.desktop
+===================================================================
+--- krita/modules/colorspace_rgb/templates/transparent_1280x1024.desktop (revision 427945)
++++ krita/modules/colorspace_rgb/templates/transparent_1280x1024.desktop (working copy)
+@@ -4,6 +4,7 @@
+ URL=.source/transparent_1280x1024.kra
+ Icon=template_rgb_empty
+ Name=Transparent 1280 x 1024
++Name[br]=Treuzwelus 1280 x 1024
+ Name[da]=Gennemsigtig 1280 x 1024
+ Name[el]=Διαφανής 1280 x 1024
+ Name[es]=1280 x 1024 transparente
+@@ -16,7 +17,7 @@
+ Name[nn]=Gjennomsiktig 1280 × 1024
+ Name[pt]=Transparente 1280 x 1024
+ Name[pt_BR]=Transparente de 1280 x 1024
+-Name[ru]=Прозрачный 1280x1024
++Name[ru]=Рисунок 1280x1024, прозрачный фон
+ Name[sl]=Prosojna 1280 x 1024
+ Name[sr]=Провидна 1280 x 1024
+ Name[sr@Latn]=Providna 1280 x 1024
+@@ -39,7 +40,7 @@
+ Comment[nn]=Lagar eit gjennomsiktig bilete på 1280 × 1024 pikslar.
+ Comment[pt]=Cria uma imagem transparente com 1280 x 1024 pontos.
+ Comment[pt_BR]=Cria uma imagem transparente de 1280 x 1024 pixels.
+-Comment[ru]=Прозрачное, 1280x1024.
++Comment[ru]=Рисунок 1280x1024, прозрачный фон.
+ Comment[sl]=Ustvari prosojno sliko velikosti 1280 x 1024 točk.
+ Comment[sr]=Прави провидну слику са 1280 x 1024 пиксела.
+ Comment[sr@Latn]=Pravi providnu sliku sa 1280 x 1024 piksela.
+Index: krita/modules/colorspace_rgb/templates/transparent_640x480.desktop
+===================================================================
+--- krita/modules/colorspace_rgb/templates/transparent_640x480.desktop (revision 427945)
++++ krita/modules/colorspace_rgb/templates/transparent_640x480.desktop (working copy)
+@@ -4,6 +4,7 @@
+ URL=.source/transparent_1600x1200.kra
+ Icon=template_rgb_empty
+ Name=Transparent 640 x 480
++Name[br]=Treuzwelus 640 x 480
+ Name[da]=Gennemsigtig 640 x 480
+ Name[el]=Διαφανής 640 x 480
+ Name[es]=640 x 480 transparente
+@@ -16,7 +17,7 @@
+ Name[nn]=Gjennomsiktig 640 × 480
+ Name[pt]=Transparente 640 x 480
+ Name[pt_BR]=Transparente de 640 x 480
+-Name[ru]=Прозрачный 640x480
++Name[ru]=Рисунок 640x480, прозрачный фон
+ Name[sl]=Prosojna 640 x 480
+ Name[sr]=Провидна 640 x 480
+ Name[sr@Latn]=Providna 640 x 480
+@@ -39,7 +40,7 @@
+ Comment[nn]=Lagar eit gjennomsiktig bilete på 640 × 480 pikslar.
+ Comment[pt]=Cria uma imagem transparente com 640 x 480 pontos.
+ Comment[pt_BR]=Cria uma imagem transparente de 640 x 480 pixels.
+-Comment[ru]=Прозрачное, 640x480.
++Comment[ru]=Рисунок 640x480, прозрачный фон.
+ Comment[sl]=Ustvari prosojno sliko velikosti 640 x 480 točk.
+ Comment[sr]=Прави провидну слику са 640 x 480 пиксела.
+ Comment[sr@Latn]=Pravi providnu sliku sa 640 x 480 piksela.
+Index: krita/modules/colorspace_rgb/templates/white_1600x1200.desktop
+===================================================================
+--- krita/modules/colorspace_rgb/templates/white_1600x1200.desktop (revision 427945)
++++ krita/modules/colorspace_rgb/templates/white_1600x1200.desktop (working copy)
+@@ -10,6 +10,7 @@
+ Name[es]=1600 x 1200 blanco
+ Name[et]=Valge 1600 x 1200
+ Name[fr]=Image blanche 1600 x 1200
++Name[ga]=Bán 1600×1200
+ Name[he]=לבן ‎1600 x 1200
+ Name[hu]=Fehér 1600 x 1200
+ Name[it]=Bianco 1600 x 1200
+@@ -17,7 +18,7 @@
+ Name[nn]=Kvitt 1600 × 1200
+ Name[pt]=Branca 1600 x 1200
+ Name[pt_BR]=1600 x 1200 em Branco
+-Name[ru]=Белый 1600x1200
++Name[ru]=Рисунок 1600x1200, белый фон
+ Name[sl]=Bela 1600 x 1200
+ Name[sr]=Бела 1600 x 1200
+ Name[sr@Latn]=Bela 1600 x 1200
+@@ -39,7 +40,7 @@
+ Comment[nn]=Lagar eit kvitt RGB-bilete på 1600 × 1200 pikslar.
+ Comment[pt]=Cria uma imagem RGB branca com 1600 x 1200 pontos.
+ Comment[pt_BR]=Cria uma imagem RGB em branco de 1600 x 1200 pixels.
+-Comment[ru]=Белое в формате RGB, 1600x1200.
++Comment[ru]=Рисунок RGB 1600x1200, белый фон.
+ Comment[sl]=Ustvari belo sliko RGB velikosti 1600 x 1200 točk.
+ Comment[sr]=Прави белу RGB слику са 1600 x 1200 пиксела.
+ Comment[sr@Latn]=Pravi belu RGB sliku sa 1600 x 1200 piksela.
+Index: krita/modules/colorspace_rgb/templates/white_1024x768.desktop
+===================================================================
+--- krita/modules/colorspace_rgb/templates/white_1024x768.desktop (revision 427945)
++++ krita/modules/colorspace_rgb/templates/white_1024x768.desktop (working copy)
+@@ -13,6 +13,7 @@
+ Name[es]=1024 x 768 blanco
+ Name[et]=Valge 1024 x 768
+ Name[fr]=Image blanche 1024 x 768
++Name[ga]=Bán 1024×768
+ Name[he]=לבן ‎1024 x 768
+ Name[hu]=Fehér 1024 x 768
+ Name[it]=Bianco 1024 x 768
+@@ -21,7 +22,7 @@
+ Name[nn]=Kvitt 1024 × 768
+ Name[pt]=Branca 1024 x 768
+ Name[pt_BR]=1024 x 768 em Branco
+-Name[ru]=Белый 1024x768
++Name[ru]=Рисунок 1024x768, белый фон
+ Name[sl]=Bela 1024 x 768
+ Name[sr]=Бела 1024 x 768
+ Name[sr@Latn]=Bela 1024 x 768
+@@ -46,7 +47,7 @@
+ Comment[nn]=Lagar eit kvitt RGB-bilete på 1024 × 768 pikslar.
+ Comment[pt]=Cria uma imagem RGB branca com 1024 x 768 pontos.
+ Comment[pt_BR]=Cria uma imagem RGB em branco de 1024 x 768 pixéis.
+-Comment[ru]=Белое в формате RGB, 1024x768.
++Comment[ru]=Рисунок RGB 1024x768, белый фон.
+ Comment[sl]=Ustvari belo sliko RGB velikosti 1024 x 768 točk.
+ Comment[sr]=Прави белу RGB слику са 1024 x 768 пиксела.
+ Comment[sr@Latn]=Pravi belu RGB sliku sa 1024 x 768 piksela.
+Index: krita/modules/colorspace_rgb/templates/white_1280x1024.desktop
+===================================================================
+--- krita/modules/colorspace_rgb/templates/white_1280x1024.desktop (revision 427945)
++++ krita/modules/colorspace_rgb/templates/white_1280x1024.desktop (working copy)
+@@ -10,6 +10,7 @@
+ Name[es]=1280 x 1024 blanco
+ Name[et]=Valge 1280 x 1024
+ Name[fr]=Image blanche 1280 x 1024
++Name[ga]=Bán 1280×1024
+ Name[he]=לבן ‎1280 x 1024
+ Name[hu]=Fehér 1280 x 1024
+ Name[it]=Bianco 1280 x 1024
+@@ -17,7 +18,7 @@
+ Name[nn]=Kvitt 1280 × 1024
+ Name[pt]=Branca 1280 x 1024
+ Name[pt_BR]=1280 x 1024 em Branco
+-Name[ru]=Белый 1280x1024
++Name[ru]=Рисунок 1280x1024, белый фон
+ Name[sl]=Bela 1280 x 1024
+ Name[sr]=Бела 1280 x 1024
+ Name[sr@Latn]=Bela 1280 x 1024
+@@ -39,7 +40,7 @@
+ Comment[nn]=Lagar eit kvitt RGB-bilete på 1280 × 1024 pikslar.
+ Comment[pt]=Cria uma imagem RGB branca com 1280 x 1024 pontos.
+ Comment[pt_BR]=Cria uma imagem RGB em branco de 1280 x 1024 pixels.
+-Comment[ru]=Белое в формате RGB, 1280x1024.
++Comment[ru]=Рисунок RGB 1280x1024, белый фон.
+ Comment[sl]=Ustvari belo sliko RGB velikosti 1280 x 1024 točk.
+ Comment[sr]=Прави белу RGB слику са 1280 x 1024 пиксела.
+ Comment[sr@Latn]=Pravi belu RGB sliku sa 1280 x 1024 piksela.
+Index: krita/modules/colorspace_rgb/templates/white_640x480.desktop
+===================================================================
+--- krita/modules/colorspace_rgb/templates/white_640x480.desktop (revision 427945)
++++ krita/modules/colorspace_rgb/templates/white_640x480.desktop (working copy)
+@@ -13,6 +13,7 @@
+ Name[es]=640x480 blanco
+ Name[et]=Valge 640x480
+ Name[fr]=Image blanche 640 x 480
++Name[ga]=Bán 640×480
+ Name[he]=לבן 640x480
+ Name[hu]=Fehér 640 x 480
+ Name[it]=Bianco 640x480
+@@ -21,7 +22,7 @@
+ Name[nn]=Kvitt 640 × 480
+ Name[pt]=Branca 640x480
+ Name[pt_BR]=640x480 em Branco
+-Name[ru]=Белый 640x480
++Name[ru]=Рисунок 640x480, белый фон
+ Name[sl]=Bela 640x480
+ Name[sr]=Бела 640x480
+ Name[sr@Latn]=Bela 640x480
+@@ -42,11 +43,11 @@
+ Comment[hu]=Létrehoz egy 640 x 480 képpontos fehér RGB képet.
+ Comment[it]=Crea un'immagine RGB bianca di 640 x 480 pixel.
+ Comment[nb]=Lager et hvitt bilde på 640 x 480 piksler.
+-Comment[nl]=Maakt een witte RGB-afbeelding aan van 540 x 480 pixels.
++Comment[nl]=Maakt een witte RGB-afbeelding aan van 640 x 480 pixels.
+ Comment[nn]=Lagar eit kvitt RGB-bilete på 640 × 480 pikslar.
+ Comment[pt]=Cria uma imagem RGB branca com 640 x 480 pontos.
+ Comment[pt_BR]=Cria uma imagem RGB em branco de 640 x 480 pixéis.
+-Comment[ru]=Белое в формате RGB, 640x480.
++Comment[ru]=Рисунок RGB 640x480, белый фон.
+ Comment[sl]=Ustvari belo sliko RGB velikosti 640 x 480 točk.
+ Comment[sr]=Прави белу RGB слику са 640 x 480 пиксела.
+ Comment[sr@Latn]=Pravi belu RGB sliku sa 640 x 480 piksela.
+Index: krita/modules/colorspace_rgb/templates/transparent_1600x1200.desktop
+===================================================================
+--- krita/modules/colorspace_rgb/templates/transparent_1600x1200.desktop (revision 427945)
++++ krita/modules/colorspace_rgb/templates/transparent_1600x1200.desktop (working copy)
+@@ -5,6 +5,7 @@
+ Icon=template_rgb_empty
+ Name=Transparent 1600 x 1200
+ Name[bg]=Прозрачно 1600 x 1200
++Name[br]=Treuzwelus 1600 x 1200
+ Name[da]=Gennemsigtig 1600 x 1200
+ Name[el]=Διαφανής 1600 x 1200
+ Name[es]=1600 x 1200 transparente
+@@ -18,7 +19,7 @@
+ Name[nn]=Gjennomsiktig 1600 × 1200
+ Name[pt]=Transparente 1600 x 1200
+ Name[pt_BR]=Transparente de 1600 x 1200
+-Name[ru]=Прозрачный 1600x1200
++Name[ru]=Рисунок 1600x1200, прозрачный фон
+ Name[sl]=Prosojna 1600 x 1200
+ Name[sr]=Провидна 1600 x 1200
+ Name[sr@Latn]=Providna 1600 x 1200
+@@ -44,7 +45,7 @@
+ Comment[nn]=Lagar eit gjennomsiktig bilete på 1600 × 1200 pikslar.
+ Comment[pt]=Cria uma imagem transparente com 1600 x 1200 pontos.
+ Comment[pt_BR]=Cria uma imagem transparente de 1600 x 1200 pixéis.
+-Comment[ru]=Прозрачное, 1600x1200.
++Comment[ru]=Рисунок 1600x1200, прозрачный фон.
+ Comment[sl]=Ustvari prosojno sliko velikosti 1600 x 1200 točk.
+ Comment[sr]=Прави провидну слику са 1600 x 1200 пиксела.
+ Comment[sr@Latn]=Pravi providnu sliku sa 1600 x 1200 piksela.
+Index: krita/modules/colorspace_rgb/templates/transparent_1024x768.desktop
+===================================================================
+--- krita/modules/colorspace_rgb/templates/transparent_1024x768.desktop (revision 427945)
++++ krita/modules/colorspace_rgb/templates/transparent_1024x768.desktop (working copy)
+@@ -4,6 +4,7 @@
+ URL=.source/transparent_1024x768.kra
+ Icon=template_rgb_empty
+ Name=Transparent 1024 x 768
++Name[br]=Treuzwelus 1024 x 768
+ Name[da]=Gennemsigtig 1024 x 768
+ Name[el]=Διαφανής 1024 x 768
+ Name[es]=1024 x 768 transparente
+@@ -16,7 +17,7 @@
+ Name[nn]=Gjennomsiktig 1024 × 768
+ Name[pt]=Transparente 1024 x 768
+ Name[pt_BR]=Transparente de 1024 x 768
+-Name[ru]=Прозрачный 1024x768
++Name[ru]=Рисунок 1024x768, прозрачный фон
+ Name[sl]=Prosojna 1024 x 768
+ Name[sr]=Провидна 1024 x 768
+ Name[sr@Latn]=Providna 1024 x 768
+@@ -39,7 +40,7 @@
+ Comment[nn]=Lagar eit gjennomsiktig bilete på 1024 × 768 pikslar.
+ Comment[pt]=Cria uma imagem transparente com 1024 x 768 pontos.
+ Comment[pt_BR]=Cria uma imagem transparente de 1024 x 768 pixels.
+-Comment[ru]=Прозрачное, 1024x768.
++Comment[ru]=Рисунок 1024x768, прозрачный фон.
+ Comment[sl]=Ustvari prosojno sliko velikosti 1024 x 768 točk.
+ Comment[sr]=Прави провидну слику са 1024 x 768 пиксела.
+ Comment[sr@Latn]=Pravi providnu sliku sa 1024 x 768 piksela.
+Index: krita/modules/krita_module.desktop
+===================================================================
+--- krita/modules/krita_module.desktop (revision 427945)
++++ krita/modules/krita_module.desktop (working copy)
+@@ -19,6 +19,7 @@
+ Comment[pt]=Módulo de funcionalidade nuclear para o Krita
+ Comment[pt_BR]=Módulo de funcionalidades principais para o Krita
+ Comment[ru]=Движок Krita
++Comment[sl]=Modul za osnovne zmožnosti Krite
+ Comment[sr]=Модел основне функционалности за Krita-у
+ Comment[sr@Latn]=Model osnovne funkcionalnosti za Krita-u
+ Comment[sv]=Modul med kärnfunktioner för Krita
+Index: krita/modules/colorspace_gray/templates/white_640x480.desktop
+===================================================================
+--- krita/modules/colorspace_gray/templates/white_640x480.desktop (revision 427945)
++++ krita/modules/colorspace_gray/templates/white_640x480.desktop (working copy)
+@@ -12,6 +12,7 @@
+ Name[es]=Fondo blanco, 640 x 480
+ Name[et]=Valge taust, 640 x 480
+ Name[fr]=Fond blanc 640 x 480
++Name[ga]=Cúlra Bán, 640×480
+ Name[he]=רקע לבן, ‎640 x 480
+ Name[hu]=Fehér háttér, 640 x 480
+ Name[it]=Sfondo bianco, 640 x 480
+@@ -20,7 +21,7 @@
+ Name[nn]=Kvit bakgrunn, 640 × 480
+ Name[pt]=Fundo Branco, 640 x 480
+ Name[pt_BR]=Fundo em branco, 640 x 480
+-Name[ru]=Белый фон, 640x480
++Name[ru]=Рисунок 640x480, белый фон
+ Name[sl]=Belo ozadje, 640 x 480
+ Name[sr]=Бела позадина, 640 x 480
+ Name[sr@Latn]=Bela pozadina, 640 x 480
+@@ -46,7 +47,7 @@
+ Comment[nn]=Lagar eit bilete på 640 × 480 pikslar med ein kvit bakgrunn.
+ Comment[pt]=Cria uma imagem de 640 x 480 pontos com um fundo branco.
+ Comment[pt_BR]=Cria uma imagem de 640 x 480 pixéis com um fundo branco.
+-Comment[ru]=Белое, 640x480.
++Comment[ru]=Рисунок 640x480, белый фон.
+ Comment[sl]=Ustvari sliko velikosti 640 x 480 točk z belim ozadjem.
+ Comment[sr]=Прави слику од 640 x 480 пиксела са белом позадином.
+ Comment[sr@Latn]=Pravi sliku od 640 x 480 piksela sa belom pozadinom.
+Index: krita/modules/colorspace_cmyk/kritacmykplugin.desktop
+===================================================================
+--- krita/modules/colorspace_cmyk/kritacmykplugin.desktop (revision 427945)
++++ krita/modules/colorspace_cmyk/kritacmykplugin.desktop (working copy)
+@@ -46,7 +46,7 @@
+ Comment[nn]=Fargemodell for CMYK-bilete med 8 bit per kanal
+ Comment[pt]=Modelo de cor para imagens CMYK com 8 bits por canal
+ Comment[pt_BR]=Modelo de cor para imagens com 8-bits de canal CMYK
+-Comment[ru]=Цветовая модель для изображений в CMYK (болотный, пурпурный, жёлтый, чёрный) 8-бит/канал
++Comment[ru]=Цветовая модель для изображений в CMYK (циан, пурпурный, жёлтый, чёрный) 8-бит/канал
+ Comment[sl]=Barvni model za slike CMYK z 8 biti/kanal
+ Comment[sr]=Модел боја за CMYK слике са 8 битова/каналу
+ Comment[sr@Latn]=Model boja za CMYK slike sa 8 bitova/kanalu
+Index: krita/modules/colorspace_cmyk/templates/white_2000x800.desktop
+===================================================================
+--- krita/modules/colorspace_cmyk/templates/white_2000x800.desktop (revision 427945)
++++ krita/modules/colorspace_cmyk/templates/white_2000x800.desktop (working copy)
+@@ -12,6 +12,7 @@
+ Name[es]=2000 x 800 blanco
+ Name[et]=Valge 2000 x 800
+ Name[fr]=Image blanche 2000 x 800
++Name[ga]=Bán 2000×800
+ Name[he]=לבן ‎2000 x 800
+ Name[hu]=fehér 2000 x 800
+ Name[it]=Bianco 2000 x 800
+@@ -45,7 +46,7 @@
+ Comment[nn]=Lagar eit kvitt CMYK-bilete på 2000 × 800 pikslar.
+ Comment[pt]=Cria uma imagem CMYK branca com 2000 x 800 pontos.
+ Comment[pt_BR]=Cria uma imagem CMYK em branco de 2000 x 800 pixéis.
+-Comment[ru]=Белое в формате CMYK, 2000x800.
++Comment[ru]=Рисунок CMYK, 2000x800, белый фон.
+ Comment[sl]=Ustvari belo sliko CMYK velikosti 2000 x 800 točk.
+ Comment[sr]=Прави белу CMYK слику са 2000 x 800 пиксела.
+ Comment[sr@Latn]=Pravi belu CMYK sliku sa 2000 x 800 piksela.
+Index: krita/data/krita_module.desktop
+===================================================================
+--- krita/data/krita_module.desktop (revision 427945)
++++ krita/data/krita_module.desktop (working copy)
+@@ -19,6 +19,7 @@
+ Comment[pt]=Módulo de funcionalidade nuclear para o Krita
+ Comment[pt_BR]=Módulo de funcionalidades principais para o Krita
+ Comment[ru]=Движок Krita
++Comment[sl]=Modul za osnovne zmožnosti Krite
+ Comment[sr]=Модел основне функционалности за Krita-у
+ Comment[sr@Latn]=Model osnovne funkcionalnosti za Krita-u
+ Comment[sv]=Modul med kärnfunktioner för Krita
+Index: krita/data/krita_paintop.desktop
+===================================================================
+--- krita/data/krita_paintop.desktop (revision 427945)
++++ krita/data/krita_paintop.desktop (working copy)
+@@ -17,6 +17,7 @@
+ Comment[pt]=Módulo de operações de pintura do Krita
+ Comment[pt_BR]=plugin de operação de pintura para o Krita
+ Comment[ru]=Модуль рисования Krita
++Comment[sl]=vstavek za dejanja slikanja za Krito
+ Comment[sr]=Прикључак за сликарске операције за Krita-у
+ Comment[sr@Latn]=Priključak za slikarske operacije za Krita-u
+ Comment[sv]=Målningsinsticksprogram för Krita
+Index: krita/kritapart.desktop
+===================================================================
+--- krita/kritapart.desktop (revision 427945)
++++ krita/kritapart.desktop (working copy)
+@@ -18,7 +18,7 @@
+ Name[nn]=KOffice-komponent for biletmanipulering
+ Name[pt]=Componente de Manipulação de Imagens do KOffice
+ Name[pt_BR]=Componente de Manipulação de Imagens do KOffice
+-Name[ru]=Компонент редактирования изображений KOffice
++Name[ru]=Компонент редактирования изображений
+ Name[sl]=Komponenta za obdelavo slik za KOffice
+ Name[sr]=KOffice-ова компонента за манипулацију сликама
+ Name[sr@Latn]=KOffice-ova komponenta za manipulaciju slikama
+@@ -49,7 +49,7 @@
+ GenericName[nn]=Bilethandsaming
+ GenericName[pt]=Manipulação de Imagens
+ GenericName[pt_BR]=Manipulação de Imagens
+-GenericName[ru]=Редактор графических изображений
++GenericName[ru]=Редактирование изображений
+ GenericName[sl]=Obdelava slik
+ GenericName[sr]=Манипулација сликама
+ GenericName[sr@Latn]=Manipulacija slikama
+Index: krita/ui/kis_layerbox.cc
+===================================================================
+--- krita/ui/kis_layerbox.cc (revision 427945)
++++ krita/ui/kis_layerbox.cc (working copy)
+@@ -372,7 +372,7 @@
+ void KisLayerBoxItem::init(const QString& label, QListBox *parent,
+ KisLayerBox::flags f)
+ {
+- KIconLoader il;
++ KIconLoader il( "krita" );
+
+ m_label = label;
+
+Index: krita/ui/kis_dockframedocker.cc
+===================================================================
+--- krita/ui/kis_dockframedocker.cc (revision 427945)
++++ krita/ui/kis_dockframedocker.cc (working copy)
+@@ -125,7 +125,6 @@
+ m_page -> lblCaption -> show();
+ m_page -> bnShade -> show();
+ m_page -> lblCaption -> setText(caption());
+- resize(sizeHint());
+ }
+ else {
+ m_docked = false;
+@@ -133,7 +132,6 @@
+ m_page -> bnShade -> hide();
+ m_page -> tabWidget -> show();
+ m_page -> lblCaption -> setText("");
+- resize(sizeHint());
+ }
+
+ }
+Index: kchart/kchartpart.desktop
+===================================================================
+--- kchart/kchartpart.desktop (revision 427945)
++++ kchart/kchartpart.desktop (working copy)
+@@ -20,6 +20,7 @@
+ Name[pt]=Componente de Gráficos do KOffice
+ Name[pt_BR]=Componente de Gráficos do KOffice
+ Name[ru]=Компонент диаграмм KOffice
++Name[sl]=Komponenta za grafe za KOffice
+ Name[sr]=KOffice-ова компонента за графике
+ Name[sr@Latn]=KOffice-ova komponenta za grafike
+ Name[sv]=Koffice-diagramkomponent
+Index: kchart/kdchart/KDDrawText.cpp
+===================================================================
+--- kchart/kdchart/KDDrawText.cpp (revision 427945)
++++ kchart/kdchart/KDDrawText.cpp (working copy)
+@@ -256,10 +256,12 @@
+ painter->setPen( QColor( Qt::darkGreen ) );
+ painter->drawRect(x,y,txtWidth,txtHeight);
+ }else{
++#if 0
+ // Working around a strange Qt bug: Rotated painter must be
+ // initialized by drawing before text can be painted there.
+ painter->setPen( QColor( Qt::white ) );
+ painter->drawLine( 30000,0,30001,0 );
++#endif
+ }
+ painter->setPen( savePen );
+ }
+Index: kchart/kchartWizardSelectChartTypePage.cc
+===================================================================
+--- kchart/kchartWizardSelectChartTypePage.cc (revision 427945)
++++ kchart/kchartWizardSelectChartTypePage.cc (working copy)
+@@ -16,11 +16,11 @@
+ namespace KChart
+ {
+
+-KChartButton::KChartButton(QWidget *parent, const QString & _text, QPixmap *_pixmap)
++KChartButton::KChartButton(QWidget *parent, const QString & _text, const QPixmap &_pixmap)
+ : QVBox(parent)
+ {
+ m_button = new QPushButton(this);
+- m_button->setPixmap(*_pixmap);
++ m_button->setPixmap(_pixmap);
+ m_button->setToggleButton( true );
+ QLabel *label = new QLabel(_text, this);
+ label->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
+@@ -30,16 +30,16 @@
+ KChartButton::~KChartButton()
+ {
+ }
+-
++
+ void KChartWizardSelectChartTypePage::addButton(const QString &name,
+ const QString &icon_name,
+ int type)
+ {
+- KChartButton *button = new KChartButton( this, name, &BarIcon( icon_name,KIcon::SizeMedium, KIcon::DefaultState,KChartFactory::global() ) );
++ KChartButton *button = new KChartButton( this, name, BarIcon( icon_name,KIcon::SizeMedium, KIcon::DefaultState,KChartFactory::global() ) );
+ _layout->addWidget(button,r_pos,c_pos);
+ _typeBG->insert( button->button(), type );
+
+- if (c_pos == 3)
++ if (c_pos == 3)
+ {
+ c_pos=0;
+ r_pos++; //place the next button in the second row
+Index: kchart/kchartWizardSelectChartTypePage.h
+===================================================================
+--- kchart/kchartWizardSelectChartTypePage.h (revision 427945)
++++ kchart/kchartWizardSelectChartTypePage.h (working copy)
+@@ -23,9 +23,9 @@
+ {
+ Q_OBJECT
+ public:
+- KChartButton(QWidget* parent, const QString &, QPixmap *);
++ KChartButton(QWidget* parent, const QString &, const QPixmap &);
+ ~KChartButton();
+-
++
+ QPushButton *button() const { return m_button;}
+ private:
+ QPushButton *m_button;
+Index: mimetypes/kde32/vnd.stardivision.math.desktop
+===================================================================
+--- mimetypes/kde32/vnd.stardivision.math.desktop (revision 427945)
++++ mimetypes/kde32/vnd.stardivision.math.desktop (working copy)
+@@ -25,7 +25,7 @@
+ Comment[nn]=StarOffice-formel
+ Comment[pt]=Documento Matemático do StarOffice
+ Comment[pt_BR]=Documento do StarOffice Math
+-Comment[ru]=Формулы StarOffice
++Comment[ru]=Формула StarOffice
+ Comment[sl]=Dokument za StarOffice Math
+ Comment[sr]=StarOffice Math-ов документ
+ Comment[sr@Latn]=StarOffice Math-ov dokument
+Index: mimetypes/kde32/vnd.stardivision.writer-global.desktop
+===================================================================
+--- mimetypes/kde32/vnd.stardivision.writer-global.desktop (revision 427945)
++++ mimetypes/kde32/vnd.stardivision.writer-global.desktop (working copy)
+@@ -23,7 +23,7 @@
+ Comment[nn]=StarOffice Writer-hovuddokument
+ Comment[pt]=Documento Mestre do Writer do StarOffice
+ Comment[pt_BR]=Documento Mestre do StarOffice Writer
+-Comment[ru]=Основной документ StarOffice Writer
++Comment[ru]=Мастер-документ StarOffice
+ Comment[sl]=Dokument za StarOffice Writer Master
+ Comment[sr]=StarOffice Writer-ов главни документ
+ Comment[sr@Latn]=StarOffice Writer-ov glavni dokument
+Index: mimetypes/kde32/vnd.sun.xml.writer.master.desktop
+===================================================================
+--- mimetypes/kde32/vnd.sun.xml.writer.master.desktop (revision 427945)
++++ mimetypes/kde32/vnd.sun.xml.writer.master.desktop (working copy)
+@@ -20,7 +20,7 @@
+ Comment[nn]=OpenOffice.org-hovudtekstdokument
+ Comment[pt]=Documento Mestre de Texto do OpenOffice.org
+ Comment[pt_BR]=Documento Mestre de Texto do OpenOffice.org
+-Comment[ru]=Основной текстовый документ OpenOffice.org
++Comment[ru]=Мастер-документ OpenOffice.org
+ Comment[sr]=OpenOffice.org-ов главни текстуални документ
+ Comment[sr@Latn]=OpenOffice.org-ov glavni tekstualni dokument
+ Comment[sv]=Openoffice.org huvudtextdokument
+Index: mimetypes/kde32/vnd.sun.xml.writer.template.desktop
+===================================================================
+--- mimetypes/kde32/vnd.sun.xml.writer.template.desktop (revision 427945)
++++ mimetypes/kde32/vnd.sun.xml.writer.template.desktop (working copy)
+@@ -21,7 +21,7 @@
+ Comment[nn]=OpenOffice.org-tekstdokumentmal
+ Comment[pt]=Modelo de Documento de Texto do OpenOffice.org
+ Comment[pt_BR]=Modelo de Documento de Texto do OpenOffice.org
+-Comment[ru]=Шаблон текстового документа OpenОffice.org
++Comment[ru]=Шаблон документа OpenOffice.org
+ Comment[sl]=Predloga besedilnega dokumenta za OpenOffice.org
+ Comment[sr]=OpenOffice.org-ов шаблон текстуалног документа
+ Comment[sr@Latn]=OpenOffice.org-ov šablon tekstualnog dokumenta
+Index: mimetypes/kde32/vnd.stardivision.draw.desktop
+===================================================================
+--- mimetypes/kde32/vnd.stardivision.draw.desktop (revision 427945)
++++ mimetypes/kde32/vnd.stardivision.draw.desktop (working copy)
+@@ -23,7 +23,7 @@
+ Comment[nn]=StarOffice-teikning
+ Comment[pt]=Desenho do StarOffice
+ Comment[pt_BR]=Desenho do StarOffice
+-Comment[ru]=Изображение StarOffice
++Comment[ru]=Рисунок StarOffice
+ Comment[sl]=Risanje za StarOffice
+ Comment[sr]=StarOffice-ов цртеж
+ Comment[sr@Latn]=StarOffice-ov crtež
+Index: mimetypes/kde32/vnd.sun.xml.draw.template.desktop
+===================================================================
+--- mimetypes/kde32/vnd.sun.xml.draw.template.desktop (revision 427945)
++++ mimetypes/kde32/vnd.sun.xml.draw.template.desktop (working copy)
+@@ -20,7 +20,7 @@
+ Comment[nn]=OpenOffice.org-teikningsmal
+ Comment[pt]=Modelo de Desenho do OpenOffice.org
+ Comment[pt_BR]=Modelo de Desenho do OpenOffice.org
+-Comment[ru]=Шаблон изображения OpenOffice.org
++Comment[ru]=Шаблон рисунка OpenOffice.org
+ Comment[sl]=Predloga risanja za OpenOffice.org
+ Comment[sr]=OpenOffice.org-ов шаблон цртежа
+ Comment[sr@Latn]=OpenOffice.org-ov šablon crteža
+Index: mimetypes/kde32/vnd.sun.xml.calc.template.desktop
+===================================================================
+--- mimetypes/kde32/vnd.sun.xml.calc.template.desktop (revision 427945)
++++ mimetypes/kde32/vnd.sun.xml.calc.template.desktop (working copy)
+@@ -21,7 +21,7 @@
+ Comment[nn]=OpenOffice.org-reknearkmal
+ Comment[pt]=Modelo de Folha de Cálculo do OpenOffice.org
+ Comment[pt_BR]=Modelo de Planilha OpenOffice.org
+-Comment[ru]=Шаблон таблицы OpenOffice.org
++Comment[ru]=Шаблон электронной таблицы OpenOffice.org
+ Comment[sl]=Predloga preglednice za OpenOffice.org
+ Comment[sr]=OpenOffice.org-ов шаблон прорачунског листа
+ Comment[sr@Latn]=OpenOffice.org-ov šablon proračunskog lista
+Index: mimetypes/kde33/vnd.oasis.opendocument.graphics-template.desktop
+===================================================================
+--- mimetypes/kde33/vnd.oasis.opendocument.graphics-template.desktop (revision 427945)
++++ mimetypes/kde33/vnd.oasis.opendocument.graphics-template.desktop (working copy)
+@@ -22,7 +22,7 @@
+ Comment[nn]=OASIS OpenDocument-teikningsmal
+ Comment[pt]=Modelo de Desenho OASIS OpenDocument
+ Comment[pt_BR]=Modelo de Gráfico OpenDocument OASIS
+-Comment[ru]=Шаблон графики OASIS OpenDocument Graphics
++Comment[ru]=Шаблон рисунка OASIS OpenDocument Graphics
+ Comment[sl]=Predloga grafike OASIS OpenDocument
+ Comment[sr]=OASIS-ов OpenDocument графички шаблон
+ Comment[sr@Latn]=OASIS-ov OpenDocument grafički šablon
+Index: mimetypes/kde33/vnd.oasis.opendocument.graphics.desktop
+===================================================================
+--- mimetypes/kde33/vnd.oasis.opendocument.graphics.desktop (revision 427945)
++++ mimetypes/kde33/vnd.oasis.opendocument.graphics.desktop (working copy)
+@@ -22,7 +22,7 @@
+ Comment[nn]=OASIS OpenDocument-teikning
+ Comment[pt]=Desenho OASIS OpenDocument
+ Comment[pt_BR]=Gráfico OpenDocument OASIS
+-Comment[ru]=Графика OASIS OpenDocument
++Comment[ru]=Рисунок OASIS OpenDocument
+ Comment[sl]=Grafika OASIS OpenDocument
+ Comment[sr]=OASIS-ова OpenDocument графика
+ Comment[sr@Latn]=OASIS-ova OpenDocument grafika
+Index: kivio/kiviopart/kivio_stencil_geometry_panel.cpp
+===================================================================
+--- kivio/kiviopart/kivio_stencil_geometry_panel.cpp (revision 427945)
++++ kivio/kiviopart/kivio_stencil_geometry_panel.cpp (working copy)
+@@ -96,10 +96,10 @@
+ lw->setPixmap( QPixmap((const char **)width_xpm) );
+ lh->setPixmap( QPixmap((const char **)height_xpm) );
+
+- m_pX = new KoUnitDoubleSpinBox(this, -1000.0, 1000.0, 0.5, 0.0);
+- m_pY = new KoUnitDoubleSpinBox(this, -1000.0, 1000.0, 0.5, 0.0);
+- m_pW = new KoUnitDoubleSpinBox(this, -1000.0, 1000.0, 0.5, 0.0);
+- m_pH = new KoUnitDoubleSpinBox(this, -1000.0, 1000.0, 0.5, 0.0);
++ m_pX = new KoBuggyUnitDoubleSpinBox(this, -1000.0, 1000.0, 0.5, 0.0);
++ m_pY = new KoBuggyUnitDoubleSpinBox(this, -1000.0, 1000.0, 0.5, 0.0);
++ m_pW = new KoBuggyUnitDoubleSpinBox(this, -1000.0, 1000.0, 0.5, 0.0);
++ m_pH = new KoBuggyUnitDoubleSpinBox(this, -1000.0, 1000.0, 0.5, 0.0);
+ m_rotationSBox = new KIntSpinBox(-360, 360, 1, 0, 10, this);
+ m_rotationSBox->hide();
+
+Index: kivio/kiviopart/kivio_stencil_geometry_panel.h
+===================================================================
+--- kivio/kiviopart/kivio_stencil_geometry_panel.h (revision 427945)
++++ kivio/kiviopart/kivio_stencil_geometry_panel.h (working copy)
+@@ -5,14 +5,14 @@
+ #include <koUnit.h>
+
+ class KoPageLayout;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+ class KIntSpinBox;
+
+ class KivioStencilGeometryPanel : public QWidget
+ {
+ Q_OBJECT
+ protected:
+- KoUnitDoubleSpinBox *m_pX, *m_pY, *m_pW, *m_pH;
++ KoBuggyUnitDoubleSpinBox *m_pX, *m_pY, *m_pW, *m_pH;
+ KIntSpinBox* m_rotationSBox;
+ KoUnit::Unit m_unit;
+ bool m_emitSignals;
+Index: kivio/kiviopart/kivio_view.h
+===================================================================
+--- kivio/kiviopart/kivio_view.h (revision 427945)
++++ kivio/kiviopart/kivio_view.h (working copy)
+@@ -63,7 +63,7 @@
+ class DCOPObject;
+ class KoRuler;
+ class KoZoomHandler;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+ class KStatusBarLabel;
+ class KoLineWidthAction;
+ class KoLineStyleAction;
+Index: kivio/kiviopart/ui/kiviostencilformatdlg.cpp
+===================================================================
+--- kivio/kiviopart/ui/kiviostencilformatdlg.cpp (revision 427945)
++++ kivio/kiviopart/ui/kiviostencilformatdlg.cpp (working copy)
+@@ -46,7 +46,7 @@
+ QGridLayout* gl = new QGridLayout(mainWidget, 3, 2, KDialog::marginHint(), KDialog::spacingHint());
+
+ QLabel* lineWidthLbl = new QLabel(i18n("Line &width:"), mainWidget);
+- m_lineWidthUSBox = new KoUnitDoubleSpinBox(mainWidget, 0.0, 1000.0, 0.1, 1.0, m_unit, 2);
++ m_lineWidthUSBox = new KoBuggyUnitDoubleSpinBox(mainWidget, 0.0, 1000.0, 0.1, 1.0, m_unit, 2);
+ lineWidthLbl->setBuddy(m_lineWidthUSBox);
+ QLabel* lineColorLbl = new QLabel(i18n("Line &color:"), mainWidget);
+ m_lineCBtn = new KColorButton(mainWidget);
+Index: kivio/kiviopart/ui/kiviostencilformatdlg.h
+===================================================================
+--- kivio/kiviopart/ui/kiviostencilformatdlg.h (revision 427945)
++++ kivio/kiviopart/ui/kiviostencilformatdlg.h (working copy)
+@@ -24,7 +24,7 @@
+
+ #include <koUnit.h>
+
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+ class KColorButton;
+ class KComboBox;
+ class KivioView;
+@@ -61,7 +61,7 @@
+ void initLineEndStyles();
+
+ protected:
+- KoUnitDoubleSpinBox* m_lineWidthUSBox;
++ KoBuggyUnitDoubleSpinBox* m_lineWidthUSBox;
+ KColorButton* m_lineCBtn;
+ KColorButton* m_fillCBtn;
+ KComboBox* m_patternCBox;
+Index: kivio/kiviopart/ui/kiviooptionsdialog.cpp
+===================================================================
+--- kivio/kiviopart/ui/kiviooptionsdialog.cpp (revision 427945)
++++ kivio/kiviopart/ui/kiviooptionsdialog.cpp (working copy)
+@@ -178,20 +178,20 @@
+ gridColorLbl->setBuddy(m_gridColorBtn);
+ QGroupBox* spacingGrp = new QGroupBox(2, Qt::Horizontal, i18n("Spacing"), page);
+ QLabel* spaceHorizLbl = new QLabel(i18n("&Horizontal:"), spacingGrp);
+- m_spaceHorizUSpin = new KoUnitDoubleSpinBox(spacingGrp, 0.0, pgw, 0.1,
++ m_spaceHorizUSpin = new KoBuggyUnitDoubleSpinBox(spacingGrp, 0.0, pgw, 0.1,
+ fw, unit);
+ spaceHorizLbl->setBuddy(m_spaceHorizUSpin);
+ QLabel* spaceVertLbl = new QLabel(i18n("&Vertical:"), spacingGrp);
+- m_spaceVertUSpin = new KoUnitDoubleSpinBox(spacingGrp, 0.0, pgh, 0.1,
++ m_spaceVertUSpin = new KoBuggyUnitDoubleSpinBox(spacingGrp, 0.0, pgh, 0.1,
+ fh, unit);
+ spaceVertLbl->setBuddy(m_spaceVertUSpin);
+ QGroupBox* snapGrp = new QGroupBox(2, Qt::Horizontal, i18n("Snap Distance"), page);
+ QLabel* snapHorizLbl = new QLabel(i18n("H&orizontal:"), snapGrp);
+- m_snapHorizUSpin = new KoUnitDoubleSpinBox(snapGrp, 0.0, fw, 0.1,
++ m_snapHorizUSpin = new KoBuggyUnitDoubleSpinBox(snapGrp, 0.0, fw, 0.1,
+ sw, unit);
+ snapHorizLbl->setBuddy(m_snapHorizUSpin);
+ QLabel* snapVertLbl = new QLabel(i18n("V&ertical:"), snapGrp);
+- m_snapVertUSpin = new KoUnitDoubleSpinBox(snapGrp, 0.0, fh, 0.1,
++ m_snapVertUSpin = new KoBuggyUnitDoubleSpinBox(snapGrp, 0.0, fh, 0.1,
+ sh, unit);
+ snapVertLbl->setBuddy(m_snapVertUSpin);
+
+@@ -245,7 +245,7 @@
+ orientBGrp->insert(m_orientVertRBtn);
+ QLabel* posLbl = new QLabel(i18n("&Position:"), m_propertiesGrp);
+ KoUnit::Unit unit = view->doc()->units();
+- m_posUSpin = new KoUnitDoubleSpinBox(m_propertiesGrp, 0.0, 0.0, 0.0, unit);
++ m_posUSpin = new KoBuggyUnitDoubleSpinBox(m_propertiesGrp, 0.0, 0.0, 0.0, unit);
+ posLbl->setBuddy(m_posUSpin);
+
+ QGridLayout* pgl = new QGridLayout(m_propertiesGrp->layout());
+Index: kivio/kiviopart/ui/kivioarrowheadformatdlg.cpp
+===================================================================
+--- kivio/kiviopart/ui/kivioarrowheadformatdlg.cpp (revision 427945)
++++ kivio/kiviopart/ui/kivioarrowheadformatdlg.cpp (working copy)
+@@ -53,10 +53,10 @@
+ loadArrowHeads(m_startAHTypeCBox, false);
+ startAHTypeLbl->setBuddy(m_startAHTypeCBox);
+ QLabel* startAHWidthLbl = new QLabel(i18n("&Width:"), startGBox);
+- m_startAHWidthUSBox = new KoUnitDoubleSpinBox(startGBox, 0.0, 1000.0, 0.1, 1.0, m_unit, 2);
++ m_startAHWidthUSBox = new KoBuggyUnitDoubleSpinBox(startGBox, 0.0, 1000.0, 0.1, 1.0, m_unit, 2);
+ startAHWidthLbl->setBuddy(m_startAHWidthUSBox);
+ QLabel* startAHHeightLbl = new QLabel(i18n("&Length:"), startGBox);
+- m_startAHHeightUSBox = new KoUnitDoubleSpinBox(startGBox, 0.0, 1000.0, 0.1, 1.0, m_unit, 2);
++ m_startAHHeightUSBox = new KoBuggyUnitDoubleSpinBox(startGBox, 0.0, 1000.0, 0.1, 1.0, m_unit, 2);
+ startAHHeightLbl->setBuddy(m_startAHHeightUSBox);
+
+ QGroupBox* endGBox = new QGroupBox(2, Qt::Horizontal, i18n("Arrowhead at End"), mainWidget);
+@@ -65,10 +65,10 @@
+ loadArrowHeads(m_endAHTypeCBox, true);
+ endAHTypeLbl->setBuddy(m_endAHTypeCBox);
+ QLabel* endAHWidthLbl = new QLabel(i18n("W&idth:"), endGBox);
+- m_endAHWidthUSBox = new KoUnitDoubleSpinBox(endGBox, 0.0, 1000.0, 0.1, 1.0, m_unit, 2);
++ m_endAHWidthUSBox = new KoBuggyUnitDoubleSpinBox(endGBox, 0.0, 1000.0, 0.1, 1.0, m_unit, 2);
+ endAHWidthLbl->setBuddy(m_endAHWidthUSBox);
+ QLabel* endAHHeightLbl = new QLabel(i18n("L&ength:"), endGBox);
+- m_endAHHeightUSBox = new KoUnitDoubleSpinBox(endGBox, 0.0, 1000.0, 0.1, 1.0, m_unit, 2);
++ m_endAHHeightUSBox = new KoBuggyUnitDoubleSpinBox(endGBox, 0.0, 1000.0, 0.1, 1.0, m_unit, 2);
+ endAHHeightLbl->setBuddy(m_endAHHeightUSBox);
+
+ gl->addWidget(startGBox, 0, 0);
+Index: kivio/kiviopart/ui/kiviooptionsdialog.h
+===================================================================
+--- kivio/kiviopart/ui/kiviooptionsdialog.h (revision 427945)
++++ kivio/kiviopart/ui/kiviooptionsdialog.h (working copy)
+@@ -32,7 +32,7 @@
+ class QRadioButton;
+ class KColorButton;
+ class KURLRequester;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+ class KivioGuideLineData;
+ class QGroupBox;
+ class QFont;
+@@ -105,17 +105,17 @@
+ KoPageLayout m_layout;
+ QLabel* m_fontTxtLbl;
+ QFont m_font;
+- KoUnitDoubleSpinBox* m_spaceHorizUSpin;
+- KoUnitDoubleSpinBox* m_spaceVertUSpin;
+- KoUnitDoubleSpinBox* m_snapHorizUSpin;
+- KoUnitDoubleSpinBox* m_snapVertUSpin;
++ KoBuggyUnitDoubleSpinBox* m_spaceHorizUSpin;
++ KoBuggyUnitDoubleSpinBox* m_spaceVertUSpin;
++ KoBuggyUnitDoubleSpinBox* m_snapHorizUSpin;
++ KoBuggyUnitDoubleSpinBox* m_snapVertUSpin;
+ QCheckBox* m_gridChBox;
+ QCheckBox* m_snapChBox;
+ KColorButton* m_gridColorBtn;
+ KListView* m_guideList;
+ QRadioButton* m_orientHorizRBtn;
+ QRadioButton* m_orientVertRBtn;
+- KoUnitDoubleSpinBox* m_posUSpin;
++ KoBuggyUnitDoubleSpinBox* m_posUSpin;
+ QCheckBox* m_snapGuideChBox;
+ QCheckBox* m_guidesChBox;
+ KColorButton* m_guideColorBtn;
+Index: kivio/kiviopart/ui/kivioarrowheadformatdlg.h
+===================================================================
+--- kivio/kiviopart/ui/kivioarrowheadformatdlg.h (revision 427945)
++++ kivio/kiviopart/ui/kivioarrowheadformatdlg.h (working copy)
+@@ -24,7 +24,7 @@
+
+ #include <koUnit.h>
+
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+ class KComboBox;
+ class KivioView;
+
+@@ -58,10 +58,10 @@
+ void loadArrowHeads(KComboBox* combo, bool endArrow);
+
+ protected:
+- KoUnitDoubleSpinBox* m_startAHWidthUSBox;
+- KoUnitDoubleSpinBox* m_startAHHeightUSBox;
+- KoUnitDoubleSpinBox* m_endAHWidthUSBox;
+- KoUnitDoubleSpinBox* m_endAHHeightUSBox;
++ KoBuggyUnitDoubleSpinBox* m_startAHWidthUSBox;
++ KoBuggyUnitDoubleSpinBox* m_startAHHeightUSBox;
++ KoBuggyUnitDoubleSpinBox* m_endAHWidthUSBox;
++ KoBuggyUnitDoubleSpinBox* m_endAHHeightUSBox;
+ KComboBox* m_startAHTypeCBox;
+ KComboBox* m_endAHTypeCBox;
+ KoUnit::Unit m_unit;
+Index: kpresenter/kppieobject.h
+===================================================================
+--- kpresenter/kppieobject.h (revision 427945)
++++ kpresenter/kppieobject.h (working copy)
+@@ -1,5 +1,6 @@
+ /* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -79,7 +80,6 @@
+ { return lineEnd; }
+
+ virtual QDomDocumentFragment save( QDomDocument& doc, double offset );
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
+
+ virtual double load(const QDomElement &element);
+ virtual void flip(bool horizontal );
+@@ -89,6 +89,9 @@
+ virtual KoPoint getRealOrig() const;
+
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++
+ virtual void paint( QPainter *_painter, KoZoomHandler*_zoomHandler,
+ int /* pageNum */, bool drawingShadow, bool drawContour );
+
+Index: kpresenter/kpcubicbeziercurveobject.h
+===================================================================
+--- kpresenter/kpcubicbeziercurveobject.h (revision 427945)
++++ kpresenter/kpcubicbeziercurveobject.h (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 2001 Toshitaka Fujioka <fujioka@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -42,10 +43,9 @@
+ virtual QString getTypeString() const { return i18n("Cubic Bezier Curve"); }
+
+ virtual QDomDocumentFragment save( QDomDocument& doc,double offset );
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
+
+ virtual double load( const QDomElement &element );
+- virtual void loadOasis( const QDomElement &element, KoOasisContext & context,KPRLoadingInfo* info );
++ virtual void loadOasis( const QDomElement &element, KoOasisContext & context, KPRLoadingInfo* info );
+
+ virtual void flip(bool horizontal );
+ void closeObject(bool _close);
+@@ -53,6 +53,9 @@
+
+
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++
+ virtual void updatePoints( double _fx, double _fy );
+ virtual KoPointArray getDrawingPoints() const;
+
+Index: kpresenter/kprectobject.h
+===================================================================
+--- kpresenter/kprectobject.h (revision 427945)
++++ kpresenter/kprectobject.h (working copy)
+@@ -53,9 +53,11 @@
+ virtual QDomDocumentFragment save( QDomDocument& doc, double offset );
+ virtual double load(const QDomElement &element);
+ virtual void loadOasis(const QDomElement &element, KoOasisContext &context, KPRLoadingInfo *info);
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
+
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++
+ virtual void paint( QPainter *_painter,KoZoomHandler*_zoomHandler,
+ int /* pageNum */, bool drawingShadow, bool drawContour );
+
+Index: kpresenter/kpellipseobject.h
+===================================================================
+--- kpresenter/kpellipseobject.h (revision 427945)
++++ kpresenter/kpellipseobject.h (working copy)
+@@ -49,9 +49,11 @@
+ { return i18n("Ellipse"); }
+
+ virtual KoSize getRealSize() const;
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
+
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++
+ virtual void paint( QPainter *_painter,KoZoomHandler *_zoomHandler,
+ int /* pageNum */, bool drawingShadow, bool drawContour = FALSE );
+
+Index: kpresenter/kpfreehandobject.h
+===================================================================
+--- kpresenter/kpfreehandobject.h (revision 427945)
++++ kpresenter/kpfreehandobject.h (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 2001 Toshitaka Fujioka <fujioka@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -43,8 +44,11 @@
+
+ virtual QDomDocumentFragment save( QDomDocument& doc,double offset );
+ virtual double load( const QDomElement &element );
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
++ virtual void loadOasis( const QDomElement &element, KoOasisContext & context, KPRLoadingInfo* info );
+
++protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
+ };
+
+ #endif
+Index: kpresenter/kppointobject.cc
+===================================================================
+--- kpresenter/kppointobject.cc (revision 427945)
++++ kpresenter/kppointobject.cc (working copy)
+@@ -1,6 +1,6 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+- Copyright (C) 2004 Thorsten Zachmann <zachmann@kde.org>
++ Copyright (C) 2004-2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -83,71 +83,24 @@
+ return fragment;
+ }
+
+-QString KPPointObject::saveOasisStrokeElement( KoGenStyles& mainStyles ) const
++const char * KPPointObject::getOasisElementName() const
+ {
+- KoGenStyle styleobjectauto( KoGenStyle::STYLE_GRAPHICAUTO, "graphic" );
+- saveOasisMarkerElement( mainStyles, styleobjectauto );
+- saveOasisObjectProtectStyle( styleobjectauto );
+- KPShadowObject::saveOasisStrokeElement( mainStyles, styleobjectauto );
+- return mainStyles.lookup( styleobjectauto, "gr" );
++ return "draw:custom-shape";
+ }
+
+-
+-bool KPPointObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context ) const
+-{
+- QString listOfPoint;
+- int maxX=0;
+- int maxY=0;
+- KoPointArray::ConstIterator it;
+- for ( it = points.begin(); it != points.end(); ++it ) {
+- int tmpX = 0;
+- int tmpY = 0;
+- tmpX = ( int ) ( KoUnit::toMM( ( *it ).x() )*100 );
+- tmpY = ( int ) ( KoUnit::toMM( ( *it ).y() )*100 );
+- if ( !listOfPoint.isEmpty() )
+- listOfPoint += QString( " %1,%2" ).arg( tmpX ).arg( tmpY );
+- else
+- listOfPoint = QString( "%1,%2" ).arg( tmpX ).arg( tmpY );
+- maxX = QMAX( maxX, tmpX );
+- maxY = QMAX( maxY, tmpY );
+- }
+- xmlWriter.addAttribute("draw:points", listOfPoint );
+- xmlWriter.addAttribute("svg:viewBox", QString( "0 0 %1 %2" ).arg( maxX ).arg( maxY ) );
+- return true;
+-}
+-
+ void KPPointObject::loadOasisMarker( KoOasisContext & context )
+ {
+ loadOasisMarkerElement( context, "marker-start", lineBegin );
+ loadOasisMarkerElement( context, "marker-end", lineEnd );
+ }
+
+-void KPPointObject::loadOasis( const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info )
++void KPPointObject::fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const
+ {
+- //kdDebug()<<"void KPPointObject::loadOasis( const QDomElement &element )*************\n";
+- KPShadowObject::loadOasis( element, context, info );
+- //load point.
+- QStringList ptList = QStringList::split(' ', element.attributeNS( KoXmlNS::draw, "points", QString::null));
+- QString pt_x, pt_y;
+- double tmp_x, tmp_y;
+- unsigned int index = 0;
+- for (QStringList::Iterator it = ptList.begin(); it != ptList.end(); ++it)
+- {
+- tmp_x = (*it).section(',',0,0).toInt() / 100;
+- tmp_y = (*it).section(',',1,1).toInt() / 100;
+-
+- pt_x.setNum(tmp_x);
+- pt_x+="mm";
+-
+- pt_y.setNum(tmp_y);
+- pt_y+="mm";
+-
+- points.putPoints( index, 1, KoUnit::parseValue(pt_x),KoUnit::parseValue(pt_y) );
+- ++index;
+- }
+- loadOasisMarker( context );
++ KPShadowObject::fillStyle( styleObjectAuto, mainStyles );
++ saveOasisMarkerElement( mainStyles, styleObjectAuto );
+ }
+
++
+ double KPPointObject::load( const QDomElement &element )
+ {
+ double offset = KPShadowObject::load( element );
+Index: kpresenter/kplineobject.h
+===================================================================
+--- kpresenter/kplineobject.h (revision 427945)
++++ kpresenter/kplineobject.h (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -63,16 +64,18 @@
+ virtual double load(const QDomElement &element);
+ virtual void loadOasis(const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info);
+
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
+-
+ virtual void flip(bool horizontal );
+
+ virtual KoSize getRealSize() const;
+ virtual KoPoint getRealOrig() const;
+
+ protected:
+- QString saveOasisStrokeElement( KoGenStyles& mainStyles ) const;
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++ virtual void saveOasisPosObject( KoXmlWriter &xmlWriter, int indexObj ) const;
+
++ virtual void fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const;
++
+ virtual void paint( QPainter *_painter, KoZoomHandler*_zoomHandler,
+ int /* pageNum */, bool drawingShadow, bool drawContour = FALSE );
+ LineType lineType;
+Index: kpresenter/kppointobject.h
+===================================================================
+--- kpresenter/kppointobject.h (revision 427945)
++++ kpresenter/kppointobject.h (working copy)
+@@ -1,6 +1,6 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+- Copyright (C) 2004 Thorsten Zachmann <zachmann@kde.org>
++ Copyright (C) 2004-2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -34,10 +34,8 @@
+ virtual KoPoint getRealOrig() const;
+
+ virtual QDomDocumentFragment save( QDomDocument& doc, double offset );
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context ) const;
+
+ virtual double load( const QDomElement &element );
+- virtual void loadOasis( const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info );
+
+ virtual void setLineBegin( LineEnd _lineBegin ) { lineBegin = _lineBegin; }
+ virtual void setLineEnd( LineEnd _lineEnd ) { lineEnd = _lineEnd; }
+@@ -53,10 +51,13 @@
+
+ virtual void closeObject( bool close );
+ virtual bool isClosed() const;
+- virtual QString saveOasisStrokeElement( KoGenStyles& mainStyles ) const;
+
+ protected:
++ virtual const char * getOasisElementName() const;
++
+ void loadOasisMarker( KoOasisContext & context );
++ virtual void fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const;
++
+ virtual void paint( QPainter *_painter,KoZoomHandler*_zoomHandler,
+ int /* pageNum */, bool drawingShadow, bool drawContour = FALSE );
+ virtual void updatePoints( double _fx, double _fy );
+Index: kpresenter/kpautoformobject.cc
+===================================================================
+--- kpresenter/kpautoformobject.cc (revision 427945)
++++ kpresenter/kpautoformobject.cc (working copy)
+@@ -76,12 +76,17 @@
+ }
+
+
+-bool KPAutoformObject::saveOasis( KoXmlWriter & xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPAutoformObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- kdDebug()<<"bool KPAutoformObject::saveOasis( KoXmlWriter & xmlWriter ) not implemented\n";
++ kdDebug()<<"bool KPAutoformObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) not implemented\n";
+ return true;
+ }
+
++const char * KPAutoformObject::getOasisElementName() const
++{
++ return "draw:custom-shape";
++}
++
+ QDomDocumentFragment KPAutoformObject::save( QDomDocument& doc, double offset )
+ {
+ QDomDocumentFragment fragment=KP2DObject::save(doc, offset);
+Index: kpresenter/kpgroupobject.h
+===================================================================
+--- kpresenter/kpgroupobject.h (revision 427945)
++++ kpresenter/kpgroupobject.h (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -70,7 +71,6 @@
+ virtual QDomDocumentFragment save( QDomDocument& doc, double offset );
+ virtual double load(const QDomElement &element, KPresenterDoc *doc);
+ virtual void loadOasisGroupObject( KPresenterDoc *doc, KPrPage * newpage, QDomNode &element, KoOasisContext & context, KPRLoadingInfo *info);
+- virtual bool saveOasis(KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj) const;
+
+ virtual void draw( QPainter *_painter, KoZoomHandler *_zoomhandler,
+ int pageNum, SelectionMode selectionMode, bool drawContour = FALSE );
+@@ -101,6 +101,9 @@
+ virtual void decCmdRef();
+
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++
+ void updateSizes( double fx, double fy );
+ void updateCoords( double dx, double dy );
+
+Index: kpresenter/kppixmapobject.h
+===================================================================
+--- kpresenter/kppixmapobject.h (revision 427945)
++++ kpresenter/kppixmapobject.h (working copy)
+@@ -2,6 +2,7 @@
+
+ /* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -72,7 +73,6 @@
+ { return i18n("Picture"); }
+
+ virtual QDomDocumentFragment save( QDomDocument& doc, double offset );
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
+
+ virtual double load(const QDomElement &element);
+ virtual void loadOasis(const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info);
+@@ -113,11 +113,15 @@
+ virtual void flip(bool horizontal );
+
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++
+ KPPixmapObject() {}
+
+ QPixmap changePictureSettings( QPixmap _tmpPixmap );
+- virtual void saveOasisPictureElement( KoGenStyle &styleobjectauto );
++ virtual void saveOasisPictureElement( KoGenStyle &styleobjectauto ) const;
+ void loadOasisPictureEffect(KoOasisContext & context );
++ virtual void fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const;
+
+ /**
+ * @internal
+Index: kpresenter/kppartobject.h
+===================================================================
+--- kpresenter/kppartobject.h (revision 427945)
++++ kpresenter/kppartobject.h (working copy)
+@@ -49,14 +49,15 @@
+
+ KPresenterChild *getChild() const { return child; }
+ void enableDrawing( bool f ) { _enableDrawing = f; }
+- virtual bool saveOasisPart( KoXmlWriter &xmlWriter, KoStore *store, KoSavingContext& context, int indexObj, int partIndexObj, KoXmlWriter* manifestWriter ) const;
+ virtual void loadOasis(const QDomElement &element, KoOasisContext &context, KPRLoadingInfo *info);
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext &context, int indexObj ) const { return true;/* use saveOasisPart*/};
+
+ public slots:
+ void slot_changed( KoChild *_koChild );
+
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++
+ void updateChildGeometry();
+ virtual void paint( QPainter *_painter,KoZoomHandler*_zoomHandler,
+ int /* pageNum */, bool drawingShadow, bool drawContour = FALSE );
+Index: kpresenter/kpobject.cc
+===================================================================
+--- kpresenter/kpobject.cc (revision 427945)
++++ kpresenter/kpobject.cc (working copy)
+@@ -344,7 +344,7 @@
+ xmlWriter.addAttributePt( "svg:width", ext.width() );
+ xmlWriter.addAttributePt( "svg:height", ext.height() );
+
+- if ( angle!=0.0 )
++ if ( kAbs( angle ) > 1E-6 )
+ {
+ double value = -1 * ( ( double )angle* M_PI )/180.0;
+ QString str=QString( "rotate (%1)" ).arg( value );
+@@ -362,6 +362,40 @@
+ }
+ }
+
++QString KPObject::getStyle( KPOasisSaveContext &sc ) const
++{
++ kdDebug(33001) << "KPObject::getStyle" << endl;
++ KoGenStyle styleObjectAuto;
++ KoGenStyles &mainStyles( sc.context.mainStyles() );
++ if ( sc.onMaster )
++ {
++ styleObjectAuto = KoGenStyle( KPresenterDoc::STYLE_PRESENTATIONSTICKYOBJECT, "presentation" );
++ }
++ else
++ {
++ styleObjectAuto = KoGenStyle( KoGenStyle::STYLE_GRAPHICAUTO, "graphic" );
++ }
++ fillStyle( styleObjectAuto, mainStyles );
++ if ( sc.onMaster )
++ {
++ return mainStyles.lookup( styleObjectAuto, "pr" );
++ }
++ return mainStyles.lookup( styleObjectAuto, "gr" );
++}
++
++void KPObject::fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& /* mainStyles */ ) const
++{
++ kdDebug(33001) << "KPObject::fillStyle" << endl;
++ saveOasisObjectProtectStyle( styleObjectAuto );
++ saveOasisShadowElement( styleObjectAuto );
++}
++
++bool KPObject::saveOasisObjectAttributes( KPOasisSaveContext &/* sc */ ) const
++{
++ kdDebug()<<"bool saveOasisObjectAttributes not implemented";
++ return true;
++}
++
+ bool KPObject::haveAnimation() const
+ {
+ //kdDebug()<<" effect :"<<effect<<" effect3 :"<<effect3<<" a_fileName :"<<a_fileName<<" d_fileName :"<<d_fileName<<" appearTimer :"<<appearTimer<<" disappearTimer :"<<disappearTimer<<endl;
+@@ -849,6 +883,20 @@
+ }
+ }
+
++bool KPObject::saveOasisObject( KPOasisSaveContext &sc ) const
++{
++ sc.xmlWriter.startElement( getOasisElementName() );
++ sc.xmlWriter.addAttribute( "draw:style-name", getStyle( sc ) );
++ saveOasisPosObject( sc.xmlWriter, sc.indexObj );
++ if( !objectName.isEmpty())
++ sc.xmlWriter.addAttribute( "draw:name", objectName );
++
++ saveOasisObjectAttributes( sc );
++
++ sc.xmlWriter.endElement();
++ return true;
++}
++
+ void KPObject::saveOasisShadowElement( KoGenStyle &styleobjectauto ) const
+ {
+ //FIXME default value
+@@ -1628,6 +1676,99 @@
+ // <draw:stroke-dash draw:name="Fine Dotted" draw:style="rect" draw:dots1="1" draw:distance="0.457cm"/>
+ }
+
++bool KPShadowObject::saveOasisDrawPoints( const KoPointArray &points, KPOasisSaveContext &sc )
++{
++ QString listOfPoint;
++ int maxX=0;
++ int maxY=0;
++ KoPointArray::ConstIterator it( points.begin() );
++ for ( ; it != points.end(); ++it )
++ {
++ int tmpX = int( ( *it ).x() * 10000 );
++ int tmpY = int( ( *it ).y() * 10000 );
++ //if ( !listOfPoint.isEmpty() )
++ listOfPoint += QString( " %1,%2" ).arg( tmpX ).arg( tmpY );
++ //else
++ // listOfPoint = QString( "%1,%2" ).arg( tmpX ).arg( tmpY );
++ maxX = QMAX( maxX, tmpX );
++ maxY = QMAX( maxY, tmpY );
++ }
++ sc.xmlWriter.addAttribute("draw:points", listOfPoint );
++ sc.xmlWriter.addAttribute("svg:viewBox", QString( "0 0 %1 %2" ).arg( maxX ).arg( maxY ) );
++ return true;
++}
++
++bool KPShadowObject::loadOasisDrawPoints( KoPointArray &points, const QDomElement &element,
++ KoOasisContext & context, KPRLoadingInfo *info )
++{
++ QStringList ptList = QStringList::split(' ', element.attributeNS( KoXmlNS::draw, "points", QString::null));
++ QStringList viewBox = QStringList::split( ' ', element.attributeNS( KoXmlNS::svg, "viewBox", QString::null ) );
++ //for ( QStringList::Iterator it = viewBox.begin(); it != viewBox.end(); ++it )
++ //{
++ // kdDebug(33001) << "viewBox = " << *it << endl;
++ //}
++
++ int left = 0;
++ int top = 0;
++ int right = 0;
++ int bottom = 0;
++
++ if ( viewBox.size() == 4 )
++ {
++ QStringList::Iterator it = viewBox.begin();
++ left = ( *it++ ).toInt();
++ top = ( *it++ ).toInt();
++ right = ( *it++ ).toInt();
++ bottom = ( *it ).toInt();
++ //kdDebug(33001) << "left = " << left
++ // << "top = " << top
++ // << "right =" << right
++ // << "bottom =" << bottom << endl;
++ }
++ else
++ {
++ //if no viewBox is found
++ for (QStringList::Iterator it = ptList.begin(); it != ptList.end(); ++it)
++ {
++ right = QMAX( (*it).section( ',', 0, 0 ).toInt(), right );
++ bottom = QMAX( (*it).section( ',', 1, 1 ).toInt(), bottom );
++ }
++ }
++
++ if ( right - left != 0 && bottom - top != 0 )
++ {
++ double tmp_x, tmp_y;
++ unsigned int index = 0;
++ for (QStringList::Iterator it = ptList.begin(); it != ptList.end(); ++it)
++ {
++ tmp_x = double( (*it).section( ',', 0, 0 ).toInt() + left ) / ( right - left ) * ext.width();
++ tmp_y = double( (*it).section( ',', 1, 1 ).toInt() + top ) / ( bottom - top ) * ext.height();
++
++ //kdDebug(33001) << "p" << index << " x: " << tmp_x << endl;
++ //kdDebug(33001) << "p" << index << " y: " << tmp_y << endl;
++
++ points.putPoints( index, 1, tmp_x, tmp_y );
++ ++index;
++ }
++ }
++ else
++ {
++ kdDebug(33001) << "problem in viewBox values are: "
++ << "left = " << left << ", "
++ << "top = " << top << ", "
++ << "right =" << right << ", "
++ << "bottom =" << bottom << endl;
++ }
++ return true;
++}
++
++void KPShadowObject::fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const
++{
++ kdDebug(33001) << "KPShadowObject::fillStyle" << endl;
++ KPObject::fillStyle( styleObjectAuto, mainStyles );
++ saveOasisStrokeElement( mainStyles, styleObjectAuto );
++}
++
+ void KPShadowObject::loadOasis(const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info)
+ {
+ //kdDebug()<<"void KPShadowObject::loadOasis(const QDomElement &element)**********************\n";
+@@ -1822,14 +1963,15 @@
+ return fragment;
+ }
+
+-QString KP2DObject::saveOasisBackgroundStyle( KoXmlWriter &xmlWriter, KoGenStyles& mainStyles, int indexObj ) const
++void KP2DObject::fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const
+ {
+- saveOasisPosObject( xmlWriter,indexObj );
+- KoGenStyle styleobjectauto;
+- if ( sticky )
+- styleobjectauto = KoGenStyle( KPresenterDoc::STYLE_PRESENTATIONSTICKYOBJECT, "presentation" );
+- else
+- styleobjectauto = KoGenStyle( KoGenStyle::STYLE_GRAPHICAUTO, "graphic" );
++ kdDebug(33001) << "KP2DObject::fillStyle" << endl;
++ KPShadowObject::fillStyle( styleObjectAuto, mainStyles );
++ saveOasisBackgroundElement( styleObjectAuto, mainStyles );
++}
++
++void KP2DObject::saveOasisBackgroundElement( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const
++{
+ switch ( getFillType() )
+ {
+ case FT_BRUSH:
+@@ -1838,34 +1980,22 @@
+ //todo FIXME when text object doesn't have a background
+ if( brush != QBrush() )
+ {
+- KoOasisStyles::saveOasisFillStyle( styleobjectauto, mainStyles, brush );
++ KoOasisStyles::saveOasisFillStyle( styleObjectAuto, mainStyles, brush );
+ }
+ else
+ {
+- styleobjectauto.addProperty( "draw:fill","none" );
++ styleObjectAuto.addProperty( "draw:fill","none" );
+ }
+ break;
+ }
+ case FT_GRADIENT:
+- styleobjectauto.addProperty( "draw:fill","gradient" );
+- styleobjectauto.addProperty( "draw:fill-gradient-name", saveOasisGradientStyle( mainStyles ) );
++ styleObjectAuto.addProperty( "draw:fill","gradient" );
++ styleObjectAuto.addProperty( "draw:fill-gradient-name", saveOasisGradientStyle( mainStyles ) );
+ break;
+ }
+- saveOasisObjectProtectStyle( styleobjectauto );
+-
+- saveOasisStrokeElement( mainStyles, styleobjectauto );
+- saveOasisMarginElement( styleobjectauto );
+- saveOasisShadowElement( styleobjectauto );
+- saveOasisPictureElement( styleobjectauto );
+-
+- if ( sticky )
+- return mainStyles.lookup( styleobjectauto, "pr" );
+- else
+- return mainStyles.lookup( styleobjectauto, "gr" );
+ }
+
+
+-
+ QString KP2DObject::saveOasisGradientStyle( KoGenStyles& mainStyles ) const
+ {
+ KoGenStyle gradientStyle( KPresenterDoc::STYLE_GRADIENT /*no family name*/);
+@@ -2170,6 +2300,56 @@
+ return offset;
+ }
+
++void KP2DObject::draw( QPainter *_painter, KoZoomHandler*_zoomHandler,
++ int pageNum, SelectionMode selectionMode, bool drawContour )
++{
++ double ox = orig.x();
++ double oy = orig.y();
++ _painter->save();
++
++ // Draw the shadow if any
++ if ( shadowDistance > 0 && !drawContour )
++ {
++ _painter->save();
++ QPen tmpPen( pen );
++ pen.setColor( shadowColor );
++ QBrush tmpBrush( m_brush.getBrush() );
++ QBrush shadowBrush( tmpBrush );
++ shadowBrush.setColor( shadowColor );
++ m_brush.setBrush( shadowBrush );
++
++ if ( angle == 0 )
++ {
++ double sx = ox;
++ double sy = oy;
++ getShadowCoords( sx, sy );
++
++ _painter->translate( _zoomHandler->zoomItX( sx ), _zoomHandler->zoomItY( sy ) );
++ paint( _painter, _zoomHandler, pageNum, true, drawContour );
++ }
++ else
++ {
++ _painter->translate( _zoomHandler->zoomItX(ox), _zoomHandler->zoomItY(oy) );
++ rotateObjectWithShadow(_painter, _zoomHandler);
++ paint( _painter, _zoomHandler, pageNum, true, drawContour );
++ }
++
++ pen = tmpPen;
++ m_brush.setBrush( tmpBrush );
++ _painter->restore();
++ }
++
++ _painter->translate( _zoomHandler->zoomItX(ox), _zoomHandler->zoomItY(oy) );
++
++ if ( angle != 0 )
++ rotateObject(_painter,_zoomHandler);
++ paint( _painter, _zoomHandler, pageNum, false, drawContour );
++
++ _painter->restore();
++
++ KPObject::draw( _painter, _zoomHandler, pageNum, selectionMode, drawContour );
++}
++
+ void KP2DObject::flip( bool horizontal ) {
+ KPObject::flip( horizontal );
+
+Index: kpresenter/kppolygonobject.cc
+===================================================================
+--- kpresenter/kppolygonobject.cc (revision 427945)
++++ kpresenter/kppolygonobject.cc (working copy)
+@@ -68,38 +68,24 @@
+ return dcop;
+ }
+
+-bool KPPolygonObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPPolygonObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- //FIXME me wait that it will define into oo spec
+- xmlWriter.startElement( "draw:regular-polygon" );
+- xmlWriter.addAttribute( "draw:style-name", KP2DObject::saveOasisBackgroundStyle( xmlWriter, context.mainStyles(), indexObj ) );
+-
+- QString listOfPoint;
+- int maxX=0;
+- int maxY=0;
+- KoPointArray::ConstIterator it;
+- for ( it = points.begin(); it != points.end(); ++it ) {
+- int tmpX = 0;
+- int tmpY = 0;
+- tmpX = ( int ) ( KoUnit::toMM( ( *it ).x() )*100 );
+- tmpY = ( int ) ( KoUnit::toMM( ( *it ).y() )*100 );
+- if ( !listOfPoint.isEmpty() )
+- listOfPoint += QString( " %1,%2" ).arg( tmpX ).arg( tmpY );
+- else
+- listOfPoint = QString( "%1,%2" ).arg( tmpX ).arg( tmpY );
+- maxX = QMAX( maxX, tmpX );
+- maxY = QMAX( maxY, tmpY );
++ sc.xmlWriter.addAttribute( "draw:corners", cornersValue );
++ sc.xmlWriter.addAttribute( "draw:concave", checkConcavePolygon ? "true" : "false" );
++ if ( checkConcavePolygon )
++ {
++ sc.xmlWriter.addAttribute( "draw:sharpness", QString( "%1%").arg( sharpnessValue ) );
+ }
+- xmlWriter.addAttribute("draw:points", listOfPoint );
+- xmlWriter.addAttribute("svg:viewBox", QString( "0 0 %1 %2" ).arg( maxX ).arg( maxY ) );
+
+- if( !objectName.isEmpty())
+- xmlWriter.addAttribute( "draw:name", objectName );
+- xmlWriter.endElement();
+ return true;
+ }
+
++const char * KPPolygonObject::getOasisElementName() const
++{
++ return "draw:regular-polygon";
++}
+
++
+ QDomDocumentFragment KPPolygonObject::save( QDomDocument& doc, double offset )
+ {
+ QDomDocumentFragment fragment = KP2DObject::save( doc, offset );
+@@ -133,26 +119,14 @@
+ {
+ kdDebug()<<"void KPPolygonObject::loadOasis( const QDomElement &element )***********\n";
+ KP2DObject::loadOasis( element,context, info );
+- //load point.
+- QStringList ptList = QStringList::split(' ', element.attributeNS( KoXmlNS::draw, "points", QString::null));
+-
+- QString pt_x, pt_y;
+- double tmp_x, tmp_y;
+- unsigned int index = 0;
+- for (QStringList::Iterator it = ptList.begin(); it != ptList.end(); ++it)
++ cornersValue = element.attributeNS( KoXmlNS::draw, "corners", QString::null ).toInt();
++ checkConcavePolygon = element.attributeNS( KoXmlNS::draw, "concave", QString::null ) == "true";
++ sharpnessValue = 0;
++ if ( checkConcavePolygon )
+ {
+- tmp_x = (*it).section(',',0,0).toInt() / 100;
+- tmp_y = (*it).section(',',1,1).toInt() / 100;
+-
+- pt_x.setNum(tmp_x);
+- pt_x+="mm";
+-
+- pt_y.setNum(tmp_y);
+- pt_y+="mm";
+-
+- points.putPoints( index, 1, KoUnit::parseValue(pt_x),KoUnit::parseValue(pt_y) );
+- ++index;
++ sharpnessValue = element.attributeNS( KoXmlNS::draw, "sharpness", QString::null ).remove( '%').toInt();
+ }
++ drawPolygon();
+ }
+
+ double KPPolygonObject::load( const QDomElement &element )
+@@ -280,7 +254,8 @@
+
+ void KPPolygonObject::drawPolygon()
+ {
+- KoRect _rect = points.boundingRect();
++ kdDebug()<<"void KPPolygonObject::drawPolygon()***********\n";
++ KoRect _rect( 0, 0, ext.width(), ext.height() );
+ double angle = 2 * M_PI / cornersValue;
+ double diameter = static_cast<double>( QMAX( _rect.width(), _rect.height() ) );
+ double radius = diameter * 0.5;
+Index: kpresenter/kpcubicbeziercurveobject.cc
+===================================================================
+--- kpresenter/kpcubicbeziercurveobject.cc (revision 427945)
++++ kpresenter/kpcubicbeziercurveobject.cc (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 2001 Toshitaka Fujioka <fujioka@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -60,16 +61,17 @@
+ return dcop;
+ }
+
+-bool KPCubicBezierCurveObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPCubicBezierCurveObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- kdDebug()<<"bool KPCubicBezierCurveObject::saveOasis( KoXmlWriter &xmlWriter ) not implemented\n";
+- //saveOasisShadowElement( styleobjectauto );
+- //KPPointObject::saveOasisStrokeElement( KoGenStyles& mainStyles );
+-//
+- //call saveOasisStrokeElement( KoGenStyle &styleobjectauto );
++ kdDebug()<<"bool KPCubicBezierCurveObject::saveOasis( KoXmlWriter & xmlWriter ) not implemented\n";
+ return true;
+ }
+
++const char * KPCubicBezierCurveObject::getOasisElementName() const
++{
++ return "draw:custom-shape";
++}
++
+ void KPCubicBezierCurveObject::loadOasis( const QDomElement &element, KoOasisContext & context, KPRLoadingInfo* info )
+ {
+ //todo
+Index: kpresenter/kpquadricbeziercurveobject.h
+===================================================================
+--- kpresenter/kpquadricbeziercurveobject.h (revision 427945)
++++ kpresenter/kpquadricbeziercurveobject.h (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 2001 Toshitaka Fujioka <fujioka@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -43,7 +44,6 @@
+ virtual QString getTypeString() const { return i18n("Quadric Bezier Curve"); }
+
+ virtual QDomDocumentFragment save( QDomDocument& doc, double offset );
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
+ virtual void loadOasis( const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info );
+
+ virtual double load( const QDomElement &element );
+@@ -53,6 +53,9 @@
+ bool isClosed()const;
+
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++
+ virtual void updatePoints( double _fx, double _fy );
+ virtual KoPointArray getDrawingPoints() const;
+
+Index: kpresenter/autoforms/Arrows/ArrowLeftUp.desktop
+===================================================================
+--- kpresenter/autoforms/Arrows/ArrowLeftUp.desktop (revision 427945)
++++ kpresenter/autoforms/Arrows/ArrowLeftUp.desktop (working copy)
+@@ -3,6 +3,7 @@
+ Type=Link
+ URL=.source/ArrowLeftUp.atf
+ Name=Arrow Left/Up
++Name[cy]=Saeth i'r Chwith/i Fyny
+ Name[da]=Pil til venstre/op
+ Name[de]=Pfeil nach links/oben
+ Name[el]=Αριστερό/πάνω βέλος
+Index: kpresenter/autoforms/Arrows/ArrowRightDown.desktop
+===================================================================
+--- kpresenter/autoforms/Arrows/ArrowRightDown.desktop (revision 427945)
++++ kpresenter/autoforms/Arrows/ArrowRightDown.desktop (working copy)
+@@ -3,6 +3,7 @@
+ Type=Link
+ URL=.source/ArrowRightDown.atf
+ Name=Arrow Right/Down
++Name[cy]=Saeth i'r Dde/i Lawr
+ Name[da]=Pil til højre/ned
+ Name[de]=Pfeil nach rechts/unten
+ Name[el]=Δεξί/κάτω βέλος
+Index: kpresenter/autoforms/Arrows/ArrowDown.desktop
+===================================================================
+--- kpresenter/autoforms/Arrows/ArrowDown.desktop (revision 427945)
++++ kpresenter/autoforms/Arrows/ArrowDown.desktop (working copy)
+@@ -3,6 +3,7 @@
+ Type=Link
+ URL=.source/ArrowDown.atf
+ Name=Arrow Down
++Name[cy]=Saeth i Lawr
+ Name[da]=Pil ned
+ Name[de]=Pfeil nach unten
+ Name[el]=Κάτω βέλος
+Index: kpresenter/autoforms/Arrows/ArrowRight.desktop
+===================================================================
+--- kpresenter/autoforms/Arrows/ArrowRight.desktop (revision 427945)
++++ kpresenter/autoforms/Arrows/ArrowRight.desktop (working copy)
+@@ -3,6 +3,7 @@
+ Type=Link
+ URL=.source/ArrowRight.atf
+ Name=Arrow Right
++Name[cy]=Saeth i'r Dde
+ Name[da]=Pil til højre
+ Name[de]=Pfeil nach rechts
+ Name[el]=Δεξί βέλος
+Index: kpresenter/autoforms/Arrows/ArrowLeftDown.desktop
+===================================================================
+--- kpresenter/autoforms/Arrows/ArrowLeftDown.desktop (revision 427945)
++++ kpresenter/autoforms/Arrows/ArrowLeftDown.desktop (working copy)
+@@ -3,6 +3,7 @@
+ Type=Link
+ URL=.source/ArrowLeftDown.atf
+ Name=Arrow Left/Down
++Name[cy]=Saeth i'r Chwith/i Lawr
+ Name[da]=Pil til venstre/ned
+ Name[de]=Pfeil nach links/unten
+ Name[el]=Αριστερό/κάτω βέλος
+Index: kpresenter/autoforms/Arrows/ArrowRightUp.desktop
+===================================================================
+--- kpresenter/autoforms/Arrows/ArrowRightUp.desktop (revision 427945)
++++ kpresenter/autoforms/Arrows/ArrowRightUp.desktop (working copy)
+@@ -3,6 +3,7 @@
+ Type=Link
+ URL=.source/ArrowRightUp.atf
+ Name=Arrow Right/Up
++Name[cy]=Saeth i'r Chwith/i Fyny
+ Name[da]=Pil til højre/op
+ Name[de]=Pfeil nach rechts/oben
+ Name[el]=Δεξί/πάνω βέλος
+Index: kpresenter/autoforms/Arrows/ArrowUp.desktop
+===================================================================
+--- kpresenter/autoforms/Arrows/ArrowUp.desktop (revision 427945)
++++ kpresenter/autoforms/Arrows/ArrowUp.desktop (working copy)
+@@ -3,6 +3,7 @@
+ Type=Link
+ URL=.source/ArrowUp.atf
+ Name=Arrow Up
++Name[cy]=Saeth i Fyny
+ Name[da]=Pil op
+ Name[de]=Pfeil nach oben
+ Name[el]=Πάνω βέλος
+Index: kpresenter/autoforms/Arrows/ArrowLeft.desktop
+===================================================================
+--- kpresenter/autoforms/Arrows/ArrowLeft.desktop (revision 427945)
++++ kpresenter/autoforms/Arrows/ArrowLeft.desktop (working copy)
+@@ -3,6 +3,7 @@
+ Type=Link
+ URL=.source/ArrowLeft.atf
+ Name=Arrow Left
++Name[cy]=Saeth i'r Chwith
+ Name[da]=Pil til venstre
+ Name[de]=Pfeil nach links
+ Name[el]=Αριστερό βέλος
+Index: kpresenter/kpfreehandobject.cc
+===================================================================
+--- kpresenter/kpfreehandobject.cc (revision 427945)
++++ kpresenter/kpfreehandobject.cc (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 2001 Toshitaka Fujioka <fujioka@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -54,21 +55,26 @@
+ return dcop;
+ }
+
+-bool KPFreehandObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPFreehandObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- kdDebug()<<"bool KPFreehandObject::saveOasis( KoXmlWriter &xmlWriter ) not implemented\n";
+- xmlWriter.startElement( "draw:path" );
+- //FIXME !!!!!!!!!!!!!!!!!!!!!
+-//xmlWriter.addAttribute( "draw:style-name", KP2DObject::saveOasisBackgroundStyle( xmlWriter, mainStyles ) );
+-//call saveOasisStrokeElement( KoGenStyle &styleobjectauto );
+- if( !objectName.isEmpty())
+- xmlWriter.addAttribute( "draw:name", objectName );
+- //save path I don't know how to do.
+- //add "svg:viewBox" add "svg:d"
+- xmlWriter.endElement();
++ kdDebug()<<"bool KPFreehandObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) not implemented\n";
+ return true;
+ }
+
++const char * KPFreehandObject::getOasisElementName() const
++{
++ return "draw:path";
++}
++
++void KPFreehandObject::loadOasis( const QDomElement &element, KoOasisContext & context, KPRLoadingInfo* info )
++{
++ //todo
++ //we use draw:path
++
++ //load marker
++ loadOasisMarker( context );
++}
++
+ QDomDocumentFragment KPFreehandObject::save( QDomDocument& doc,double offset )
+ {
+ return KPPointObject::save( doc, offset );
+Index: kpresenter/kppieobject.cc
+===================================================================
+--- kpresenter/kppieobject.cc (revision 427945)
++++ kpresenter/kppieobject.cc (working copy)
+@@ -1,5 +1,6 @@
+ /* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -86,40 +87,38 @@
+ return fragment;
+ }
+
+-bool KPPieObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPPieObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- xmlWriter.startElement( ( ext.width() == ext.height() ) ? "draw:circle" : "draw:ellipse" );
+- xmlWriter.addAttribute( "draw:style-name", KP2DObject::saveOasisBackgroundStyle( xmlWriter, context.mainStyles(),indexObj ) );
+-
+- if( !objectName.isEmpty())
+- xmlWriter.addAttribute( "draw:name", objectName );
+ switch( pieType )
+ {
+- case PT_PIE:
+- xmlWriter.addAttribute( "draw:kind", "section" );
+- break;
+- case PT_CHORD:
+- xmlWriter.addAttribute( "draw:kind", "cut" );
+- break;
+- case PT_ARC:
+- xmlWriter.addAttribute( "draw:kind", "arc" );
+- break;
+- default:
+- kdDebug()<<" type of pie not supported\n";
++ case PT_PIE:
++ sc.xmlWriter.addAttribute( "draw:kind", "section" );
++ break;
++ case PT_CHORD:
++ sc.xmlWriter.addAttribute( "draw:kind", "cut" );
++ break;
++ case PT_ARC:
++ sc.xmlWriter.addAttribute( "draw:kind", "arc" );
++ break;
++ default:
++ kdDebug() << " type of pie not supported" << endl;
+ }
+- int startangle = 45;
+- if ( p_angle != 0.0 )
+- startangle = ( ( int )p_angle )/16;
+- xmlWriter.addAttribute( "draw:start-angle", startangle );
+- int endangle = endangle = ( ( int ) p_len/16 )+startangle;
+- xmlWriter.addAttribute( "draw:end-angle", endangle );
+
+- //we don't have a simple object
+- xmlWriter.endElement();
++ int startangle = ( (int)p_angle / 16 );
++ sc.xmlWriter.addAttribute( "draw:start-angle", startangle );
++
++ int endangle = ( (int) p_len / 16 ) + startangle;
++ sc.xmlWriter.addAttribute( "draw:end-angle", endangle );
++
+ return true;
+ }
+
++const char * KPPieObject::getOasisElementName() const
++{
++ return ext.width() == ext.height() ? "draw:circle" : "draw:ellipse";
++}
+
++
+ void KPPieObject::loadOasis(const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info)
+ {
+ kdDebug()<<"void KPPieObject::loadOasis(const QDomElement &element) ***************\n";
+Index: kpresenter/kpobject.h
+===================================================================
+--- kpresenter/kpobject.h (revision 427945)
++++ kpresenter/kpobject.h (working copy)
+@@ -136,9 +136,25 @@
+ virtual double load(const QDomElement &element);
+ virtual void loadOasis(const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info);
+
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext &context, int indexObj ) const =0;
++ struct KPOasisSaveContext
++ {
++ KPOasisSaveContext( KoXmlWriter &_xmlWriter, KoSavingContext &_context,
++ int &_indexObj, int &_partIndexObj, bool _onMaster )
++ : xmlWriter( _xmlWriter )
++ , context( _context )
++ , indexObj( _indexObj )
++ , partIndexObj( _partIndexObj )
++ , onMaster( _onMaster ) {};
++
++ KoXmlWriter &xmlWriter;
++ KoSavingContext &context;
++ int &indexObj;
++ int &partIndexObj;
++ bool onMaster;
++ };
+
+- void saveOasisPosObject( KoXmlWriter &xmlWriter, int indexObj ) const;
++ virtual bool saveOasisObject( KPOasisSaveContext &sc ) const;
++
+ //return true if we have a animation into object
+ bool saveOasisObjectStyleShowAnimation( KoXmlWriter &animation, int objectId );
+ bool saveOasisObjectStyleHideAnimation( KoXmlWriter &animation, int objectId );
+@@ -297,8 +313,17 @@
+
+ void saveOasisObjectProtectStyle( KoGenStyle &styleobjectauto ) const;
+ void saveOasisShadowElement( KoGenStyle &styleobjectauto ) const;
+- virtual void saveOasisPictureElement( KoGenStyle& /*styleobjectauto*/ ) const {};
+
++ QString getStyle( KPOasisSaveContext &sc ) const;
++ virtual void fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const;
++ /**
++ * Get the element name for saving the object
++ */
++ virtual const char * getOasisElementName() const = 0;
++ //virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const = 0;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++ virtual void saveOasisPosObject( KoXmlWriter &xmlWriter, int indexObj ) const;
++
+ float angle;
+ KoPoint orig;
+ KoSize ext;
+@@ -378,6 +403,19 @@
+
+ protected:
+ /**
++ * Helper method for saving draw:points. The svg:viewBox is also saved.
++ */
++ static bool saveOasisDrawPoints( const KoPointArray &points, KPOasisSaveContext &sc );
++
++ /**
++ * Helper method for loading draw:points. The svg:viewBox is taken into account.
++ */
++ bool loadOasisDrawPoints( KoPointArray &points, const QDomElement &element,
++ KoOasisContext & context, KPRLoadingInfo *info );
++
++ virtual void fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const;
++
++ /**
+ * @ref save() only saves if the pen is different from the default pen.
+ * The default pen can vary depending on the subclass of KPShadowObject
+ * (e.g. it's a black solidline for lines and rects, but it's NoPen
+@@ -445,14 +483,16 @@
+ virtual QDomDocumentFragment save( QDomDocument& doc, double offset );
+ virtual double load(const QDomElement &element);
+ virtual void loadOasis(const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info);
++ virtual void draw( QPainter *_painter, KoZoomHandler*_zoomHandler,
++ int pageNum, SelectionMode selectionMode, bool drawContour = FALSE );
+
+ virtual void flip(bool horizontal );
+
+ protected:
+ QString saveOasisGradientStyle( KoGenStyles& mainStyles ) const;
+- QString saveOasisBackgroundStyle( KoXmlWriter &xmlWriter, KoGenStyles& mainStyles, int indexObj ) const;
+
+- virtual void saveOasisMarginElement( KoGenStyle& /*styleobjectauto*/ ) const { /* nothing just used into kptextobject*/};
++ virtual void fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const;
++ void saveOasisBackgroundElement( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const;
+
+ KPrBrush m_brush;
+ KPGradient *gradient;
+Index: kpresenter/kptextobject.h
+===================================================================
+--- kpresenter/kptextobject.h (revision 427945)
++++ kpresenter/kptextobject.h (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -81,7 +82,6 @@
+ virtual QDomDocumentFragment save( QDomDocument& doc, double offset );
+ virtual double load(const QDomElement &element);
+ virtual void loadOasis(const QDomElement &element, KoOasisContext& context, KPRLoadingInfo *info);
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
+ virtual void saveOasisMarginElement( KoGenStyle &styleobjectauto ) const;
+
+ virtual void paint( QPainter *_painter, KoZoomHandler*_zoomHandler,
+@@ -180,9 +180,14 @@
+ void slotAfterFormatting( int, KoTextParag*, bool* );
+ void slotParagraphDeleted(KoTextParag*_parag);
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++
+ virtual QDomElement saveKTextObject( QDomDocument& doc );
+ QDomElement saveHelper(const QString &tmpText,KoTextFormat*lastFormat ,QDomDocument &doc);
+
++ virtual void fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const;
++
+ virtual void loadKTextObject( const QDomElement &e );
+ void drawText( QPainter* _painter, KoZoomHandler* zoomHandler, bool onlyChanged, KoTextCursor* cursor, bool resetChanged );
+ void drawParags( QPainter *p, KoZoomHandler* zoomHandler, const QColorGroup& cg, int from, int to );
+Index: kpresenter/kppolygonobject.h
+===================================================================
+--- kpresenter/kppolygonobject.h (revision 427945)
++++ kpresenter/kppolygonobject.h (working copy)
+@@ -59,7 +59,6 @@
+ int getSharpnessValue() const { return sharpnessValue; }
+
+ virtual QDomDocumentFragment save( QDomDocument& doc, double offset );
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
+
+ virtual double load( const QDomElement &element );
+ virtual void loadOasis( const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info );
+@@ -69,6 +68,9 @@
+ virtual KoPoint getRealOrig() const;
+
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++
+ virtual void paint( QPainter *_painter,KoZoomHandler*_zoomHandler,
+ int /* pageNum */, bool drawingShadow, bool drawContour );
+
+Index: kpresenter/kpgroupobject.cc
+===================================================================
+--- kpresenter/kpgroupobject.cc (revision 427945)
++++ kpresenter/kpgroupobject.cc (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -132,24 +133,23 @@
+ }
+
+
+-bool KPGroupObject::saveOasis(KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj) const
++bool KPGroupObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- xmlWriter.startElement( "draw:g" );
+-
+ QPtrListIterator<KPObject> it( objects );
+ for ( ; it.current() ; ++it )
+ {
+-#if 0
+- if ( it.current()->getType() == OT_PART )
+- continue;
+-#endif
+- it.current()->saveOasis( xmlWriter, context, indexObj );
++ //TODO what to do with parts?
++ it.current()->saveOasisObject( sc );
+ }
+- xmlWriter.endElement();
+ return true;
+ }
+
++const char * KPGroupObject::getOasisElementName() const
++{
++ return "draw:g";
++}
+
++
+ void KPGroupObject::loadOasisGroupObject( KPresenterDoc *_doc, KPrPage * newpage, QDomNode &element, KoOasisContext & context, KPRLoadingInfo *info)
+ {
+ //KPObject::loadOasis( element, context, info );
+Index: kpresenter/kprectobject.cc
+===================================================================
+--- kpresenter/kprectobject.cc (revision 427945)
++++ kpresenter/kprectobject.cc (working copy)
+@@ -76,18 +76,19 @@
+ return fragment;
+ }
+
+-bool KPRectObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPRectObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- xmlWriter.startElement( "draw:rect" );
+- xmlWriter.addAttribute( "draw:style-name", KP2DObject::saveOasisBackgroundStyle( xmlWriter, context.mainStyles(), indexObj ) );
+-
+- if( !objectName.isEmpty())
+- xmlWriter.addAttribute( "draw:name", objectName );
+- xmlWriter.endElement();
++ // TODO corner-radius
+ return true;
+ }
+
+
++const char * KPRectObject::getOasisElementName() const
++{
++ return "draw:rect";
++}
++
++
+ void KPRectObject::loadOasis(const QDomElement &element, KoOasisContext&context, KPRLoadingInfo *info)
+ {
+ KP2DObject::loadOasis(element, context, info);
+Index: kpresenter/kpellipseobject.cc
+===================================================================
+--- kpresenter/kpellipseobject.cc (revision 427945)
++++ kpresenter/kpellipseobject.cc (working copy)
+@@ -116,14 +116,14 @@
+ return size;
+ }
+
+-bool KPEllipseObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPEllipseObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- xmlWriter.startElement( ( ext.width() == ext.height() ) ? "draw:circle" : "draw:ellipse" );
+- xmlWriter.addAttribute( "draw:style-name", KP2DObject::saveOasisBackgroundStyle( xmlWriter, context.mainStyles(), indexObj ) );
+-
+- if( !objectName.isEmpty())
+- xmlWriter.addAttribute( "draw:name", objectName );
+- xmlWriter.endElement();
++ // nothing to do
+ return true;
+ }
+
++const char * KPEllipseObject::getOasisElementName() const
++{
++ return ext.width() == ext.height() ? "draw:circle" : "draw:ellipse";
++}
++
+Index: kpresenter/kppolylineobject.h
+===================================================================
+--- kpresenter/kppolylineobject.h (revision 427945)
++++ kpresenter/kppolylineobject.h (working copy)
+@@ -47,8 +47,10 @@
+ virtual QDomDocumentFragment save( QDomDocument& doc, double offset );
+ virtual double load( const QDomElement &element );
+ virtual void loadOasis(const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info);
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
+
++protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
+ };
+
+ #endif
+Index: kpresenter/kpclosedlineobject.cc
+===================================================================
+--- kpresenter/kpclosedlineobject.cc (revision 427945)
++++ kpresenter/kpclosedlineobject.cc (working copy)
+@@ -90,36 +90,18 @@
+ return fragment;
+ }
+
+-bool KPClosedLineObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPClosedLineObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- xmlWriter.startElement( "draw:polygon" );
+- xmlWriter.addAttribute( "draw:style-name", KP2DObject::saveOasisBackgroundStyle( xmlWriter, context.mainStyles(), indexObj ) );
+-
+- QString listOfPoint;
+- int maxX=0;
+- int maxY=0;
+- KoPointArray::ConstIterator it;
+- for ( it = points.begin(); it != points.end(); ++it ) {
+- int tmpX = 0;
+- int tmpY = 0;
+- tmpX = ( int ) ( KoUnit::toMM( ( *it ).x() )*100 );
+- tmpY = ( int ) ( KoUnit::toMM( ( *it ).y() )*100 );
+- if ( !listOfPoint.isEmpty() )
+- listOfPoint += QString( " %1,%2" ).arg( tmpX ).arg( tmpY );
+- else
+- listOfPoint = QString( "%1,%2" ).arg( tmpX ).arg( tmpY );
+- maxX = QMAX( maxX, tmpX );
+- maxY = QMAX( maxY, tmpY );
+- }
+- xmlWriter.addAttribute("draw:points", listOfPoint );
+- xmlWriter.addAttribute("svg:viewBox", QString( "0 0 %1 %2" ).arg( maxX ).arg( maxY ) );
+-
+- if( !objectName.isEmpty())
+- xmlWriter.addAttribute( "draw:name", objectName );
+- xmlWriter.endElement();
++ KPShadowObject::saveOasisDrawPoints( points, sc );
+ return true;
+ }
+
++const char * KPClosedLineObject::getOasisElementName() const
++{
++ return "draw:polygon";
++}
++
++
+ double KPClosedLineObject::load( const QDomElement &element )
+ {
+ double offset = KP2DObject::load( element );
+@@ -269,26 +251,7 @@
+ {
+ kdDebug()<<"void KPClosedLineObject::loadOasis( const QDomElement &element )***********\n";
+ KP2DObject::loadOasis( element,context, info );
+- //load point.
+- QStringList ptList = QStringList::split(' ', element.attributeNS( KoXmlNS::draw, "points", QString::null));
+-
+- QString pt_x, pt_y;
+- double tmp_x, tmp_y;
+- unsigned int index = 0;
+- for (QStringList::Iterator it = ptList.begin(); it != ptList.end(); ++it)
+- {
+- tmp_x = (*it).section(',',0,0).toInt() / 100;
+- tmp_y = (*it).section(',',1,1).toInt() / 100;
+-
+- pt_x.setNum(tmp_x);
+- pt_x+="mm";
+-
+- pt_y.setNum(tmp_y);
+- pt_y+="mm";
+-
+- points.putPoints( index, 1, KoUnit::parseValue(pt_x),KoUnit::parseValue(pt_y) );
+- ++index;
+- }
++ KPShadowObject::loadOasisDrawPoints( points, element, context, info );
+ }
+
+ KoSize KPClosedLineObject::getRealSize() const {
+Index: kpresenter/kpclosedlineobject.h
+===================================================================
+--- kpresenter/kpclosedlineobject.h (revision 427945)
++++ kpresenter/kpclosedlineobject.h (working copy)
+@@ -53,13 +53,14 @@
+ virtual QDomDocumentFragment save( QDomDocument& doc, double offset );
+ virtual double load( const QDomElement &element );
+ virtual void loadOasis( const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info );
+- virtual bool saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const;
+
+ virtual void flip(bool horizontal );
+ virtual KoSize getRealSize() const;
+ virtual KoPoint getRealOrig() const;
+
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
+ virtual void paint( QPainter *_painter,KoZoomHandler*_zoomHandler,
+ int /* pageNum */, bool drawingShadow, bool drawContour );
+
+Index: kpresenter/kpresenter_doc.cc
+===================================================================
+--- kpresenter/kpresenter_doc.cc (revision 427945)
++++ kpresenter/kpresenter_doc.cc (working copy)
+@@ -1770,33 +1770,35 @@
+ else
+ newpage->appendObject(kppixmapobject);
+ }
+-
+- QDomNode object = KoDom::namedItemNS( o, KoXmlNS::draw, "object" );
+- kdDebug()<<" object:"<<object.isNull()<<endl;
+- if ( !object.isNull() )
+- {
+- fillStyleStack( o, context );
+- KPresenterChild *ch = new KPresenterChild( this );
+- QRect r;
+- KPPartObject *kppartobject = new KPPartObject( ch );
+- kppartobject->loadOasis( o, context, m_loadingInfo );
+- r = ch->geometry();
+- if ( groupObject )
+- groupObject->addObjects( kppartobject );
+- else
+- newpage->appendObject(kppartobject);
+- insertChild( ch );
+- kppartobject->setOrig( r.x(), r.y() );
+- kppartobject->setSize( r.width(), r.height() );
+- }
+ else
+ {
+- KPTextObject *kptextobject = new KPTextObject( this );
+- kptextobject->loadOasis(o, context, m_loadingInfo);
+- if ( groupObject )
+- groupObject->addObjects( kptextobject );
++ QDomNode object = KoDom::namedItemNS( o, KoXmlNS::draw, "object" );
++ kdDebug()<<" object:"<<object.isNull()<<endl;
++ if ( !object.isNull() )
++ {
++ fillStyleStack( o, context );
++ KPresenterChild *ch = new KPresenterChild( this );
++ QRect r;
++ KPPartObject *kppartobject = new KPPartObject( ch );
++ kppartobject->loadOasis( o, context, m_loadingInfo );
++ r = ch->geometry();
++ if ( groupObject )
++ groupObject->addObjects( kppartobject );
++ else
++ newpage->appendObject(kppartobject);
++ insertChild( ch );
++ kppartobject->setOrig( r.x(), r.y() );
++ kppartobject->setSize( r.width(), r.height() );
++ }
+ else
+- newpage->appendObject(kptextobject);
++ {
++ KPTextObject *kptextobject = new KPTextObject( this );
++ kptextobject->loadOasis(o, context, m_loadingInfo);
++ if ( groupObject )
++ groupObject->addObjects( kptextobject );
++ else
++ newpage->appendObject(kptextobject);
++ }
+ }
+ }
+ else if ( name == "rect" && isDrawNS) // rectangle
+@@ -1836,7 +1838,10 @@
+ fillStyleStack( o, context );
+ KPLineObject *kplineobject = new KPLineObject();
+ kplineobject->loadOasis(o, context, m_loadingInfo);
+- newpage->appendObject(kplineobject);
++ if ( groupObject )
++ groupObject->addObjects( kplineobject );
++ else
++ newpage->appendObject( kplineobject );
+ }
+ else if (name=="polyline" && isDrawNS) { // polyline
+ fillStyleStack( o, context );
+Index: kpresenter/kppixmapobject.cc
+===================================================================
+--- kpresenter/kppixmapobject.cc (revision 427945)
++++ kpresenter/kppixmapobject.cc (working copy)
+@@ -2,6 +2,7 @@
+
+ /* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -101,7 +102,7 @@
+ return QString::number( val )+"%";
+ }
+
+-void KPPixmapObject::saveOasisPictureElement( KoGenStyle &styleobjectauto )
++void KPPixmapObject::saveOasisPictureElement( KoGenStyle &styleobjectauto ) const
+ {
+
+ if ( bright != 0 )
+@@ -201,26 +202,24 @@
+ }
+ }
+
+-
+-bool KPPixmapObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPPixmapObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- xmlWriter.startElement( "draw:frame" );
+- xmlWriter.addAttribute( "draw:style-name", KP2DObject::saveOasisBackgroundStyle( xmlWriter, context.mainStyles(),indexObj ) );
+- if( !objectName.isEmpty())
+- xmlWriter.addAttribute( "draw:name", objectName );
++ sc.xmlWriter.startElement( "draw:image" );
++ sc.xmlWriter.addAttribute( "xlink:type", "simple" );
++ sc.xmlWriter.addAttribute( "xlink:show", "embed" );
++ sc.xmlWriter.addAttribute( "xlink:actuate", "onLoad" );
++ sc.xmlWriter.addAttribute( "xlink:href", imageCollection->getOasisFileName( image ) );
++ sc.xmlWriter.endElement();
+
+- xmlWriter.startElement( "draw:image" );
+- xmlWriter.addAttribute( "xlink:type", "simple" );
+- xmlWriter.addAttribute( "xlink:show", "embed" );
+- xmlWriter.addAttribute( "xlink:actuate", "onLoad" );
+- xmlWriter.addAttribute( "xlink:href", imageCollection->getOasisFileName(image) );
+- xmlWriter.endElement();
+-
+- xmlWriter.endElement();
+ return true;
+ }
+
++const char * KPPixmapObject::getOasisElementName() const
++{
++ return "draw:frame";
++}
+
++
+ // Deprecated, same as KPPixmapObject::loadPicture
+ void KPPixmapObject::loadImage( const QString & fileName )
+ {
+@@ -339,6 +338,12 @@
+
+ }
+
++void KPPixmapObject::fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const
++{
++ KP2DObject::fillStyle( styleObjectAuto, mainStyles );
++ saveOasisPictureElement( styleObjectAuto );
++}
++
+ void KPPixmapObject::loadOasis(const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info)
+ {
+ //load it into kpresenter_doc
+Index: kpresenter/kpautoformobject.h
+===================================================================
+--- kpresenter/kpautoformobject.h (revision 427945)
++++ kpresenter/kpautoformobject.h (working copy)
+@@ -63,10 +63,12 @@
+ { return lineEnd; }
+
+ virtual QDomDocumentFragment save( QDomDocument& doc,double offset );
+- virtual bool saveOasis( KoXmlWriter & xmlWriter, KoSavingContext& context, int indexObj ) const;
+
+ virtual double load(const QDomElement &element);
+ protected:
++ virtual const char * getOasisElementName() const;
++ virtual bool saveOasisObjectAttributes( KPOasisSaveContext &sc ) const;
++
+ virtual void paint( QPainter *_painter, KoZoomHandler *_zoomHandler,
+ int /* pageNum */, bool drawingShadow, bool drawContour = FALSE );
+
+Index: kpresenter/kppartobject.cc
+===================================================================
+--- kpresenter/kppartobject.cc (revision 427945)
++++ kpresenter/kppartobject.cc (working copy)
+@@ -63,39 +63,25 @@
+ zh->zoomItY( getOrig().y() + getSize().height() / 2 ) ) );
+ }
+
+-bool KPPartObject::saveOasisPart( KoXmlWriter &xmlWriter, KoStore *store, KoSavingContext& context, int indexObj, int partIndexObj, KoXmlWriter* manifestWriter ) const
++bool KPPartObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- kdDebug() << "KPPartObject::saveOasisPart " << partIndexObj << endl;
+- xmlWriter.startElement( "draw:frame" );
+- // saveOasisBackgroundStyle also saves draw:id, x,y,width and height....
+- xmlWriter.addAttribute( "draw:style-name", KP2DObject::saveOasisBackgroundStyle( xmlWriter, context.mainStyles(),indexObj ) );
+- if( !objectName.isEmpty())
+- xmlWriter.addAttribute( "draw:name", objectName );
++ kdDebug() << "KPPartObject::saveOasisPart " << sc.partIndexObj << endl;
+
+-#if 0 // geometry was already saved, this isn't needed
+- // geometry is no zoom value !
+- QRect _rect = child->geometry();
+- KoZoomHandler* zh = child->parent()->zoomHandler();
+- double tmpX = zh->unzoomItX( _rect.x() );
+- double tmpY = zh->unzoomItY( _rect.y() );
+- double tmpWidth = zh->unzoomItX( _rect.width() );
+- double tmpHeight = zh->unzoomItY( _rect.height() );
+- //child->setGeometry( QRect( tmpX, tmpY, tmpWidth, tmpHeight ) ); // ## why?
+- xmlWriter.addAttributePt( "svg:width", tmpWidth );
+- xmlWriter.addAttributePt( "svg:height", tmpHeight );
+- xmlWriter.addAttributePt( "svg:x", tmpX );
+- xmlWriter.addAttributePt( "svg:y", tmpY );
+-#endif
++ sc.xmlWriter.startElement( "draw:object" );
++ const QString name = QString( "Object_%1" ).arg( sc.partIndexObj + 1 );
++ ++sc.partIndexObj;
++ child->saveOasisAttributes( sc.xmlWriter, name );
+
+- xmlWriter.startElement( "draw:object" );
+- const QString name = QString( "Object_%1" ).arg( partIndexObj+1 );
+- child->saveOasisAttributes( xmlWriter, name );
+-
+- xmlWriter.endElement(); // draw:object
+- xmlWriter.endElement(); // draw:frame
++ sc.xmlWriter.endElement();
+ return true;
+ }
+
++const char * KPPartObject::getOasisElementName() const
++{
++ return "draw:frame";
++}
++
++
+ void KPPartObject::loadOasis(const QDomElement &element, KoOasisContext&context, KPRLoadingInfo *info)
+ {
+ kdDebug()<<"void KPPartObject::loadOasis(const QDomElement &element)******************\n";
+Index: kpresenter/kprpage.cc
+===================================================================
+--- kpresenter/kprpage.cc (revision 427945)
++++ kpresenter/kprpage.cc (working copy)
+@@ -131,6 +131,8 @@
+
+ void KPrPage::saveOasisObject( KoStore *store, KoXmlWriter &xmlWriter, KoSavingContext& context, int & indexObj, int &partIndexObj, KoXmlWriter* manifestWriter, bool stickyObj ) const
+ {
++ KPObject::KPOasisSaveContext sc( xmlWriter, context, indexObj, partIndexObj, isMasterPage() );
++
+ KTempFile animationTmpFile;
+ animationTmpFile.setAutoDelete( true );
+ QFile* tmpFile = animationTmpFile.file();
+@@ -139,17 +141,10 @@
+ QPtrListIterator<KPObject> it( m_objectList );
+ for ( ; it.current() ; ++it )
+ {
+- if ( it.current()->getType() == OT_PART )
+- {
+- static_cast<KPPartObject*>( it.current() )->saveOasisPart( xmlWriter, store, context, indexObj, partIndexObj, manifestWriter);
+- ++partIndexObj;
+- }
+- else
+- {
+- if ( it.current()== m_doc->header() || it.current()== m_doc->footer())
+- continue;
+- it.current()->saveOasis( xmlWriter, context, indexObj );
+- }
++ if ( it.current()== m_doc->header() || it.current()== m_doc->footer())
++ continue;
++ it.current()->saveOasisObject( sc );
++
+ if ( !stickyObj && it.current()->haveAnimation() )
+ {
+ kdDebug()<<" it.current()->haveAnimation() \n";
+Index: kpresenter/kptextobject.cc
+===================================================================
+--- kpresenter/kptextobject.cc (revision 427945)
++++ kpresenter/kptextobject.cc (working copy)
+@@ -212,22 +212,19 @@
+ return fragment;
+ }
+
+-bool KPTextObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPTextObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- xmlWriter.startElement( "draw:frame" );
+- // #### This should use KoGenStyle to share the style
+- xmlWriter.addAttribute( "draw:style-name", KP2DObject::saveOasisBackgroundStyle( xmlWriter, context.mainStyles(), indexObj ) );
+- if( !objectName.isEmpty())
+- xmlWriter.addAttribute( "draw:name", objectName );
+-
+- xmlWriter.startElement( "draw:text-box" );
+- m_textobj->saveOasisContent( xmlWriter, context );
+- xmlWriter.endElement();
+-
+- xmlWriter.endElement();
++ sc.xmlWriter.startElement( "draw:text-box" );
++ m_textobj->saveOasisContent( sc.xmlWriter, sc.context );
++ sc.xmlWriter.endElement();
+ return true;
+ }
+
++const char * KPTextObject::getOasisElementName() const
++{
++ return "draw:frame";
++}
++
+ void KPTextObject::saveOasisMarginElement( KoGenStyle &styleobjectauto ) const
+ {
+ kdDebug()<<"void KPTextObject::saveOasisMarginElement( KoGenStyle &styleobjectauto )\n";
+@@ -673,6 +670,12 @@
+ return element;
+ }
+
++void KPTextObject::fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const
++{
++ KP2DObject::fillStyle( styleObjectAuto, mainStyles );
++ saveOasisMarginElement( styleObjectAuto );
++}
++
+ void KPTextObject::loadKTextObject( const QDomElement &elem )
+ {
+ QDomElement e = elem.firstChild().toElement();
+Index: kpresenter/kplineobject.cc
+===================================================================
+--- kpresenter/kplineobject.cc (revision 427945)
++++ kpresenter/kplineobject.cc (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -64,21 +65,23 @@
+ }
+
+
+-QString KPLineObject::saveOasisStrokeElement( KoGenStyles& mainStyles ) const
++void KPLineObject::fillStyle( KoGenStyle& styleObjectAuto, KoGenStyles& mainStyles ) const
+ {
+- KoGenStyle styleobjectauto( KoGenStyle::STYLE_GRAPHICAUTO, "graphic" );
+- saveOasisMarkerElement( mainStyles, styleobjectauto );
+- KPShadowObject::saveOasisStrokeElement( mainStyles, styleobjectauto );
+- saveOasisShadowElement( styleobjectauto );
+- saveOasisObjectProtectStyle( styleobjectauto );
+- return mainStyles.lookup( styleobjectauto, "gr" );
++ KPShadowObject::fillStyle( styleObjectAuto, mainStyles );
++ saveOasisMarkerElement( mainStyles, styleObjectAuto );
+ }
+
+-bool KPLineObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++
++bool KPLineObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- xmlWriter.startElement( "draw:line" );
+- xmlWriter.addAttribute( "draw:style-name", saveOasisStrokeElement( context.mainStyles() ) );
++ // nothing to do
++ return true;
++}
+
++void KPLineObject::saveOasisPosObject( KoXmlWriter &xmlWriter, int indexObj ) const
++{
++ xmlWriter.addAttribute( "draw:id", "object" + QString::number( indexObj ) );
++
+ float x1 = orig.x();
+ float y1 = orig.y();
+ float x2 = x1 + ext.width();
+@@ -102,17 +105,24 @@
+ break;
+ }
+
++ //save all into pt
++ xmlWriter.addAttributePt( "svg:x1", x1 );
+ xmlWriter.addAttributePt( "svg:y1", y1 );
++ xmlWriter.addAttributePt( "svg:x2", x2 );
+ xmlWriter.addAttributePt( "svg:y2", y2 );
+- xmlWriter.addAttributePt( "svg:x1", x1 );
+- xmlWriter.addAttributePt( "svg:x2", x2 );
+
+- if( !objectName.isEmpty())
+- xmlWriter.addAttribute( "draw:name", objectName );
+- xmlWriter.endElement();
+- return true;
++ if ( kAbs( angle ) > 1E-6 )
++ {
++ double value = -1 * ( ( double )angle* M_PI )/180.0;
++ QString str=QString( "rotate (%1)" ).arg( value );
++ xmlWriter.addAttribute( "draw:transform", str );
++ }
+ }
+
++const char * KPLineObject::getOasisElementName() const
++{
++ return "draw:line";
++}
+
+ QDomDocumentFragment KPLineObject::save( QDomDocument& doc, double offset )
+ {
+@@ -163,10 +173,10 @@
+
+ kdDebug()<<"KPLineObject::loadOasis(const QDomElement &element) : real position x :"<<orig.x()<<" y "<<orig.y()<< " width :"<<ext.width()<<" height :"<<ext.height()<<endl;
+
+- QString attr = (x1 < x2) ? "marker-start" : "marker-end";
++ QString attr = (x1 <= x2) ? "marker-start" : "marker-end";
+ loadOasisMarkerElement( context, attr, lineBegin );
+
+- attr = (x1 < x2) ? "marker-end" : "marker-start";
++ attr = (x1 <= x2) ? "marker-end" : "marker-start";
+ loadOasisMarkerElement( context, attr, lineEnd );
+ }
+
+Index: kpresenter/kppolylineobject.cc
+===================================================================
+--- kpresenter/kppolylineobject.cc (revision 427945)
++++ kpresenter/kppolylineobject.cc (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 2001 Toshitaka Fujioka <fujioka@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -29,6 +30,7 @@
+ #include <kdebug.h>
+ #include <kozoomhandler.h>
+ #include <kooasiscontext.h>
++#include <koUnit.h>
+
+ #include <math.h>
+ using namespace std;
+@@ -68,22 +70,22 @@
+ return KPPointObject::load( element );
+ }
+
+-bool KPPolylineObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPPolylineObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- xmlWriter.startElement( "draw:polyline" );
+- saveOasisPosObject(xmlWriter, indexObj );
+- xmlWriter.addAttribute( "draw:style-name", saveOasisStrokeElement( context.mainStyles() ) );
+-
+- KPPointObject::saveOasis( xmlWriter, context );
+- if( !objectName.isEmpty())
+- xmlWriter.addAttribute( "draw:name", objectName );
+- xmlWriter.endElement();
++ KPShadowObject::saveOasisDrawPoints( points, sc );
+ return true;
+ }
+
++const char * KPPolylineObject::getOasisElementName() const
++{
++ return "draw:polyline";
++}
+
++
+ void KPPolylineObject::loadOasis(const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info)
+ {
+ kdDebug()<<"void KPPolylineObject::loadOasis(const QDomElement &element)************\n";
+- KPPointObject::loadOasis( element,context, info );
++ KPShadowObject::loadOasis( element, context, info );
++ KPShadowObject::loadOasisDrawPoints( points, element, context, info );
++ loadOasisMarker( context );
+ }
+Index: kpresenter/kpquadricbeziercurveobject.cc
+===================================================================
+--- kpresenter/kpquadricbeziercurveobject.cc (revision 427945)
++++ kpresenter/kpquadricbeziercurveobject.cc (working copy)
+@@ -1,6 +1,7 @@
+ // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
+ /* This file is part of the KDE project
+ Copyright (C) 2001 Toshitaka Fujioka <fujioka@kde.org>
++ Copyright (C) 2005 Thorsten Zachmann <zachmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -60,16 +61,18 @@
+ return *this;
+ }
+
+-bool KPQuadricBezierCurveObject::saveOasis( KoXmlWriter &xmlWriter, KoSavingContext& context, int indexObj ) const
++bool KPQuadricBezierCurveObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const
+ {
+- kdDebug()<<"bool KPQuadricBezierCurveObject::saveOasis( KoXmlWriter &xmlWriter ) not implemented\n";
+- //todo
+- // call saveOasisShadowElement( styleobjectauto );
+- // call saveOasisStrokeElement( KoGenStyle &styleobjectauto );
+- //call xmlWriter.addAttribute( "draw:style-name", style );
++ kdDebug()<<"bool KPQuadricBezierCurveObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) not implemented\n";
+ return true;
+ }
+
++const char * KPQuadricBezierCurveObject::getOasisElementName() const
++{
++ // use draw:path ?
++ return "draw:custom-shape";
++}
++
+ void KPQuadricBezierCurveObject::loadOasis( const QDomElement &element, KoOasisContext & context, KPRLoadingInfo *info )
+ {
+ //todo
+Index: kspread/dialogs/kspread_dlg_database.cc
+===================================================================
+--- kspread/dialogs/kspread_dlg_database.cc (revision 427945)
++++ kspread/dialogs/kspread_dlg_database.cc (working copy)
+@@ -600,8 +600,8 @@
+ // An update command must also be followed by a space, or it would be parsed
+ // as an identifier.
+ // For sanity, also check that there is a SELECT
+- QRegExp couldModifyDB( "(^|[( \s])(UPDATE|DELETE|INSERT|CREATE) ", false /* cs */ );
+- QRegExp couldQueryDB( "(^|[( \s])(SELECT) ", false /* cs */ );
++ QRegExp couldModifyDB( "(^|[( \\s])(UPDATE|DELETE|INSERT|CREATE) ", false /* cs */ );
++ QRegExp couldQueryDB( "(^|[( \\s])(SELECT) ", false /* cs */ );
+
+ if (couldModifyDB.search( queryStr ) != -1 || couldQueryDB.search ( queryStr ) == -1 )
+ {
+Index: kspread/CHANGES
+===================================================================
+--- kspread/CHANGES (revision 427945)
++++ kspread/CHANGES (working copy)
+@@ -1,5 +1,9 @@
++since 1.4.0
++===========
++- Fix potential crash when rendering obscured cells (#108659)
++
+ since 1.4-beta1
+-=============================
++===============
+ - Use General/Blank Worksheet as default template.
+ - KSpread crashes on exit if there is a chart in the sheet (#101915).
+ - The data editor is disabled for charts which has been loaded.
+Index: kspread/kspreadpart.desktop
+===================================================================
+--- kspread/kspreadpart.desktop (revision 427945)
++++ kspread/kspreadpart.desktop (working copy)
+@@ -19,6 +19,7 @@
+ Name[pt]=Componente de Folha de Cálculo do KOffice
+ Name[pt_BR]=Componente de Planilha de Cálculo do KOffice
+ Name[ru]=Компонент электронных таблиц KOffice
++Name[sl]=Komponenta za preglednice za KOffice
+ Name[sr]=KOffice-ова компонента за унакрсне табеле
+ Name[sr@Latn]=KOffice-ova komponenta za unakrsne tabele
+ Name[sv]=Koffice-kalkylarkskomponent
+Index: kspread/kspread_cell.cc
+===================================================================
+--- kspread/kspread_cell.cc (revision 427945)
++++ kspread/kspread_cell.cc (working copy)
+@@ -825,7 +825,12 @@
+ if (!d->hasExtra())
+ return (KSpreadCell *) this;
+
+- return d->extra()->obscuringCells.first();
++ else if (d->extra()->obscuringCells.isEmpty())
++ return (KSpreadCell *) this;
++
++ else
++ return d->extra()->obscuringCells.first();
++
+ #if 0
+ QValueList<KSpreadCell*>::const_iterator it = d->extra()->obscuringCells.begin();
+ QValueList<KSpreadCell*>::const_iterator end = d->extra()->obscuringCells.end();
+@@ -2489,6 +2494,7 @@
+ // If the cell towards the top is part of a merged cell, get
+ // the pointer to the master cell.
+ cellUp = cellUp->ultimateObscuringCell();
++
+ topPen = cellUp->effBottomBorderPen( cellUp->column(),
+ cellUp->row() );
+
+Index: templates/SpreadSheet.desktop
+===================================================================
+--- templates/SpreadSheet.desktop (revision 427945)
++++ templates/SpreadSheet.desktop (working copy)
+@@ -23,7 +23,7 @@
+ Name[pl]=Arkusz kalkulacyjny...
+ Name[pt]=Documento de Folha de Cálculo...
+ Name[pt_BR]=Planilha de Cálculo...
+-Name[ru]=Электронная таблица...
++Name[ru]=Электронную таблицу...
+ Name[se]=Rehkenastinárka ...
+ Name[sl]=Preglednični dokument ...
+ Name[sr]=Документ са прорачунским листовима...
+@@ -54,6 +54,7 @@
+ Comment[fa]=KSpread سند جدید:
+ Comment[fi]=Uusi KSpread-asiakirja:
+ Comment[fr]=Nouveau document KSpread :
++Comment[ga]=Cáipéis nua KSpread:
+ Comment[he]=מסמך חדש של KSpread
+ Comment[hr]=Novi KSpread dokument:
+ Comment[hu]=Új KSpread-dokumentum:
+@@ -67,7 +68,7 @@
+ Comment[pl]=Nowy arkusz KSpread:
+ Comment[pt]=Novo documento do KSpread:
+ Comment[pt_BR]=Novo documento KSpread:
+-Comment[ru]=Новый документ KSpread:
++Comment[ru]=Новая электронная таблица KSpread:
+ Comment[se]=Ođđa KSpread-dokumeanta:
+ Comment[sk]=Nový dokument KSpread:
+ Comment[sl]=Nov dokument za KSpread
+Index: templates/Illustration.desktop
+===================================================================
+--- templates/Illustration.desktop (revision 427945)
++++ templates/Illustration.desktop (working copy)
+@@ -22,7 +22,7 @@
+ Name[pl]=Rysunek...
+ Name[pt]=Documento de Ilustração....
+ Name[pt_BR]=Documento de Ilustração...
+-Name[ru]=Иллюстрированный документ...
++Name[ru]=Векторный рисунок...
+ Name[se]=Illustrašuvdna ...
+ Name[sl]=Ilustracijski dokument ...
+ Name[sr]=Илустрациони документ...
+@@ -49,6 +49,7 @@
+ Comment[fa]=Karbon14 سند جدید:
+ Comment[fi]=Uusi Karbon14-asiakirja:
+ Comment[fr]=Nouveau document Karbon14 :
++Comment[ga]=Cáipéis nua Karbon14:
+ Comment[he]=מסמך Karbon14 חדש
+ Comment[hr]=Novi Karbon14 dokument:
+ Comment[hu]=Új Karbon14-dokumentum:
+@@ -59,7 +60,7 @@
+ Comment[pl]=Nowy dokument Karbon14:
+ Comment[pt]=Novo documento do Karbon14:
+ Comment[pt_BR]=Novo documento do Karbon14
+-Comment[ru]=Новый документ Karbon14:
++Comment[ru]=Новый рисунок Karbon14:
+ Comment[se]=Ođđa Karbon14-dokumeanta:
+ Comment[sk]=Nový dokument Karbon14:
+ Comment[sl]=Nov dokument za Karbon14
+Index: templates/Presentation.desktop
+===================================================================
+--- templates/Presentation.desktop (revision 427945)
++++ templates/Presentation.desktop (working copy)
+@@ -23,7 +23,7 @@
+ Name[pl]=Prezentacja...
+ Name[pt]=Documento de Apresentação...
+ Name[pt_BR]=Apresentação de Slides...
+-Name[ru]=Презентация...
++Name[ru]=Презентацию...
+ Name[se]=Presentašuvdna ...
+ Name[sl]=Predstavitveni dokument ...
+ Name[sr]=Презентациони документ...
+@@ -67,7 +67,7 @@
+ Comment[pl]=Nowa prezentacja KPresenter:
+ Comment[pt]=Novo documento do KPresenter:
+ Comment[pt_BR]=Novo documento de apresentação KPresenter:
+-Comment[ru]=Новый документ KPresenter:
++Comment[ru]=Новая презентация KPresenter:
+ Comment[se]=Ođđa KPresenter-presentašuvdna:
+ Comment[sk]=Nový dokument KPresenter:
+ Comment[sl]=Nov predstavitveni dokument za KPresenter
+Index: templates/TextDocument.desktop
+===================================================================
+--- templates/TextDocument.desktop (revision 427945)
++++ templates/TextDocument.desktop (working copy)
+@@ -13,6 +13,7 @@
+ Name[et]=Tekstidokument...
+ Name[fi]=Tekstiasiakirja...
+ Name[fr]=Document texte...
++Name[ga]=Cáipéis Téacs...
+ Name[he]=מסמך טקסט...
+ Name[hr]=Tekst datoteka...
+ Name[hu]=KWord-dokumentum...
+@@ -24,7 +25,7 @@
+ Name[pl]=Dokument tekstowy...
+ Name[pt]=Documento de Texto...
+ Name[pt_BR]=Documento de Texto...
+-Name[ru]=Текстовый документ...
++Name[ru]=Документ...
+ Name[se]=Teakstadokumeanta ...
+ Name[sl]=Besedilni dokument ...
+ Name[sr]=Текстуални документ...
+@@ -55,6 +56,7 @@
+ Comment[fa]=KWord سند جدید برای:
+ Comment[fi]=Uusi KWord-asiakirja:
+ Comment[fr]=Nouveau document KWord :
++Comment[ga]=Cáipéis nua KWord:
+ Comment[he]=מסמך חדש של KWord
+ Comment[hr]=Novi KWord dokument
+ Comment[hu]=Új KWord-dokumentum:
+Index: karbon/tools/vroundrecttool.h
+===================================================================
+--- karbon/tools/vroundrecttool.h (revision 427945)
++++ karbon/tools/vroundrecttool.h (working copy)
+@@ -29,7 +29,7 @@
+
+ class KarbonPart;
+ class QLabel;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+
+
+ class VRoundRectTool : public VShapeTool
+Index: karbon/tools/vpolygontool.cc
+===================================================================
+--- karbon/tools/vpolygontool.cc (revision 427945)
++++ karbon/tools/vpolygontool.cc (working copy)
+@@ -37,6 +37,7 @@
+
+ new QLabel( i18n( "Radius:" ), group );
+ m_radius = new KDoubleSpinBox(0.0, 1000.0, 0.5, 5.0,2, group );
++ //m_radius = new KoBuggyUnitDoubleSpinBox( group, 0.0, 1000.0, 0.5, 50.0, KoUnit::U_MM );
+ refreshUnit();
+ new QLabel( i18n( "Edges:" ), group );
+ m_edges = new KIntSpinBox( group );
+Index: karbon/tools/vpolygontool.h
+===================================================================
+--- karbon/tools/vpolygontool.h (revision 427945)
++++ karbon/tools/vpolygontool.h (working copy)
+@@ -58,7 +58,9 @@
+ void refreshUnit();
+
+ private:
++ // FIXME: This should be a KoUnitDoubleSpinBox!
+ KDoubleSpinBox *m_radius;
++
+ KIntSpinBox *m_edges;
+ KarbonPart *m_part;
+ };
+Index: karbon/tools/vspiraltool.h
+===================================================================
+--- karbon/tools/vspiraltool.h (revision 427945)
++++ karbon/tools/vspiraltool.h (working copy)
+@@ -67,7 +67,9 @@
+ void refreshUnit();
+
+ private:
++ // FIXME: This should be a KoUnitDoubleSpinBox!
+ KDoubleSpinBox *m_radius;
++
+ KIntSpinBox *m_segments;
+ KDoubleNumInput *m_fade;
+ KComboBox *m_type;
+Index: karbon/tools/vellipsetool.cc
+===================================================================
+--- karbon/tools/vellipsetool.cc (revision 427945)
++++ karbon/tools/vellipsetool.cc (working copy)
+@@ -49,8 +49,10 @@
+ // add width/height-input:
+ new QLabel( i18n( "Width:" ), group );
+ m_width = new KDoubleSpinBox( 0.0, 1000.0, 0.5, 10.0, 2, group );
++ //m_width = new KoBuggyUnitDoubleSpinBox( group, 0.0, 1000.0, 0.5, 100.0, KoUnit::U_MM );
+ new QLabel( i18n( "Height:" ), group );
+ m_height = new KDoubleSpinBox( 0.0, 1000.0, 0.5, 10.0, 2, group );
++ //m_height = new KoBuggyUnitDoubleSpinBox( group, 0.0, 1000.0, 0.5, 100.0, KoUnit::U_MM );
+
+ new QLabel( i18n( "Start angle:" ), group );
+ m_startAngle = new KIntSpinBox( group );
+Index: karbon/tools/vellipsetool.h
+===================================================================
+--- karbon/tools/vellipsetool.h (revision 427945)
++++ karbon/tools/vellipsetool.h (working copy)
+@@ -25,8 +25,7 @@
+
+ #include "vshapetool.h"
+
+-class KoUnitDoubleSpinBox;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+ class KComboBox;
+ class KIntSpinBox;
+ class KarbonPart;
+@@ -55,8 +54,11 @@
+ KComboBox *m_type;
+ KIntSpinBox *m_startAngle;
+ KIntSpinBox *m_endAngle;
++
++ // FIXME: These should be KoUnitDoubleSpinBoxes!
+ KDoubleSpinBox *m_width;
+ KDoubleSpinBox *m_height;
++
+ KarbonPart *m_part;
+ };
+
+Index: karbon/tools/vsinustool.cc
+===================================================================
+--- karbon/tools/vsinustool.cc (revision 427945)
++++ karbon/tools/vsinustool.cc (working copy)
+@@ -40,8 +40,10 @@
+ // add width/height-input:
+ new QLabel( i18n( "Width:" ), group );
+ m_width = new KDoubleSpinBox( 0.0, 1000.0, 0.5, 10.0, 2, group );
++ //m_width = new KoBuggyUnitDoubleSpinBox( group, 0.0, 1000.0, 0.5, 100.0, KoUnit::U_MM );
+ new QLabel( i18n( "Height:" ), group );
+ m_height = new KDoubleSpinBox( 0.0, 1000.0, 0.5, 10.0, 2, group );
++ //m_height = new KoBuggyUnitDoubleSpinBox( group, 0.0, 1000.0, 0.5, 100.0, KoUnit::U_MM );
+
+ refreshUnit();
+
+Index: karbon/tools/vsinustool.h
+===================================================================
+--- karbon/tools/vsinustool.h (revision 427945)
++++ karbon/tools/vsinustool.h (working copy)
+@@ -24,7 +24,7 @@
+ #include <knuminput.h>
+ #include "vshapetool.h"
+
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+ class KIntSpinBox;
+ class KarbonPart;
+ class QLabel;
+@@ -58,8 +58,10 @@
+ void refreshUnit();
+
+ private:
++ // FIXME: These should be KoUnitDoubleSpinBoxes!
+ KDoubleSpinBox *m_width;
+ KDoubleSpinBox *m_height;
++
+ KIntSpinBox *m_periods;
+ KarbonPart *m_part;
+ };
+Index: karbon/tools/vrectangletool.cc
+===================================================================
+--- karbon/tools/vrectangletool.cc (revision 427945)
++++ karbon/tools/vrectangletool.cc (working copy)
+@@ -37,10 +37,11 @@
+ // add width/height-input:
+ new QLabel( i18n( "Width:" ), group );
+ m_width = new KDoubleSpinBox( 0.0, 1000.0, 0.5, 10.0, 2, group );
++ //m_width = new KoBuggyUnitDoubleSpinBox( group, 0.0, 1000.0, 0.5, 100.0, KoUnit::U_MM );
+
+ new QLabel( i18n( "Height:" ), group );
+ m_height = new KDoubleSpinBox( 0.0, 1000.0, 0.5, 10.0, 2, group );
+-
++ //m_height = new KoBuggyUnitDoubleSpinBox( group, 0.0, 1000.0, 0.5, 100.0, KoUnit::U_MM );
+ refreshUnit();
+
+ group->setInsideMargin( 4 );
+Index: karbon/tools/vstartool.cc
+===================================================================
+--- karbon/tools/vstartool.cc (revision 427945)
++++ karbon/tools/vstartool.cc (working copy)
+@@ -49,10 +49,12 @@
+ // add width/height-input:
+ new QLabel( i18n( "Outer radius:" ), group );
+ m_outerR = new KDoubleSpinBox( 0.0, 1000.0, 0.5, 5.0, 2, group );
++ //m_outerR = new KoBuggyUnitDoubleSpinBox( group, 0.0, 1000.0, 0.5, 50.0, KoUnit::U_MM );
+ connect( m_outerR, SIGNAL( valueChanged( double ) ), this, SLOT( setOuterRadius( double ) ) );
+
+ new QLabel( i18n( "Inner radius:" ), group );
+ m_innerR = new KDoubleSpinBox( 0.0, 1000.0, 0.5, 5.0, 2, group );
++ //m_innerR = new KoBuggyUnitDoubleSpinBox( group, 0.0, 1000.0, 0.5, 25.0, KoUnit::U_MM );
+
+ refreshUnit();
+
+Index: karbon/tools/vstartool.h
+===================================================================
+--- karbon/tools/vstartool.h (revision 427945)
++++ karbon/tools/vstartool.h (working copy)
+@@ -54,8 +54,10 @@
+ void setOuterRadius( double );
+
+ private:
++ // FIXME: These should be KoUnitDoubleSpinBoxes!
+ KDoubleSpinBox *m_innerR;
+ KDoubleSpinBox *m_outerR;
++
+ KDoubleNumInput *m_roundness;
+ KIntSpinBox *m_edges;
+ KIntSpinBox *m_innerAngle;
+Index: karbon/tools/vspiraltool.cc
+===================================================================
+--- karbon/tools/vspiraltool.cc (revision 427945)
++++ karbon/tools/vspiraltool.cc (working copy)
+@@ -43,6 +43,7 @@
+
+ new QLabel( i18n( "Radius:" ), group );
+ m_radius = new KDoubleSpinBox( 0.0, 1000.0, 0.5, 5.0, 2, group );
++ //m_radius = new KoBuggyUnitDoubleSpinBox( group, 0.0, 1000.0, 0.5, 50.0, KoUnit::U_MM );
+ refreshUnit();
+ new QLabel( i18n( "Segments:" ), group );
+ m_segments = new KIntSpinBox( group );
+Index: karbon/tools/vrectangletool.h
+===================================================================
+--- karbon/tools/vrectangletool.h (revision 427945)
++++ karbon/tools/vrectangletool.h (working copy)
+@@ -29,7 +29,7 @@
+
+ class KarbonPart;
+ class QLabel;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+
+ class VRectangleTool : public VShapeTool
+ {
+@@ -59,8 +59,10 @@
+ void refreshUnit();
+
+ private:
++ // FIXME: These should be KoUnitDoubleSpinBoxes!
+ KDoubleSpinBox *m_width;
+ KDoubleSpinBox *m_height;
++
+ KarbonPart *m_part;
+ };
+
+Index: karbon/dialogs/vconfiguredlg.cc
+===================================================================
+--- karbon/dialogs/vconfiguredlg.cc (revision 427945)
++++ karbon/dialogs/vconfiguredlg.cc (working copy)
+@@ -317,17 +317,17 @@
+ gridColorLbl->setBuddy( m_gridColorBtn );
+ QGroupBox* spacingGrp = new QGroupBox( 2, Qt::Horizontal, i18n( "Spacing" ), page );
+ QLabel* spaceHorizLbl = new QLabel( i18n( "&Horizontal:" ), spacingGrp );
+- m_spaceHorizUSpin = new KoUnitDoubleSpinBox( spacingGrp, 0.0, pgw, 0.1, fw, unit );
++ m_spaceHorizUSpin = new KoBuggyUnitDoubleSpinBox( spacingGrp, 0.0, pgw, 0.1, fw, unit );
+ spaceHorizLbl->setBuddy( m_spaceHorizUSpin );
+ QLabel* spaceVertLbl = new QLabel( i18n( "&Vertical:" ), spacingGrp );
+- m_spaceVertUSpin = new KoUnitDoubleSpinBox( spacingGrp, 0.0, pgh, 0.1, fh, unit );
++ m_spaceVertUSpin = new KoBuggyUnitDoubleSpinBox( spacingGrp, 0.0, pgh, 0.1, fh, unit );
+ spaceVertLbl->setBuddy( m_spaceVertUSpin );
+ QGroupBox* snapGrp = new QGroupBox( 2, Qt::Horizontal, i18n( "Snap Distance" ), page );
+ QLabel* snapHorizLbl = new QLabel( i18n( "H&orizontal:" ), snapGrp );
+- m_snapHorizUSpin = new KoUnitDoubleSpinBox( snapGrp, 0.0, fw, 0.1, sw, unit );
++ m_snapHorizUSpin = new KoBuggyUnitDoubleSpinBox( snapGrp, 0.0, fw, 0.1, sw, unit );
+ snapHorizLbl->setBuddy( m_snapHorizUSpin );
+ QLabel* snapVertLbl = new QLabel( i18n( "V&ertical:" ), snapGrp );
+- m_snapVertUSpin = new KoUnitDoubleSpinBox( snapGrp, 0.0, fh, 0.1, sh, unit );
++ m_snapVertUSpin = new KoBuggyUnitDoubleSpinBox( snapGrp, 0.0, fh, 0.1, sh, unit );
+ snapVertLbl->setBuddy( m_snapVertUSpin );
+
+ QGridLayout* gl = new QGridLayout();
+Index: karbon/dialogs/vconfiguredlg.h
+===================================================================
+--- karbon/dialogs/vconfiguredlg.h (revision 427945)
++++ karbon/dialogs/vconfiguredlg.h (working copy)
+@@ -27,7 +27,7 @@
+ class KConfig;
+ class KIntNumInput;
+ class KColorButton;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+ class QCheckBox;
+ class QComboBox;
+
+@@ -129,10 +129,10 @@
+
+ private:
+ KarbonView* m_view;
+- KoUnitDoubleSpinBox* m_spaceHorizUSpin;
+- KoUnitDoubleSpinBox* m_spaceVertUSpin;
+- KoUnitDoubleSpinBox* m_snapHorizUSpin;
+- KoUnitDoubleSpinBox* m_snapVertUSpin;
++ KoBuggyUnitDoubleSpinBox* m_spaceHorizUSpin;
++ KoBuggyUnitDoubleSpinBox* m_spaceVertUSpin;
++ KoBuggyUnitDoubleSpinBox* m_snapHorizUSpin;
++ KoBuggyUnitDoubleSpinBox* m_snapVertUSpin;
+ QCheckBox* m_gridChBox;
+ QCheckBox* m_snapChBox;
+ KColorButton* m_gridColorBtn;
+Index: karbon/dialogs/vstrokedlg.cc
+===================================================================
+--- karbon/dialogs/vstrokedlg.cc (revision 427945)
++++ karbon/dialogs/vstrokedlg.cc (working copy)
+@@ -50,7 +50,7 @@
+
+ QLabel* widthLabel = new QLabel( i18n ( "Width:" ), mainWidget );
+ leftLayout->addWidget ( widthLabel );
+- m_setLineWidth = new KoUnitDoubleSpinBox( mainWidget, 0.0, 1000.0, 0.5, 1.0, KoUnit::U_PT, 1 );
++ m_setLineWidth = new KoBuggyUnitDoubleSpinBox( mainWidget, 0.0, 1000.0, 0.5, 1.0, KoUnit::U_PT, 1 );
+ leftLayout->addWidget ( m_setLineWidth );
+
+ //Dashing ->
+Index: karbon/dialogs/vstrokedlg.h
+===================================================================
+--- karbon/dialogs/vstrokedlg.h (revision 427945)
++++ karbon/dialogs/vstrokedlg.h (working copy)
+@@ -27,7 +27,7 @@
+ class QVButtonGroup;
+
+ class KarbonPart;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+ class VStroke;
+ class VColorTab;
+
+@@ -41,7 +41,7 @@
+ private:
+ VColorTab* m_colortab;
+ KarbonPart *m_part;
+- KoUnitDoubleSpinBox *m_setLineWidth;
++ KoBuggyUnitDoubleSpinBox *m_setLineWidth;
+ QComboBox *m_styleCombo;
+ QVButtonGroup *m_typeOption;
+ QVButtonGroup *m_capOption;
+Index: karbon/dockers/vtransformdocker.h
+===================================================================
+--- karbon/dockers/vtransformdocker.h (revision 427945)
++++ karbon/dockers/vtransformdocker.h (working copy)
+@@ -25,7 +25,7 @@
+
+ class KarbonPart;
+ class KarbonView;
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+
+ class VTransformDocker : public VDocker
+ {
+@@ -43,10 +43,10 @@
+ private:
+ KarbonPart *m_part;
+ KarbonView *m_view;
+- KoUnitDoubleSpinBox *m_x;
+- KoUnitDoubleSpinBox *m_y;
+- KoUnitDoubleSpinBox *m_width;
+- KoUnitDoubleSpinBox *m_height;
++ KoBuggyUnitDoubleSpinBox *m_x;
++ KoBuggyUnitDoubleSpinBox *m_y;
++ KoBuggyUnitDoubleSpinBox *m_width;
++ KoBuggyUnitDoubleSpinBox *m_height;
+ QWidget *mainWidget;
+ };
+
+Index: karbon/dockers/vstrokedocker.cc
+===================================================================
+--- karbon/dockers/vstrokedocker.cc (revision 427945)
++++ karbon/dockers/vstrokedocker.cc (working copy)
+@@ -50,7 +50,7 @@
+
+ QLabel* widthLabel = new QLabel( i18n ( "Width:" ), mainWidget );
+ mainLayout->addWidget( widthLabel, 0, 0 );
+- m_setLineWidth = new KoUnitDoubleSpinBox( mainWidget, 0.0, 1000.0, 0.5, 1.0, KoUnit::U_PT, 1 );
++ m_setLineWidth = new KoBuggyUnitDoubleSpinBox( mainWidget, 0.0, 1000.0, 0.5, 1.0, KoUnit::U_PT, 1 );
+ mainLayout->addWidget ( m_setLineWidth, 0, 1 );
+ connect( m_setLineWidth, SIGNAL( valueChanged( double ) ), this, SLOT( widthChanged() ) );
+
+Index: karbon/dockers/vstrokedocker.h
+===================================================================
+--- karbon/dockers/vstrokedocker.h (revision 427945)
++++ karbon/dockers/vstrokedocker.h (working copy)
+@@ -26,7 +26,7 @@
+ class QHButtonGroup;
+ class QWidget;
+
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+
+ class KoMainWindow;
+ class KarbonView;
+@@ -48,7 +48,7 @@
+ QWidget *mainWidget;
+ KarbonPart *m_part;
+ KarbonView *m_view;
+- KoUnitDoubleSpinBox *m_setLineWidth;
++ KoBuggyUnitDoubleSpinBox *m_setLineWidth;
+
+ private slots:
+ void slotCapChanged( int ID );
+Index: karbon/dockers/vtransformdocker.cc
+===================================================================
+--- karbon/dockers/vtransformdocker.cc (revision 427945)
++++ karbon/dockers/vtransformdocker.cc (working copy)
+@@ -48,25 +48,25 @@
+ //X: (TODO: Set 5000 limit to real Karbon14 limit)
+ QLabel* xLabel = new QLabel( i18n ( "X:" ), mainWidget );
+ mainLayout->addWidget( xLabel, 1, 0 );
+- m_x = new KoUnitDoubleSpinBox( mainWidget, -5000.0, 5000.0, 1.0, 10.0, m_part->unit(), 1 );
++ m_x = new KoBuggyUnitDoubleSpinBox( mainWidget, -5000.0, 5000.0, 1.0, 10.0, m_part->unit(), 1 );
+ mainLayout->addWidget( m_x, 1, 1 );
+
+ //Y: (TODO: Set 5000 limit to real Karbon14 limit)
+ QLabel* yLabel = new QLabel( i18n ( "Y:" ), mainWidget );
+ mainLayout->addWidget( yLabel, 2, 0 );
+- m_y = new KoUnitDoubleSpinBox( mainWidget, -5000.0, 5000.0, 1.0, 10.0, m_part->unit(), 1 );
++ m_y = new KoBuggyUnitDoubleSpinBox( mainWidget, -5000.0, 5000.0, 1.0, 10.0, m_part->unit(), 1 );
+ mainLayout->addWidget( m_y, 2, 1 );
+
+ //Width: (TODO: Set 5000 limit to real Karbon14 limit)
+ QLabel* wLabel = new QLabel( i18n ( "W:" ), mainWidget );
+ mainLayout->addWidget( wLabel, 1, 2 );
+- m_width = new KoUnitDoubleSpinBox( mainWidget, 0.0, 5000.0, 1.0, 10.0, m_part->unit(), 1 );
++ m_width = new KoBuggyUnitDoubleSpinBox( mainWidget, 0.0, 5000.0, 1.0, 10.0, m_part->unit(), 1 );
+ mainLayout->addWidget( m_width, 1, 3 );
+
+ //Height: (TODO: Set 5000 limit to real Karbon14 limit)
+ QLabel* hLabel = new QLabel( i18n ( "H:" ), mainWidget );
+ mainLayout->addWidget( hLabel, 2, 2 );
+- m_height = new KoUnitDoubleSpinBox( mainWidget, 0.0, 5000.0, 1.0, 10.0, m_part->unit(), 1 );
++ m_height = new KoBuggyUnitDoubleSpinBox( mainWidget, 0.0, 5000.0, 1.0, 10.0, m_part->unit(), 1 );
+ mainLayout->addWidget( m_height, 2, 3 );
+
+ //TODO: Add Rotation, Shear
+Index: karbon/widgets/vselecttoolbar.cc
+===================================================================
+--- karbon/widgets/vselecttoolbar.cc (revision 427945)
++++ karbon/widgets/vselecttoolbar.cc (working copy)
+@@ -38,24 +38,24 @@
+ setCaption( i18n( "Object Properties" ) );
+ QLabel *x_label = new QLabel( i18n( "X:" ), this, "kde toolbar widget" );
+ insertWidget( 0, x_label->width(), x_label );
+- m_x = new KoUnitDoubleSpinBox( this, 0.0, 1000.0, 0.5 );
++ m_x = new KoBuggyUnitDoubleSpinBox( this, 0.0, 1000.0, 0.5 );
+ connect( m_x, SIGNAL( valueChanged( double ) ), this, SLOT( slotXChanged( double ) ) );
+ insertWidget( 1, m_x->width(), m_x );
+ QLabel *y_label = new QLabel( i18n( "Y:" ), this, "kde toolbar widget" );
+ insertWidget( 2, y_label->width(), y_label );
+- m_y = new KoUnitDoubleSpinBox( this, 0.0, 1000.0, 0.5 );
++ m_y = new KoBuggyUnitDoubleSpinBox( this, 0.0, 1000.0, 0.5 );
+ connect( m_y, SIGNAL( valueChanged( double ) ), this, SLOT( slotYChanged( double ) ) );
+ insertWidget( 3, m_y->width(), m_y );
+
+ insertSeparator( 4 );
+ QLabel *w_label = new QLabel( i18n( "Width:" ), this, "kde toolbar widget" );
+ insertWidget( 5, w_label->width(), w_label );
+- m_width = new KoUnitDoubleSpinBox( this, 0.0, 1000.0, 0.5 );
++ m_width = new KoBuggyUnitDoubleSpinBox( this, 0.0, 1000.0, 0.5 );
+ connect( m_width, SIGNAL( valueChanged( double ) ), this, SLOT( slotWidthChanged( double ) ) );
+ insertWidget( 6, m_width->width(), m_width );
+ QLabel *h_label = new QLabel( i18n( "Height:" ), this, "kde toolbar widget" );
+ insertWidget( 7, h_label->width(), h_label );
+- m_height = new KoUnitDoubleSpinBox( this, 0.0, 1000.0, 0.5 );
++ m_height = new KoBuggyUnitDoubleSpinBox( this, 0.0, 1000.0, 0.5 );
+ connect( m_height, SIGNAL( valueChanged( double ) ), this, SLOT( slotHeightChanged( double ) ) );
+ insertWidget( 8, m_height->width(), m_height );
+
+Index: karbon/widgets/vselecttoolbar.h
+===================================================================
+--- karbon/widgets/vselecttoolbar.h (revision 427945)
++++ karbon/widgets/vselecttoolbar.h (working copy)
+@@ -24,7 +24,7 @@
+
+ #include <ktoolbar.h>
+
+-class KoUnitDoubleSpinBox;
++class KoBuggyUnitDoubleSpinBox;
+ class KarbonView;
+
+ class VSelectToolBar : public KToolBar
+@@ -42,10 +42,10 @@
+ void slotHeightChanged( double );
+
+ private:
+- KoUnitDoubleSpinBox *m_x;
+- KoUnitDoubleSpinBox *m_y;
+- KoUnitDoubleSpinBox *m_width;
+- KoUnitDoubleSpinBox *m_height;
++ KoBuggyUnitDoubleSpinBox *m_x;
++ KoBuggyUnitDoubleSpinBox *m_y;
++ KoBuggyUnitDoubleSpinBox *m_width;
++ KoBuggyUnitDoubleSpinBox *m_height;
+ KarbonView *m_view;
+ };
+
diff --git a/editors/koffice-kde4/files/patch-filters-kspread-excel-sidewinder-excel.cpp b/editors/koffice-kde4/files/patch-filters-kspread-excel-sidewinder-excel.cpp
deleted file mode 100644
index 65e60fd83a86..000000000000
--- a/editors/koffice-kde4/files/patch-filters-kspread-excel-sidewinder-excel.cpp
+++ /dev/null
@@ -1,11 +0,0 @@
---- filters/kspread/excel/sidewinder/excel.cpp.orig Wed Jun 29 02:06:17 2005
-+++ filters/kspread/excel/sidewinder/excel.cpp Wed Jun 29 02:04:06 2005
-@@ -5412,7 +5412,7 @@
- case 10: valueFormat = "0.00%"; break;
- case 11: valueFormat = "0.00E+00"; break;
- case 12: valueFormat = "#?/?"; break;
-- case 13: valueFormat = "#\?\?\/\?\?"; break;
-+ case 13: valueFormat = "#\?\?/\?\?"; break;
- case 14: valueFormat = "M/D/YY"; break;
- case 15: valueFormat = "D-MMM-YY"; break;
- case 16: valueFormat = "D-MMM"; break;
diff --git a/editors/koffice-kde4/files/patch-krita-plugins-cimg-CImg.h b/editors/koffice-kde4/files/patch-krita-plugins-cimg-CImg.h
deleted file mode 100644
index 9c914acb3d05..000000000000
--- a/editors/koffice-kde4/files/patch-krita-plugins-cimg-CImg.h
+++ /dev/null
@@ -1,11 +0,0 @@
---- krita/plugins/cimg/CImg.h.orig Tue Jun 28 02:31:30 2005
-+++ krita/plugins/cimg/CImg.h Tue Jun 28 02:32:10 2005
-@@ -5135,7 +5135,7 @@
- if (ny1<0 || ny0>=dimy()) return *this;
- if (ny0<0) { nx0-=ny0*(nx1-nx0)/(ny1-ny0); ny0=0; }
- if (ny1>=dimy()) { nx1+=(ny1-dimy())*(nx0-nx1)/(ny1-ny0); ny1=dimy()-1;}
-- const unsigned int dmax = (unsigned int)cimg::max(std::abs(nx1-nx0),ny1-ny0), whz = width*height*depth;
-+ const unsigned int dmax = (unsigned int)cimg::max(std::abs((long int)(nx1-nx0)),(long int)(ny1-ny0)), whz = width*height*depth;
- const float px = dmax?(nx1-nx0)/(float)dmax:0, py = dmax?(ny1-ny0)/(float)dmax:0;
- float x = (float)nx0, y = (float)ny0;
- if (opacity>=1) for (unsigned int t=0; t<=dmax; t++) {
diff --git a/editors/koffice-kde4/files/patch-kspread-dialogs-kspread_dlg_database.cc b/editors/koffice-kde4/files/patch-kspread-dialogs-kspread_dlg_database.cc
deleted file mode 100644
index 0f733f0e891f..000000000000
--- a/editors/koffice-kde4/files/patch-kspread-dialogs-kspread_dlg_database.cc
+++ /dev/null
@@ -1,13 +0,0 @@
---- kspread/dialogs/kspread_dlg_database.cc.orig Tue Jun 28 03:42:22 2005
-+++ kspread/dialogs/kspread_dlg_database.cc Tue Jun 28 03:48:20 2005
-@@ -600,8 +600,8 @@
- // An update command must also be followed by a space, or it would be parsed
- // as an identifier.
- // For sanity, also check that there is a SELECT
-- QRegExp couldModifyDB( "(^|[( \s])(UPDATE|DELETE|INSERT|CREATE) ", false /* cs */ );
-- QRegExp couldQueryDB( "(^|[( \s])(SELECT) ", false /* cs */ );
-+ QRegExp couldModifyDB( "(^|[( \\s])(UPDATE|DELETE|INSERT|CREATE) ", false /* cs */ );
-+ QRegExp couldQueryDB( "(^|[( \\s])(SELECT) ", false /* cs */ );
-
- if (couldModifyDB.search( queryStr ) != -1 || couldQueryDB.search ( queryStr ) == -1 )
- {