Hi,
This page removes the languages that are not installed from the
language-lists in de fonts-dialog. It will always display the selected
language in the languages-tab of the options-dialog.
--
Greetings,
Rob Snelders
From 420583a965d02bfec595088cab81e8c6d585ca71 Mon Sep 17 00:00:00 2001
From: Rob Snelders <programming@ertai.nl>
Date: Sun, 27 May 2012 15:51:33 +0200
Subject: [PATCH] fd0#47896 - Too many languages in Format/Language
Change-Id: I67a21d4b16c27dd68a2a87a6bcbac438da617f47
---
cui/source/tabpages/chardlg.cxx | 7 ++++---
svx/inc/svx/langbox.hxx | 37 +++++++++++++++++++------------------
svx/source/dialog/langbox.cxx | 26 ++++++++++++++++++++++++--
3 files changed, 47 insertions(+), 23 deletions(-)
diff --git a/cui/source/tabpages/chardlg.cxx b/cui/source/tabpages/chardlg.cxx
index c127824..48a8548 100644
--- a/cui/source/tabpages/chardlg.cxx
+++ b/cui/source/tabpages/chardlg.cxx
@@ -400,9 +400,9 @@ SvxCharNamePage::SvxCharNamePage( Window* pParent, const SfxItemSet& rInSet ) :
FreeResource();
- m_pWestFontLanguageLB->SetLanguageList( LANG_LIST_WESTERN, sal_True, sal_False, sal_True );
- m_pEastFontLanguageLB->SetLanguageList( LANG_LIST_CJK, sal_True, sal_False, sal_True );
- m_pCTLFontLanguageLB->SetLanguageList( LANG_LIST_CTL, sal_True, sal_False, sal_True );
+ m_pWestFontLanguageLB->SetLanguageList( LANG_LIST_SPELL_USED_WESTERN, sal_True, sal_False,
sal_True );
+ m_pEastFontLanguageLB->SetLanguageList( LANG_LIST_SPELL_USED_CJK, sal_True, sal_False,
sal_True );
+ m_pCTLFontLanguageLB->SetLanguageList( LANG_LIST_SPELL_USED_CTL, sal_True, sal_False,
sal_True );
Initialize();
}
@@ -907,6 +907,7 @@ void SvxCharNamePage::Reset_Impl( const SfxItemSet& rSet, LanguageGroup eLangGrp
const SvxLanguageItem& rItem = (SvxLanguageItem&)rSet.Get( nWhich );
LanguageType eLangType = (LanguageType)rItem.GetValue();
DBG_ASSERT( eLangType != LANGUAGE_SYSTEM, "LANGUAGE_SYSTEM not allowed" );
+ pLangBox->InsertLanguageIfNotFound( eLangType );
if ( eLangType != LANGUAGE_DONTKNOW )
pLangBox->SelectLanguage( eLangType );
break;
diff --git a/svx/inc/svx/langbox.hxx b/svx/inc/svx/langbox.hxx
index 7baf253..7ee0f34 100644
--- a/svx/inc/svx/langbox.hxx
+++ b/svx/inc/svx/langbox.hxx
@@ -38,24 +38,24 @@
class SvtLanguageTable;
-#define LANG_LIST_EMPTY 0x0000
-#define LANG_LIST_ALL 0x0001
-#define LANG_LIST_WESTERN 0x0002
-#define LANG_LIST_CTL 0x0004
-#define LANG_LIST_CJK 0x0008
-#define LANG_LIST_FBD_CHARS 0x0010
-#define LANG_LIST_SPELL_AVAIL 0x0020
-#define LANG_LIST_HYPH_AVAIL 0x0040
-#define LANG_LIST_THES_AVAIL 0x0080
-#define LANG_LIST_ONLY_KNOWN 0x0100 // list only locales provided by I18N
-#define LANG_LIST_SPELL_USED 0x0200
-#define LANG_LIST_HYPH_USED 0x0400
-#define LANG_LIST_THES_USED 0x0800
-#define LANG_LIST_ALSO_PRIMARY_ONLY 0x1000 // Do not exclude primary-only
- // languages that do not form a
- // locale, such as Arabic as
- // opposed to Arabic-Egypt.
-
+#define LANG_LIST_EMPTY 0x0000
+#define LANG_LIST_ALL 0x0001
+#define LANG_LIST_WESTERN 0x0002
+#define LANG_LIST_CTL 0x0004
+#define LANG_LIST_CJK 0x0008
+#define LANG_LIST_FBD_CHARS 0x0010
+#define LANG_LIST_SPELL_AVAIL 0x0020
+#define LANG_LIST_HYPH_AVAIL 0x0040
+#define LANG_LIST_THES_AVAIL 0x0080
+#define LANG_LIST_ONLY_KNOWN 0x0100 // list only locales provided by I18N
+#define LANG_LIST_SPELL_USED 0x0200
+#define LANG_LIST_HYPH_USED 0x0400
+#define LANG_LIST_THES_USED 0x0800
+#define LANG_LIST_ALSO_PRIMARY_ONLY 0x1000 // Do not exclude primary-only languages that do not
form a
+ // locale, such as Arabic as opposed to Arabic-Egypt.
+#define LANG_LIST_SPELL_USED_WESTERN 0x2000
+#define LANG_LIST_SPELL_USED_CTL 0x4000
+#define LANG_LIST_SPELL_USED_CJK 0x8000
// load language strings from resource
SVX_DLLPUBLIC String GetDicInfoStr( const String& rName, const sal_uInt16 nLang, sal_Bool bNeg
);
@@ -87,6 +87,7 @@ public:
sal_Bool bHasLangNone, sal_Bool bLangNoneIsLangAll = sal_False,
sal_Bool bCheckSpellAvail = sal_False );
+ sal_uInt16 InsertLanguageIfNotFound( const LanguageType eLangType, sal_uInt16 nPos =
LISTBOX_APPEND );
sal_uInt16 InsertLanguage( const LanguageType eLangType, sal_uInt16 nPos =
LISTBOX_APPEND );
sal_uInt16 InsertDefaultLanguage( sal_Int16 nType, sal_uInt16 nPos = LISTBOX_APPEND );
sal_uInt16 InsertLanguage( const LanguageType eLangType,
diff --git a/svx/source/dialog/langbox.cxx b/svx/source/dialog/langbox.cxx
index 0ec2329..8d02234 100644
--- a/svx/source/dialog/langbox.cxx
+++ b/svx/source/dialog/langbox.cxx
@@ -237,7 +237,10 @@ void SvxLanguageBox::SetLanguageList( sal_Int16 nLangList,
aThesAvailLang = lcl_LocaleSeqToLangSeq( aTmp );
}
}
- if (LANG_LIST_SPELL_USED & nLangList)
+ if ((LANG_LIST_SPELL_USED & nLangList) ||
+ (LANG_LIST_SPELL_USED_WESTERN & nLangList) ||
+ (LANG_LIST_SPELL_USED_CTL & nLangList) ||
+ (LANG_LIST_SPELL_USED_CJK & nLangList))
{
Reference< XSpellChecker1 > xTmp1( SvxGetSpellChecker(), UNO_QUERY );
if (xTmp1.is())
@@ -311,7 +314,16 @@ void SvxLanguageBox::SetLanguageList( sal_Int16 nLangList,
((nLangList & LANG_LIST_HYPH_USED) != 0 &&
lcl_SeqHasLang(aHyphUsedLang, nLangType)) ||
((nLangList & LANG_LIST_THES_USED) != 0 &&
- lcl_SeqHasLang(aThesUsedLang, nLangType))) )
+ lcl_SeqHasLang(aThesUsedLang, nLangType)) ||
+ ((nLangList & LANG_LIST_SPELL_USED_WESTERN) != 0 &&
+ (SvtLanguageOptions::GetScriptTypeOfLanguage(nLangType) == SCRIPTTYPE_LATIN) &&
+ lcl_SeqHasLang(aSpellUsedLang, nLangType)) ||
+ ((nLangList & LANG_LIST_SPELL_USED_CTL) != 0 &&
+ (SvtLanguageOptions::GetScriptTypeOfLanguage(nLangType) == SCRIPTTYPE_COMPLEX)
&&
+ lcl_SeqHasLang(aSpellUsedLang, nLangType)) ||
+ ((nLangList & LANG_LIST_SPELL_USED_CJK) != 0 &&
+ (SvtLanguageOptions::GetScriptTypeOfLanguage(nLangType) == SCRIPTTYPE_ASIAN) &&
+ lcl_SeqHasLang(aSpellUsedLang, nLangType))) )
InsertLanguage( nLangType );
}
@@ -322,6 +334,16 @@ void SvxLanguageBox::SetLanguageList( sal_Int16 nLangList,
//------------------------------------------------------------------------
+sal_uInt16 SvxLanguageBox::InsertLanguageIfNotFound( const LanguageType nLangType, sal_uInt16 nPos
)
+{
+ LanguageType nLang = MsLangId::getReplacementForObsoleteLanguage( nLangType);
+ sal_uInt16 nAt = TypeToPos_Impl( nLang, *this );
+ if ( nAt == LISTBOX_ENTRY_NOTFOUND )
+ return InsertLanguage( nLangType, nPos );
+ else
+ return nAt;
+}
+
sal_uInt16 SvxLanguageBox::InsertLanguage( const LanguageType nLangType, sal_uInt16 nPos )
{
return ImplInsertLanguage( nLangType, nPos, ::com::sun::star::i18n::ScriptType::WEAK );
--
1.7.5.4
Context
- fdo#47896 - Too many languages in Format/Language · Rob Snelders
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.