update credits
[LibreOffice.git] / svl / source / config / languageoptions.cxx
blobeb7a711d54ff9b159dca46f462763f44890e8e1f
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
21 #include <svl/languageoptions.hxx>
22 #include <svl/cjkoptions.hxx>
23 #include <svl/ctloptions.hxx>
24 #include <i18nlangtag/mslangid.hxx>
25 #include <i18nlangtag/languagetag.hxx>
26 #include <osl/mutex.hxx>
27 #include <rtl/instance.hxx>
28 #include <com/sun/star/i18n/ScriptType.hpp>
29 #include <unotools/syslocale.hxx>
31 using namespace ::com::sun::star;
32 // global ----------------------------------------------------------------------
34 namespace { struct ALMutex : public rtl::Static< ::osl::Mutex, ALMutex > {}; }
36 // class SvtLanguageOptions ----------------------------------------------------
38 SvtLanguageOptions::SvtLanguageOptions( sal_Bool _bDontLoad )
40 // Global access, must be guarded (multithreading)
41 ::osl::MutexGuard aGuard( ALMutex::get() );
43 m_pCJKOptions = new SvtCJKOptions( _bDontLoad );
44 m_pCTLOptions = new SvtCTLOptions( _bDontLoad );
45 m_pCTLOptions->AddListener(this);
46 m_pCJKOptions->AddListener(this);
48 //------------------------------------------------------------------------------
49 SvtLanguageOptions::~SvtLanguageOptions()
51 // Global access, must be guarded (multithreading)
52 ::osl::MutexGuard aGuard( ALMutex::get() );
54 m_pCTLOptions->RemoveListener(this);
55 m_pCJKOptions->RemoveListener(this);
57 delete m_pCJKOptions;
58 delete m_pCTLOptions;
60 //------------------------------------------------------------------------------
61 // CJK options -----------------------------------------------------------------
62 //------------------------------------------------------------------------------
63 sal_Bool SvtLanguageOptions::IsCJKFontEnabled() const
65 return m_pCJKOptions->IsCJKFontEnabled();
67 //------------------------------------------------------------------------------
68 sal_Bool SvtLanguageOptions::IsVerticalTextEnabled() const
70 return m_pCJKOptions->IsVerticalTextEnabled();
72 //------------------------------------------------------------------------------
73 sal_Bool SvtLanguageOptions::IsAsianTypographyEnabled() const
75 return m_pCJKOptions->IsAsianTypographyEnabled();
77 //------------------------------------------------------------------------------
78 sal_Bool SvtLanguageOptions::IsJapaneseFindEnabled() const
80 return m_pCJKOptions->IsJapaneseFindEnabled();
82 //------------------------------------------------------------------------------
83 void SvtLanguageOptions::SetAll( sal_Bool _bSet )
85 m_pCJKOptions->SetAll( _bSet );
87 //------------------------------------------------------------------------------
88 sal_Bool SvtLanguageOptions::IsAnyEnabled() const
90 return m_pCJKOptions->IsAnyEnabled();
92 //------------------------------------------------------------------------------
93 // CTL options -----------------------------------------------------------------
94 //------------------------------------------------------------------------------
95 void SvtLanguageOptions::SetCTLFontEnabled( sal_Bool _bEnabled )
97 m_pCTLOptions->SetCTLFontEnabled( _bEnabled );
99 //------------------------------------------------------------------------------
100 sal_Bool SvtLanguageOptions::IsCTLFontEnabled() const
102 return m_pCTLOptions->IsCTLFontEnabled();
104 //------------------------------------------------------------------------------
105 void SvtLanguageOptions::SetCTLSequenceChecking( sal_Bool _bEnabled )
107 m_pCTLOptions->SetCTLSequenceChecking( _bEnabled );
110 void SvtLanguageOptions::SetCTLSequenceCheckingRestricted( sal_Bool _bEnable )
112 m_pCTLOptions->SetCTLSequenceCheckingRestricted( _bEnable );
115 void SvtLanguageOptions::SetCTLSequenceCheckingTypeAndReplace( sal_Bool _bEnable )
117 m_pCTLOptions->SetCTLSequenceCheckingTypeAndReplace( _bEnable );
120 //------------------------------------------------------------------------------
121 sal_Bool SvtLanguageOptions::IsReadOnly(SvtLanguageOptions::EOption eOption) const
123 sal_Bool bReadOnly = sal_False;
124 switch(eOption)
126 // cjk options
127 case SvtLanguageOptions::E_CJKFONT : bReadOnly = m_pCJKOptions->IsReadOnly(SvtCJKOptions::E_CJKFONT ); break;
128 case SvtLanguageOptions::E_VERTICALTEXT : bReadOnly = m_pCJKOptions->IsReadOnly(SvtCJKOptions::E_VERTICALTEXT ); break;
129 case SvtLanguageOptions::E_ASIANTYPOGRAPHY : bReadOnly = m_pCJKOptions->IsReadOnly(SvtCJKOptions::E_ASIANTYPOGRAPHY); break;
130 case SvtLanguageOptions::E_JAPANESEFIND : bReadOnly = m_pCJKOptions->IsReadOnly(SvtCJKOptions::E_JAPANESEFIND ); break;
131 case SvtLanguageOptions::E_RUBY : bReadOnly = m_pCJKOptions->IsReadOnly(SvtCJKOptions::E_RUBY ); break;
132 case SvtLanguageOptions::E_CHANGECASEMAP : bReadOnly = m_pCJKOptions->IsReadOnly(SvtCJKOptions::E_CHANGECASEMAP ); break;
133 case SvtLanguageOptions::E_DOUBLELINES : bReadOnly = m_pCJKOptions->IsReadOnly(SvtCJKOptions::E_DOUBLELINES ); break;
134 case SvtLanguageOptions::E_EMPHASISMARKS : bReadOnly = m_pCJKOptions->IsReadOnly(SvtCJKOptions::E_EMPHASISMARKS ); break;
135 case SvtLanguageOptions::E_VERTICALCALLOUT : bReadOnly = m_pCJKOptions->IsReadOnly(SvtCJKOptions::E_VERTICALCALLOUT); break;
136 case SvtLanguageOptions::E_ALLCJK : bReadOnly = m_pCJKOptions->IsReadOnly(SvtCJKOptions::E_ALL ); break;
137 // ctl options
138 case SvtLanguageOptions::E_CTLFONT : bReadOnly = m_pCTLOptions->IsReadOnly(SvtCTLOptions::E_CTLFONT ); break;
139 case SvtLanguageOptions::E_CTLSEQUENCECHECKING : bReadOnly = m_pCTLOptions->IsReadOnly(SvtCTLOptions::E_CTLSEQUENCECHECKING); break;
140 case SvtLanguageOptions::E_CTLCURSORMOVEMENT : bReadOnly = m_pCTLOptions->IsReadOnly(SvtCTLOptions::E_CTLCURSORMOVEMENT ); break;
141 case SvtLanguageOptions::E_CTLTEXTNUMERALS : bReadOnly = m_pCTLOptions->IsReadOnly(SvtCTLOptions::E_CTLTEXTNUMERALS ); break;
143 return bReadOnly;
146 // returns for a language the scripttype
147 sal_uInt16 SvtLanguageOptions::GetScriptTypeOfLanguage( sal_uInt16 nLang )
149 if( LANGUAGE_DONTKNOW == nLang )
150 nLang = LANGUAGE_ENGLISH_US;
151 else if( LANGUAGE_SYSTEM == nLang )
152 nLang = SvtSysLocale().GetLanguageTag().getLanguageType();
154 sal_Int16 nScriptType = MsLangId::getScriptType( nLang );
155 sal_uInt16 nScript;
156 switch (nScriptType)
158 case ::com::sun::star::i18n::ScriptType::ASIAN:
159 nScript = SCRIPTTYPE_ASIAN;
160 break;
161 case ::com::sun::star::i18n::ScriptType::COMPLEX:
162 nScript = SCRIPTTYPE_COMPLEX;
163 break;
164 default:
165 nScript = SCRIPTTYPE_LATIN;
167 return nScript;
169 // -----------------------------------------------------------------------------
171 SvtSystemLanguageOptions::SvtSystemLanguageOptions() :
172 utl::ConfigItem( "System/L10N")
174 uno::Sequence< OUString > aPropertyNames(1);
175 OUString* pNames = aPropertyNames.getArray();
176 pNames[0] = "SystemLocale";
177 uno::Sequence< uno::Any > aValues = GetProperties( aPropertyNames );
179 if ( aValues.getLength() )
181 aValues[0]>>= m_sWin16SystemLocale;
185 SvtSystemLanguageOptions::~SvtSystemLanguageOptions()
189 void SvtSystemLanguageOptions::Commit()
191 //does nothing
194 void SvtSystemLanguageOptions::Notify( const com::sun::star::uno::Sequence< OUString >& )
196 // no listeners supported yet
200 LanguageType SvtSystemLanguageOptions::GetWin16SystemLanguage()
202 if( m_sWin16SystemLocale.isEmpty() )
203 return LANGUAGE_NONE;
204 return LanguageTag( m_sWin16SystemLocale ).getLanguageType();
208 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */