Author: pfg Date: Tue Feb 21 19:25:07 2012 New Revision: 1291962 URL: http://svn.apache.org/viewvc?rev=1291962&view=rev Log: i#115580# - Font size changes when copying words to impress.
Copying words from writer/calc to impress, some font sizes may get bigger. Additionally other fonts atrtributes like the font size changes. Special thanks to the author for working so diligently on this issue. BZ: 115580 Author: Jing Dong Chen Modified: incubator/ooo/trunk/main/editeng/source/editeng/editdoc.cxx incubator/ooo/trunk/main/editeng/source/editeng/editdoc.hxx incubator/ooo/trunk/main/editeng/source/editeng/eertfpar.cxx incubator/ooo/trunk/main/editeng/source/editeng/impedit.hxx incubator/ooo/trunk/main/editeng/source/editeng/impedit2.cxx incubator/ooo/trunk/main/editeng/source/editeng/impedit4.cxx incubator/ooo/trunk/main/editeng/source/editeng/impedit5.cxx incubator/ooo/trunk/main/sw/inc/docsh.hxx incubator/ooo/trunk/main/sw/source/ui/app/docshini.cxx incubator/ooo/trunk/main/sw/source/ui/dochdl/swdtflvr.cxx Modified: incubator/ooo/trunk/main/editeng/source/editeng/editdoc.cxx URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/editeng/source/editeng/editdoc.cxx?rev=1291962&r1=1291961&r2=1291962&view=diff ============================================================================== --- incubator/ooo/trunk/main/editeng/source/editeng/editdoc.cxx (original) +++ incubator/ooo/trunk/main/editeng/source/editeng/editdoc.cxx Tue Feb 21 19:25:07 2012 @@ -1066,12 +1066,27 @@ void ContentNode::CreateDefFont() { // Erst alle Informationen aus dem Style verwenden... SfxStyleSheet* pS = aContentAttribs.GetStyleSheet(); - if ( pS ) - CreateFont( GetCharAttribs().GetDefFont(), pS->GetItemSet() ); - + /* if ( pS ) //#115580# + CreateFont( GetCharAttribs().GetDefFont(), pS->GetItemSet() ); + // ... dann die harte Absatzformatierung rueberbuegeln... CreateFont( GetCharAttribs().GetDefFont(), - GetContentAttribs().GetItems(), pS == NULL ); + GetContentAttribs().GetItems(), pS == NULL ); */ + + SvxFont& rFont = GetCharAttribs().GetDefFont(); + SvxFont& rFontCJK = GetCharAttribs().GetDefFontCJK(); + SvxFont& rFontCTL = GetCharAttribs().GetDefFontCTL(); + + if ( pS ) + { + CreateFont( rFont, pS->GetItemSet(), sal_True, i18n::ScriptType::LATIN ); + CreateFont( rFontCJK, pS->GetItemSet(), sal_True, i18n::ScriptType::ASIAN ); + CreateFont( rFontCTL, pS->GetItemSet(), sal_True, i18n::ScriptType::COMPLEX ); + } + + CreateFont( rFont, GetContentAttribs().GetItems(), pS == NULL, i18n::ScriptType::LATIN ); + CreateFont( rFontCJK, GetContentAttribs().GetItems(), pS == NULL, i18n::ScriptType::ASIAN ); + CreateFont( rFontCTL, GetContentAttribs().GetItems(), pS == NULL, i18n::ScriptType::COMPLEX ); } void ContentNode::SetStyleSheet( SfxStyleSheet* pS, const SvxFont& rFontFromStyle ) @@ -1448,7 +1463,7 @@ sal_uLong EditDoc::GetTextLen() const { ContentNode* pNode = GetObject( nNode ); nLen += pNode->Len(); - // Felder k�nnen laenger sein als der Platzhalter im Node. + // Felder k???nnen laenger sein als der Platzhalter im Node. const CharAttribArray& rAttrs = pNode->GetCharAttribs().GetAttribs(); for ( sal_uInt16 nAttr = rAttrs.Count(); nAttr; ) { @@ -1560,6 +1575,9 @@ EditPaM EditDoc::InsertParaBreak( EditPa // Den Default-Font kopieren pNode->GetCharAttribs().GetDefFont() = aPaM.GetNode()->GetCharAttribs().GetDefFont(); + //#115580# start + pNode->GetCharAttribs().GetDefFontCJK() = aPaM.GetNode()->GetCharAttribs().GetDefFontCJK(); + pNode->GetCharAttribs().GetDefFontCTL() = aPaM.GetNode()->GetCharAttribs().GetDefFontCTL(); SfxStyleSheet* pStyle = aPaM.GetNode()->GetStyleSheet(); if ( pStyle ) { Modified: incubator/ooo/trunk/main/editeng/source/editeng/editdoc.hxx URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/editeng/source/editeng/editdoc.hxx?rev=1291962&r1=1291961&r2=1291962&view=diff ============================================================================== --- incubator/ooo/trunk/main/editeng/source/editeng/editdoc.hxx (original) +++ incubator/ooo/trunk/main/editeng/source/editeng/editdoc.hxx Tue Feb 21 19:25:07 2012 @@ -202,7 +202,9 @@ class CharAttribList { private: CharAttribArray aAttribs; - SvxFont aDefFont; // schneller, als jedesmal vom Pool! + SvxFont aDefFont; // schneller, als jedesmal vom Pool! + SvxFont aDefFontCJK; //#115580# + SvxFont aDefFontCTL; sal_Bool bHasEmptyAttribs; CharAttribList( const CharAttribList& ) {;} @@ -228,6 +230,8 @@ public: void InsertAttrib( EditCharAttrib* pAttrib ); SvxFont& GetDefFont() { return aDefFont; } + SvxFont& GetDefFontCJK() { return aDefFontCJK; } //#115580# + SvxFont& GetDefFontCTL() { return aDefFontCTL; } sal_Bool HasEmptyAttribs() const { return bHasEmptyAttribs; } sal_Bool& HasEmptyAttribs() { return bHasEmptyAttribs; } Modified: incubator/ooo/trunk/main/editeng/source/editeng/eertfpar.cxx URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/editeng/source/editeng/eertfpar.cxx?rev=1291962&r1=1291961&r2=1291962&view=diff ============================================================================== --- incubator/ooo/trunk/main/editeng/source/editeng/eertfpar.cxx (original) +++ incubator/ooo/trunk/main/editeng/source/editeng/eertfpar.cxx Tue Feb 21 19:25:07 2012 @@ -108,7 +108,7 @@ SvParserState __EXPORT EditRTFParser::Ca EditPaM aStart2PaM = aCurSel.Min(); // Sinnvoll oder nicht?: aStart2PaM.GetNode()->GetContentAttribs().GetItems().ClearItem(); - AddRTFDefaultValues( aStart2PaM, aStart2PaM ); + //AddRTFDefaultValues( aStart2PaM, aStart2PaM ); //#115580# EditPaM aEnd1PaM( pImpEditEngine->ImpInsertParaBreak( aCurSel.Max() ) ); // aCurCel zeigt jetzt auf den Zwischenraum @@ -136,6 +136,47 @@ SvParserState __EXPORT EditRTFParser::Ca aSel.Min() = EditPaM( pPrevNode, pPrevNode->Len() ); aSel.Max() = EditPaM( pCurNode, 0 ); aCurSel.Max() = pImpEditEngine->ImpDeleteSelection( aSel ); + //#115580# added at 2011/11/28 start + sal_uInt16 nStart2 = pImpEditEngine->GetEditDoc().GetPos( aStart2PaM.GetNode() ); + sal_uInt16 nEnd2 = pImpEditEngine->GetEditDoc().GetPos( aCurSel.Max().GetNode() ); + for ( sal_uInt16 n = nStart2; n <= nEnd2; n++ ) + { + ContentNode* pTmpNode = pImpEditEngine->GetEditDoc().SaveGetObject( n ); + if ( pTmpNode ) + { + {//if ContentAttribs of node has no font info, add default font attribs into it. + Size aSz( 12, 0 ); + MapMode aPntMode( MAP_POINT ); + MapMode _aEditMapMode( pImpEditEngine->GetRefDevice()->GetMapMode().GetMapUnit() ); + aSz = pImpEditEngine->GetRefDevice()->LogicToLogic( aSz, &aPntMode, &_aEditMapMode ); + + SfxItemSet& rSet = pTmpNode->GetContentAttribs().GetItems(); + SvxFont& rFont = pTmpNode->GetCharAttribs().GetDefFont(); + SvxFont& rFontCJK = pTmpNode->GetCharAttribs().GetDefFontCJK(); + SvxFont& rFontCTL = pTmpNode->GetCharAttribs().GetDefFontCTL(); + + if ( rSet.GetItemState( EE_CHAR_FONTINFO ) != SFX_ITEM_ON ) + rSet.Put( SvxFontItem( rFont.GetFamily(), rFont.GetName(), XubString(), + rFont.GetPitch(), rFont.GetCharSet(), EE_CHAR_FONTINFO ) ); + if ( rSet.GetItemState( EE_CHAR_FONTINFO_CJK ) != SFX_ITEM_ON ) + rSet.Put( SvxFontItem( rFontCJK.GetFamily(), rFontCJK.GetName(), XubString(), + rFontCJK.GetPitch(), rFontCJK.GetCharSet(), EE_CHAR_FONTINFO_CJK ) ); + if ( rSet.GetItemState( EE_CHAR_FONTINFO_CTL ) != SFX_ITEM_ON ) + rSet.Put( SvxFontItem( rFontCTL.GetFamily(), rFontCTL.GetName(), XubString(), + rFontCTL.GetPitch(), rFontCTL.GetCharSet(), EE_CHAR_FONTINFO_CTL ) ); + + if ( rSet.GetItemState( EE_CHAR_FONTHEIGHT ) != SFX_ITEM_ON ) + rSet.Put( SvxFontHeightItem( aSz.Width(), 100, EE_CHAR_FONTHEIGHT ) ); + if ( rSet.GetItemState( EE_CHAR_FONTHEIGHT_CJK ) != SFX_ITEM_ON ) + rSet.Put( SvxFontHeightItem( aSz.Width(), 100, EE_CHAR_FONTHEIGHT_CJK ) ); + if ( rSet.GetItemState( EE_CHAR_FONTHEIGHT_CTL ) != SFX_ITEM_ON ) + rSet.Put( SvxFontHeightItem( aSz.Width(), 100, EE_CHAR_FONTHEIGHT_CTL ) ); + } + + pImpEditEngine->AdjustParaAttribsByStyleSheet( pTmpNode ); + pImpEditEngine->ParaAttribsToCharAttribs( pTmpNode ); + } + } } EditPaM aEnd2PaM( aCurSel.Max() ); //AddRTFDefaultValues( aStart2PaM, aEnd2PaM ); @@ -145,14 +186,16 @@ SvParserState __EXPORT EditRTFParser::Ca // => Zeichenattribute machen. sal_Bool bSpecialBackward = aStart1PaM.GetNode()->Len() ? sal_False : sal_True; - if ( bOnlyOnePara || aStart1PaM.GetNode()->Len() ) - pImpEditEngine->ParaAttribsToCharAttribs( aStart2PaM.GetNode() ); + /* if ( bOnlyOnePara || aStart1PaM.GetNode()->Len() ) //#115580# + pImpEditEngine->ParaAttribsToCharAttribs( aStart2PaM.GetNode() ); */ + // end aCurSel.Min() = pImpEditEngine->ImpConnectParagraphs( aStart1PaM.GetNode(), aStart2PaM.GetNode(), bSpecialBackward ); bSpecialBackward = aEnd1PaM.GetNode()->Len() ? sal_True : sal_False; // wenn bOnlyOnePara, dann ist der Node beim Connect verschwunden. - if ( !bOnlyOnePara && aEnd1PaM.GetNode()->Len() ) - pImpEditEngine->ParaAttribsToCharAttribs( aEnd2PaM.GetNode() ); + /* if ( !bOnlyOnePara && aEnd1PaM.GetNode()->Len() ) //#115580# + pImpEditEngine->ParaAttribsToCharAttribs( aEnd2PaM.GetNode() ); */ + // end aCurSel.Max() = pImpEditEngine->ImpConnectParagraphs( ( bOnlyOnePara ? aStart1PaM.GetNode() : aEnd2PaM.GetNode() ), aEnd1PaM.GetNode(), bSpecialBackward ); Modified: incubator/ooo/trunk/main/editeng/source/editeng/impedit.hxx URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/editeng/source/editeng/impedit.hxx?rev=1291962&r1=1291961&r2=1291962&view=diff ============================================================================== --- incubator/ooo/trunk/main/editeng/source/editeng/impedit.hxx (original) +++ incubator/ooo/trunk/main/editeng/source/editeng/impedit.hxx Tue Feb 21 19:25:07 2012 @@ -479,6 +479,7 @@ private: sal_Bool bFormatted; sal_Bool bInSelection; sal_Bool bIsInUndo; + sal_Bool bIsPasting; //#115580# sal_Bool bUpdate; sal_Bool bUndoEnabled; sal_Bool bOwnerOfRefDev; @@ -543,6 +544,7 @@ private: void SetParaAttrib( sal_uInt8 nFunc, EditSelection aSel, sal_uInt16 nValue ); sal_uInt16 GetParaAttrib( sal_uInt8 nFunc, EditSelection aSel ); void SetCharAttrib( EditSelection aSel, const SfxPoolItem& rItem ); + void AdjustParaAttribsByStyleSheet( ContentNode* pNode ); //#115580# void ParaAttribsToCharAttribs( ContentNode* pNode ); void GetCharAttribs( sal_uInt16 nPara, EECharAttribArray& rLst ) const; Modified: incubator/ooo/trunk/main/editeng/source/editeng/impedit2.cxx URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/editeng/source/editeng/impedit2.cxx?rev=1291962&r1=1291961&r2=1291962&view=diff ============================================================================== --- incubator/ooo/trunk/main/editeng/source/editeng/impedit2.cxx (original) +++ incubator/ooo/trunk/main/editeng/source/editeng/impedit2.cxx Tue Feb 21 19:25:07 2012 @@ -133,6 +133,7 @@ ImpEditEngine::ImpEditEngine( EditEngine bOwnerOfRefDev = sal_False; bDowning = sal_False; bIsInUndo = sal_False; + bIsPasting = sal_False; //#115580# bIsFormatting = sal_False; bFormatted = sal_False; bUpdate = sal_True; @@ -3701,6 +3702,7 @@ EditSelection ImpEditEngine::InsertText( if ( rxDataObj.is() ) { + bIsPasting = sal_True; //#115580# datatransfer::DataFlavor aFlavor; sal_Bool bDone = sal_False; @@ -3791,6 +3793,7 @@ EditSelection ImpEditEngine::InsertText( } } } + bIsPasting = sal_False; //#115580# } return aNewSelection; Modified: incubator/ooo/trunk/main/editeng/source/editeng/impedit4.cxx URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/editeng/source/editeng/impedit4.cxx?rev=1291962&r1=1291961&r2=1291962&view=diff ============================================================================== --- incubator/ooo/trunk/main/editeng/source/editeng/impedit4.cxx (original) +++ incubator/ooo/trunk/main/editeng/source/editeng/impedit4.cxx Tue Feb 21 19:25:07 2012 @@ -1241,6 +1241,13 @@ EditSelection ImpEditEngine::InsertBinTe EditSelection aSel( aPaM, aPaM ); DBG_ASSERT( !aSel.DbgIsBuggy( aEditDoc ), "InsertBibTextObject: Selektion kaput!(1)" ); + //#115580# + EditPaM aStart1PaM( aSel.Min().GetNode(), aSel.Min().GetIndex() ); + aSel = ImpInsertParaBreak( aSel ); + EditPaM aStart2PaM = aSel.Min(); + EditPaM aEnd1PaM( ImpInsertParaBreak( aSel.Max() ) ); + aEnd1PaM.GetNode()->SetStyleSheet( aStart1PaM.GetNode()->GetStyleSheet(), sal_False ); + sal_Bool bUsePortionInfo = sal_False; // sal_Bool bFields = sal_False; XParaPortionList* pPortionInfo = rTextObject.GetPortionInfo(); @@ -1270,6 +1277,17 @@ EditSelection ImpEditEngine::InsertBinTe for ( sal_uInt16 n = 0; n < nContents; n++, nPara++ ) { ContentInfo* pC = rTextObject.GetContents().GetObject( n ); + + if ( bIsPasting ) //#115580# + { + if ( !n ) + aPaM = aStart2PaM; + //init node + aPaM.GetNode()->SetStyleSheet( aStart1PaM.GetNode()->GetStyleSheet(), sal_False ); + aPaM.GetNode()->GetContentAttribs().GetItems().ClearItem(); + aPaM.GetNode()->GetCharAttribs().Clear(); + } + sal_Bool bNewContent = aPaM.GetNode()->Len() ? sal_False: sal_True; sal_uInt16 nStartPos = aPaM.GetIndex(); @@ -1340,6 +1358,18 @@ EditSelection ImpEditEngine::InsertBinTe // nur dann Style und ParaAttribs, wenn neuer Absatz, oder // komplett inneliegender... bParaAttribs = pC->GetParaAttribs().Count() ? sal_True : sal_False; + + if ( bIsPasting ) //#115580# + { + nPara = aEditDoc.GetPos( aPaM.GetNode() ); + if ( GetStyleSheetPool() && pC->GetStyle().Len() ) + { + SfxStyleSheet* pStyle = (SfxStyleSheet*)GetStyleSheetPool()->Find( pC->GetStyle(), pC->GetFamily() ); + DBG_ASSERT( pStyle, "InsertBinTextObject - Style not found!" ); + SetStyleSheet( nPara, pStyle ); + } + } + else if ( GetStyleSheetPool() && pC->GetStyle().Len() ) { SfxStyleSheet* pStyle = (SfxStyleSheet*)GetStyleSheetPool()->Find( pC->GetStyle(), pC->GetFamily() ); @@ -1412,6 +1442,12 @@ EditSelection ImpEditEngine::InsertBinTe } #endif // !SVX_LIGHT + if ( bIsPasting ) //#115580# + { + AdjustParaAttribsByStyleSheet( aPaM.GetNode() ); + ParaAttribsToCharAttribs( aPaM.GetNode() ); + } + // Zeilenumbruch, wenn weitere folgen... if ( n < ( nContents-1) ) { @@ -1422,7 +1458,23 @@ EditSelection ImpEditEngine::InsertBinTe } } - aSel.Max() = aPaM; + /* aSel.Max() = aPaM; */ //#115580# + + if ( bIsPasting ) + { + EditPaM aEnd2PaM( aPaM ); + + sal_Bool bSpecialBackward = aStart1PaM.GetNode()->Len() ? sal_False : sal_True; + + aSel.Min() = ImpConnectParagraphs( aStart1PaM.GetNode(), aStart2PaM.GetNode(), bSpecialBackward ); + bSpecialBackward = aEnd1PaM.GetNode()->Len() ? sal_True : sal_False; + + aSel.Max() = ImpConnectParagraphs( ( ( nContents == 1 ) ? aStart1PaM.GetNode() : aEnd2PaM.GetNode() ), + aEnd1PaM.GetNode(), bSpecialBackward ); + } + else + aSel.Max() = aPaM; + DBG_ASSERT( !aSel.DbgIsBuggy( aEditDoc ), "InsertBibTextObject: Selektion kaput!(1)" ); return aSel; } Modified: incubator/ooo/trunk/main/editeng/source/editeng/impedit5.cxx URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/editeng/source/editeng/impedit5.cxx?rev=1291962&r1=1291961&r2=1291962&view=diff ============================================================================== --- incubator/ooo/trunk/main/editeng/source/editeng/impedit5.cxx (original) +++ incubator/ooo/trunk/main/editeng/source/editeng/impedit5.cxx Tue Feb 21 19:25:07 2012 @@ -813,6 +813,23 @@ void ImpEditEngine::GetCharAttribs( sal_ } } +void ImpEditEngine::AdjustParaAttribsByStyleSheet( ContentNode* pNode ) //#115580# +{ + if ( !pNode ) + return; + + SfxStyleSheet* pStyle = pNode->GetStyleSheet(); + for ( sal_uInt16 nWhich = EE_PARA_START; nWhich < EE_CHAR_START && pStyle; nWhich++ ) + { + if ( pNode->GetContentAttribs().GetItems().GetItemState( nWhich ) == SFX_ITEM_ON ) + { + const SfxItemSet& rStyleAttribs = pStyle->GetItemSet(); + if ( rStyleAttribs.GetItemState( nWhich ) == SFX_ITEM_ON ) + pNode->GetContentAttribs().GetItems().ClearItem( nWhich ); + } + } +} + void ImpEditEngine::ParaAttribsToCharAttribs( ContentNode* pNode ) { pNode->GetCharAttribs().DeleteEmptyAttribs( GetEditDoc().GetItemPool() ); @@ -841,6 +858,8 @@ void ImpEditEngine::ParaAttribsToCharAtt } bFormatted = sal_False; // Portion braucht hier nicht invalidiert werden, geschieht woanders. + if ( bIsPasting ) //#115580# + pNode->GetContentAttribs().GetItems().ClearItem(); } IdleFormattter::IdleFormattter() Modified: incubator/ooo/trunk/main/sw/inc/docsh.hxx URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/sw/inc/docsh.hxx?rev=1291962&r1=1291961&r2=1291962&view=diff ============================================================================== --- incubator/ooo/trunk/main/sw/inc/docsh.hxx (original) +++ incubator/ooo/trunk/main/sw/inc/docsh.hxx Tue Feb 21 19:25:07 2012 @@ -147,6 +147,8 @@ public: static rtl::OUString GetEventName( sal_Int32 nId ); + static void InitDefaultFontAttr( SwDoc* pDoc ); //#115580# added at 2011/11/28 + //Das Doc wird fuer SO-Datenaustausch benoetigt! SwDocShell( SfxObjectCreateMode eMode = SFX_CREATE_MODE_EMBEDDED ); SwDocShell( const sal_uInt64 i_nSfxCreationFlags ); Modified: incubator/ooo/trunk/main/sw/source/ui/app/docshini.cxx URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/sw/source/ui/app/docshini.cxx?rev=1291962&r1=1291961&r2=1291962&view=diff ============================================================================== --- incubator/ooo/trunk/main/sw/source/ui/app/docshini.cxx (original) +++ incubator/ooo/trunk/main/sw/source/ui/app/docshini.cxx Tue Feb 21 19:25:07 2012 @@ -358,6 +358,145 @@ sal_Bool SwDocShell::InitNew( const uno: return bRet; } +//#115580# When creating a new document, if needed, set the default +// font and languague attributes. +void SwDocShell::InitDefaultFontAttr( SwDoc* pDoc ) +{ + sal_uInt16 aFontWhich[] = + { + RES_CHRATR_FONT, + RES_CHRATR_CJK_FONT, + RES_CHRATR_CTL_FONT + }; + sal_uInt16 aFontHeightWhich[] = + { + RES_CHRATR_FONTSIZE, + RES_CHRATR_CJK_FONTSIZE, + RES_CHRATR_CTL_FONTSIZE + }; + sal_uInt16 aFontIds[] = + { + FONT_STANDARD, + FONT_STANDARD_CJK, + FONT_STANDARD_CTL + }; + sal_uInt16 nFontTypes[] = + { + DEFAULTFONT_LATIN_TEXT, + DEFAULTFONT_CJK_TEXT, + DEFAULTFONT_CTL_TEXT + }; + + sal_uInt16 aLangWhich[] = + { + RES_CHRATR_LANGUAGE, + RES_CHRATR_CJK_LANGUAGE, + RES_CHRATR_CTL_LANGUAGE + }; + sal_uInt16 aLangTypes[] = + { + LANGUAGE_ENGLISH_US, + LANGUAGE_ENGLISH_US, + LANGUAGE_ARABIC_SAUDI_ARABIA + }; + + SwStdFontConfig* pStdFont = SW_MOD()->GetStdFontConfig(); + SfxPrinter* pPrt = pDoc->getPrinter( false ); + String sEntry; + + for(sal_uInt8 i = 0; i < 3; i++) + { + sal_uInt16 nFontWhich = aFontWhich[i]; + sal_uInt16 nFontId = aFontIds[i]; + SvxFontItem* pFontItem = 0; + const SvxLanguageItem& rLang = (const SvxLanguageItem&)pDoc->GetDefault( aLangWhich[i] ); + LanguageType eLanguage = rLang.GetLanguage(); + if ( (eLanguage == LANGUAGE_DONTKNOW) || (eLanguage == LANGUAGE_NONE) ) + eLanguage = aLangTypes[i]; + { + if ( i == 0 ) + {//At present, just supports for the following languages: english, french and german. + LanguageType eUiLanguage = Application::GetSettings().GetUILanguage(); + switch( eUiLanguage ) + { + case LANGUAGE_ENGLISH_US: + case LANGUAGE_FRENCH: + case LANGUAGE_FRENCH_BELGIAN: + case LANGUAGE_FRENCH_CAMEROON: + case LANGUAGE_FRENCH_CANADIAN: + case LANGUAGE_FRENCH_COTE_D_IVOIRE: + case LANGUAGE_FRENCH_HAITI: + case LANGUAGE_FRENCH_LUXEMBOURG: + case LANGUAGE_FRENCH_MALI: + case LANGUAGE_FRENCH_MONACO: + case LANGUAGE_FRENCH_MOROCCO: + case LANGUAGE_FRENCH_NORTH_AFRICA: + case LANGUAGE_FRENCH_REUNION: + case LANGUAGE_FRENCH_SENEGAL: + case LANGUAGE_FRENCH_SWISS: + case LANGUAGE_FRENCH_WEST_INDIES: + case LANGUAGE_FRENCH_ZAIRE: + case LANGUAGE_GERMAN: + case LANGUAGE_GERMAN_AUSTRIAN: + case LANGUAGE_GERMAN_LIECHTENSTEIN: + case LANGUAGE_GERMAN_LUXEMBOURG: + case LANGUAGE_GERMAN_SWISS: + eLanguage = eUiLanguage; + break; + + } + } + + if ( i == 2 ) //CTL,just supports for HINDI and ARABIC_SAUDI_ARABIA + { + LanguageType eUiLanguage = Application::GetSettings().GetUILanguage(); + switch( eUiLanguage ) + { + case LANGUAGE_HINDI: + eLanguage = eUiLanguage; + break; + + } + } + + if ( i == 1 ) //CJK + { + LanguageType eUiLanguage = Application::GetSettings().GetUILanguage(); + switch( eUiLanguage ) + { + case LANGUAGE_KOREAN: + case LANGUAGE_KOREAN_JOHAB: + case LANGUAGE_CHINESE: + case LANGUAGE_CHINESE_HONGKONG: + case LANGUAGE_CHINESE_MACAU: + case LANGUAGE_CHINESE_SIMPLIFIED: + case LANGUAGE_CHINESE_SINGAPORE: + case LANGUAGE_CHINESE_TRADITIONAL: + case LANGUAGE_JAPANESE: + eLanguage = eUiLanguage; + break; + } + } + + Font aLangDefFont = OutputDevice::GetDefaultFont( + nFontTypes[i], + eLanguage, + DEFAULTFONT_FLAGS_ONLYONE ); + pFontItem = new SvxFontItem(aLangDefFont.GetFamily(), aLangDefFont.GetName(), + aEmptyStr, aLangDefFont.GetPitch(), aLangDefFont.GetCharSet(), nFontWhich); + } + + pDoc->SetDefault(*pFontItem); + delete pFontItem; + + sal_Int32 nFontHeight = pStdFont->GetFontHeight( FONT_STANDARD, i, eLanguage ); + if(nFontHeight <= 0) + nFontHeight = pStdFont->GetDefaultHeightFor( nFontId, eLanguage ); + pDoc->SetDefault(SvxFontHeightItem( nFontHeight, 100, aFontHeightWhich[i] )); + pDoc->SetDefault( SvxLanguageItem( eLanguage, aLangWhich[i] ) ); + } +} + /*-------------------------------------------------------------------- Beschreibung: Ctor mit SfxCreateMode ????? --------------------------------------------------------------------*/ Modified: incubator/ooo/trunk/main/sw/source/ui/dochdl/swdtflvr.cxx URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/sw/source/ui/dochdl/swdtflvr.cxx?rev=1291962&r1=1291961&r2=1291962&view=diff ============================================================================== --- incubator/ooo/trunk/main/sw/source/ui/dochdl/swdtflvr.cxx (original) +++ incubator/ooo/trunk/main/sw/source/ui/dochdl/swdtflvr.cxx Tue Feb 21 19:25:07 2012 @@ -838,6 +838,8 @@ int SwTransferable::PrepareForCopy( sal_ SwDoc *const pTmpDoc = lcl_GetDoc(*pClpDocFac); + SwDocShell::InitDefaultFontAttr( pTmpDoc ); //#115580# + pTmpDoc->LockExpFlds(); // nie die Felder updaten - Text so belassen pWrtShell->Copy( pTmpDoc );