Date: prev next · Thread: first prev next last
2012 Archives by date, by thread · List index


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


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.