--- source/dialog/chardlg.hxx (revision 262560) +++ source/dialog/chardlg.hxx (working copy) @@ -163,6 +163,7 @@ DECL_LINK( UpdateHdl_Impl, Timer* ); DECL_LINK( FontModifyHdl_Impl, void* ); DECL_LINK( ColorBoxSelectHdl_Impl, ColorListBox* ); + DECL_LINK( LanguageModifyHdl_Impl, ListBox* ); public: using SfxTabPage::ActivatePage; --- source/dialog/chardlg.cxx (revision 262560) +++ source/dialog/chardlg.cxx (working copy) @@ -55,34 +55,6 @@ #include #include "chardlg.hrc" -//Erstmal definieren, damit die Klassendeklarionen angezogen werden. - - - - - - - - - - - - - - - - - - - - - - - - - - - #include // XColorTable #include "chardlg.hxx" #include "fontitem.hxx" @@ -677,6 +649,7 @@ m_pWestFontLanguageLB->SetLanguageList( LANG_LIST_WESTERN, TRUE, FALSE, TRUE ); m_pEastFontLanguageLB->SetLanguageList( LANG_LIST_CJK, TRUE, FALSE, TRUE ); m_pCTLFontLanguageLB->SetLanguageList( LANG_LIST_CTL, TRUE, FALSE, TRUE ); + m_aPreviewWin.SetLanguageSupport( bCJK, bShowCTL ); Initialize(); } @@ -783,7 +756,12 @@ m_pCTLFontStyleLB->SetModifyHdl( aLink ); m_pCTLFontSizeLB->SetModifyHdl( aLink ); - m_pImpl->m_aUpdateTimer.SetTimeoutHdl( LINK( this, SvxCharNamePage, UpdateHdl_Impl ) ); + aLink = LINK( this, SvxCharNamePage, LanguageModifyHdl_Impl ); + m_pWestFontLanguageLB->SetSelectHdl( aLink ); + m_pEastFontLanguageLB->SetSelectHdl( aLink ); + m_pCTLFontLanguageLB->SetSelectHdl( aLink ); + + m_pImpl->m_aUpdateTimer.SetTimeoutHdl( LINK( this, SvxCharNamePage, UpdateHdl_Impl ) ); m_pColorFL->Hide(); m_pColorFT->Hide(); @@ -913,6 +891,11 @@ calcFontInfo(rCTLFont,this,m_pCTLFontNameLB,m_pCTLFontStyleLB,m_pCTLFontSizeLB,pFontList,GetWhich( SID_ATTR_CHAR_CTL_FONT ),GetWhich( SID_ATTR_CHAR_CTL_FONTHEIGHT )); + m_aPreviewWin.SetLanguages( + (LanguageType)(ULONG)m_pWestFontLanguageLB->GetEntryData( m_pWestFontLanguageLB->GetSelectEntryPos() ), + (LanguageType)(ULONG)m_pEastFontLanguageLB->GetEntryData( m_pEastFontLanguageLB->GetSelectEntryPos() ), + (LanguageType)(ULONG)m_pCTLFontLanguageLB->GetEntryData( m_pCTLFontLanguageLB->GetSelectEntryPos() )); + m_aPreviewWin.Invalidate(); m_aFontTypeFT.SetText( pFontList->GetFontMapText( aFontInfo ) ); } @@ -1585,6 +1568,14 @@ // ----------------------------------------------------------------------- +IMPL_LINK( SvxCharNamePage, LanguageModifyHdl_Impl, ListBox*, EMPTYARG ) +{ + m_pImpl->m_aUpdateTimer.Start(); + return 0; +} + +// ----------------------------------------------------------------------- + IMPL_LINK( SvxCharNamePage, FontModifyHdl_Impl, void*, pNameBox ) { m_pImpl->m_aUpdateTimer.Start(); --- source/dialog/fntctrl.cxx (revision 262560) +++ source/dialog/fntctrl.cxx (working copy) @@ -55,7 +55,7 @@ #include #include -#define TEXT_WIDTH 20 +#define TEXT_WIDTH 60 using namespace ::com::sun::star::uno; using namespace ::com::sun::star::lang; @@ -137,25 +137,37 @@ long n100PercentFontWidthCTL; UINT16 nFontWidthScale; - BOOL bSelection : 1, + LanguageType eWesternLang; + LanguageType eCJKLang; + LanguageType eCTLLang; + + BOOL bSelection : 1, bGetSelection : 1, bUseResText : 1, bTwoLines : 1, bIsCJKUI : 1, bIsCTLUI : 1, bUseFontNameAsText : 1, - bTextInited : 1; + bTextInited : 1, + bIsCJKSupported : 1, + bIsCTLSupported : 1; void _CheckScript(); + String GetPreviewString( bool bCTL, LanguageType eLang ); public: inline FontPrevWin_Impl() : pPrinter( NULL ), bDelPrinter( FALSE ), pColor( NULL ), pBackColor( 0 ), cStartBracket( 0 ), cEndBracket( 0 ), nFontWidthScale( 100 ), + eWesternLang(LANGUAGE_NONE), + eCJKLang(LANGUAGE_NONE), + eCTLLang(LANGUAGE_NONE), bSelection( FALSE ), bGetSelection( FALSE ), bUseResText( FALSE ), bTwoLines( FALSE ), bIsCJKUI( FALSE ), bIsCTLUI( FALSE ), - bUseFontNameAsText( FALSE ), bTextInited( FALSE ) + bUseFontNameAsText( FALSE ), bTextInited( FALSE ), + bIsCTLSupported( FALSE ), + bIsCJKSupported( FALSE ) { Invalidate100PercentFontWidth(); } @@ -201,6 +213,82 @@ return n100PercentFontWidth != -1; } +String FontPrevWin_Impl::GetPreviewString( bool bCTL, LanguageType eLang ) +{ + String sRet; + if( bCTL ) + { + ByteString sExample; + //find a string related to the language type + //if LANGUAGE_NONE is set then show the font name + switch( eLang) + { + case LANGUAGE_ARABIC : + case LANGUAGE_ARABIC_ALGERIA : + case LANGUAGE_ARABIC_BAHRAIN : + case LANGUAGE_ARABIC_EGYPT : + case LANGUAGE_ARABIC_IRAQ : + case LANGUAGE_ARABIC_JORDAN : + case LANGUAGE_ARABIC_KUWAIT : + case LANGUAGE_ARABIC_LEBANON : + case LANGUAGE_ARABIC_LIBYA : + case LANGUAGE_ARABIC_MOROCCO : + case LANGUAGE_ARABIC_OMAN : + case LANGUAGE_ARABIC_QATAR : + case LANGUAGE_ARABIC_SAUDI_ARABIA : + case LANGUAGE_ARABIC_SYRIA : + case LANGUAGE_ARABIC_TUNISIA : + case LANGUAGE_ARABIC_UAE : + case LANGUAGE_ARABIC_YEMEN : + sExample = ByteString("+BkYGTgZFBk8GSAYwBk4GLA-"); + break; + case LANGUAGE_HEBREW: + sExample = ByteString("+BdMF1QXSBd4F1A-"); + break; + case LANGUAGE_NONE: + //no break; + default:; + } + if( sExample.Len() ) + sRet = String( sExample, RTL_TEXTENCODING_UTF7 ); + else + sRet = aCJKFont.GetName(); + } + else + { + ByteString sExample; + //if LANGUAGE_NONE is set then show the font name + switch( eLang) + { + case LANGUAGE_JAPANESE: + sExample = ByteString("+AA0wtTDzMNcw6w-"); + break; + case LANGUAGE_CHINESE: + case LANGUAGE_CHINESE_MACAU: + case LANGUAGE_CHINESE_SIMPLIFIED: + sExample = ByteString("+aDdUwQ-"); + break; + case LANGUAGE_CHINESE_SINGAPORE: + case LANGUAGE_CHINESE_HONGKONG: + case LANGUAGE_CHINESE_TRADITIONAL: + sExample = ByteString("+aiNUwQ-"); + break; + case LANGUAGE_KOREAN: + case LANGUAGE_KOREAN_JOHAB: + sExample = ByteString("+rKy8+A-"); + break; + case LANGUAGE_NONE: + //no break; + default:; + } + if( sExample.Len() ) + sRet = String( sExample, RTL_TEXTENCODING_UTF7 ); + else + sRet = aCJKFont.GetName(); + } + return sRet; +} + // class FontPrevWin_Impl ----------------------------------------------- /*-----------------19.7.2001 08:44------------------ @@ -557,6 +645,22 @@ // ----------------------------------------------------------------------- +void SvxFontPrevWindow::SetLanguages( + LanguageType eWesternLang, LanguageType eCJKLang, LanguageType eCTLLang ) +{ + pImpl->eWesternLang = eWesternLang; + pImpl->eCJKLang = eCJKLang; + pImpl->eCTLLang = eCTLLang; +} +// ----------------------------------------------------------------------- + +void SvxFontPrevWindow::SetLanguageSupport( sal_Bool bCJK, sal_Bool bCTL ) +{ + pImpl->bIsCTLSupported = bCTL; + pImpl->bIsCJKSupported = bCJK; +} +// ----------------------------------------------------------------------- + void SvxFontPrevWindow::SetFont( const SvxFont& rOutFont ) { setFont( rOutFont, pImpl->aFont ); @@ -641,15 +745,24 @@ pImpl->aText = pSh->GetSelectionText(); pImpl->bGetSelection = TRUE; pImpl->bSelection = pImpl->aText.Len() != 0; - } if ( !pImpl->bSelection || pImpl->bUseFontNameAsText ) { pImpl->aText = rFont.GetName(); - if( pImpl->bIsCJKUI ) - pImpl->aText += rCJKFont.GetName(); - //TODO bIsCTLUI + String sDistance(String::CreateFromAscii("______")); + if( pImpl->bIsCJKSupported ) + { +// pImpl->aText += rCJKFont.GetName(); + pImpl->aText += sDistance; + pImpl->aText += pImpl->GetPreviewString( false, pImpl->eCJKLang ); + } + if( pImpl->bIsCTLSupported ) + { + pImpl->aText += sDistance; + pImpl->aText += pImpl->GetPreviewString( true, pImpl->eCTLLang ); + } + } if ( !pImpl->aText.Len() ) --- inc/svx/fntctrl.hxx (revision 262560) +++ inc/svx/fntctrl.hxx (working copy) @@ -86,6 +86,9 @@ void SetPreviewText( const ::rtl::OUString& rString ); void SetFontNameAsPreviewText(); + + void SetLanguages( LanguageType eWesternLang, LanguageType eCJKLang, LanguageType eCTLLang ); + void SetLanguageSupport( sal_Bool bCJK, sal_Bool bCTL ); }; #endif // #ifndef _SVX_FNTCTRL_HXX