xref: /AOO41X/main/basctl/source/basicide/localizationmgr.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir #include "precompiled_basctl.hxx"
29*cdf0e10cSrcweir #include <ide_pch.hxx>
30*cdf0e10cSrcweir 
31*cdf0e10cSrcweir #include <basidesh.hxx>
32*cdf0e10cSrcweir #include <baside3.hxx>
33*cdf0e10cSrcweir #include <basobj.hxx>
34*cdf0e10cSrcweir #include <iderdll.hxx>
35*cdf0e10cSrcweir #include "dlged.hxx"
36*cdf0e10cSrcweir 
37*cdf0e10cSrcweir #include <localizationmgr.hxx>
38*cdf0e10cSrcweir #include <com/sun/star/resource/XStringResourceSupplier.hpp>
39*cdf0e10cSrcweir #include <com/sun/star/frame/XLayoutManager.hpp>
40*cdf0e10cSrcweir 
41*cdf0e10cSrcweir using namespace ::com::sun::star;
42*cdf0e10cSrcweir using namespace ::com::sun::star::uno;
43*cdf0e10cSrcweir using namespace ::com::sun::star::lang;
44*cdf0e10cSrcweir using namespace ::com::sun::star::beans;
45*cdf0e10cSrcweir using namespace ::com::sun::star::resource;
46*cdf0e10cSrcweir 
47*cdf0e10cSrcweir static ::rtl::OUString aDot  = ::rtl::OUString::createFromAscii( "." );
48*cdf0e10cSrcweir static ::rtl::OUString aEsc  = ::rtl::OUString::createFromAscii( "&" );
49*cdf0e10cSrcweir static ::rtl::OUString aSemi = ::rtl::OUString::createFromAscii( ";" );
50*cdf0e10cSrcweir 
51*cdf0e10cSrcweir 
52*cdf0e10cSrcweir LocalizationMgr::LocalizationMgr( BasicIDEShell* pIDEShell,
53*cdf0e10cSrcweir     const ScriptDocument& rDocument, String aLibName,
54*cdf0e10cSrcweir 	const Reference< XStringResourceManager >& xStringResourceManager )
55*cdf0e10cSrcweir 		: m_xStringResourceManager( xStringResourceManager )
56*cdf0e10cSrcweir 		, m_pIDEShell( pIDEShell )
57*cdf0e10cSrcweir 		, m_aDocument( rDocument )
58*cdf0e10cSrcweir 		, m_aLibName( aLibName )
59*cdf0e10cSrcweir {
60*cdf0e10cSrcweir }
61*cdf0e10cSrcweir 
62*cdf0e10cSrcweir bool LocalizationMgr::isLibraryLocalized( void )
63*cdf0e10cSrcweir {
64*cdf0e10cSrcweir 	bool bRet = false;
65*cdf0e10cSrcweir 	if( m_xStringResourceManager.is() )
66*cdf0e10cSrcweir 	{
67*cdf0e10cSrcweir 		Sequence< Locale > aLocaleSeq = m_xStringResourceManager->getLocales();
68*cdf0e10cSrcweir 		bRet = ( aLocaleSeq.getLength() > 0 );
69*cdf0e10cSrcweir 	}
70*cdf0e10cSrcweir 	return bRet;
71*cdf0e10cSrcweir }
72*cdf0e10cSrcweir 
73*cdf0e10cSrcweir void LocalizationMgr::handleTranslationbar( void )
74*cdf0e10cSrcweir {
75*cdf0e10cSrcweir 	static ::rtl::OUString aLayoutManagerName = ::rtl::OUString::createFromAscii( "LayoutManager" );
76*cdf0e10cSrcweir 	static ::rtl::OUString aToolBarResName =
77*cdf0e10cSrcweir 		::rtl::OUString::createFromAscii( "private:resource/toolbar/translationbar" );
78*cdf0e10cSrcweir 
79*cdf0e10cSrcweir 	Reference< beans::XPropertySet > xFrameProps
80*cdf0e10cSrcweir 		( m_pIDEShell->GetViewFrame()->GetFrame().GetFrameInterface(), uno::UNO_QUERY );
81*cdf0e10cSrcweir 	if ( xFrameProps.is() )
82*cdf0e10cSrcweir     {
83*cdf0e10cSrcweir 		Reference< ::com::sun::star::frame::XLayoutManager > xLayoutManager;
84*cdf0e10cSrcweir 		uno::Any a = xFrameProps->getPropertyValue( aLayoutManagerName );
85*cdf0e10cSrcweir 		a >>= xLayoutManager;
86*cdf0e10cSrcweir         if ( xLayoutManager.is() )
87*cdf0e10cSrcweir         {
88*cdf0e10cSrcweir 			if ( !isLibraryLocalized() )
89*cdf0e10cSrcweir             {
90*cdf0e10cSrcweir                 xLayoutManager->destroyElement( aToolBarResName );
91*cdf0e10cSrcweir             }
92*cdf0e10cSrcweir             else
93*cdf0e10cSrcweir             {
94*cdf0e10cSrcweir                 xLayoutManager->createElement( aToolBarResName );
95*cdf0e10cSrcweir                 xLayoutManager->requestElement( aToolBarResName );
96*cdf0e10cSrcweir             }
97*cdf0e10cSrcweir         }
98*cdf0e10cSrcweir     }
99*cdf0e10cSrcweir }
100*cdf0e10cSrcweir 
101*cdf0e10cSrcweir 
102*cdf0e10cSrcweir //============================================
103*cdf0e10cSrcweir // TODO: -> export from toolkit
104*cdf0e10cSrcweir 
105*cdf0e10cSrcweir struct LanguageDependentProp
106*cdf0e10cSrcweir {
107*cdf0e10cSrcweir     const char* pPropName;
108*cdf0e10cSrcweir     sal_Int32   nPropNameLength;
109*cdf0e10cSrcweir };
110*cdf0e10cSrcweir 
111*cdf0e10cSrcweir static LanguageDependentProp aLanguageDependentProp[] =
112*cdf0e10cSrcweir {
113*cdf0e10cSrcweir     { "Text",            4 },
114*cdf0e10cSrcweir     { "Label",           5 },
115*cdf0e10cSrcweir     { "Title",           5 },
116*cdf0e10cSrcweir     { "HelpText",        8 },
117*cdf0e10cSrcweir     { "CurrencySymbol", 14 },
118*cdf0e10cSrcweir     { "StringItemList", 14 },
119*cdf0e10cSrcweir     { 0, 0                 }
120*cdf0e10cSrcweir };
121*cdf0e10cSrcweir 
122*cdf0e10cSrcweir bool isLanguageDependentProperty( ::rtl::OUString aName )
123*cdf0e10cSrcweir {
124*cdf0e10cSrcweir 	bool bRet = false;
125*cdf0e10cSrcweir 
126*cdf0e10cSrcweir 	LanguageDependentProp* pLangDepProp = aLanguageDependentProp;
127*cdf0e10cSrcweir 	while( pLangDepProp->pPropName != 0 )
128*cdf0e10cSrcweir 	{
129*cdf0e10cSrcweir 		if( aName.equalsAsciiL( pLangDepProp->pPropName, pLangDepProp->nPropNameLength ))
130*cdf0e10cSrcweir 		{
131*cdf0e10cSrcweir 			bRet = true;
132*cdf0e10cSrcweir 			break;
133*cdf0e10cSrcweir 		}
134*cdf0e10cSrcweir 		pLangDepProp++;
135*cdf0e10cSrcweir 	}
136*cdf0e10cSrcweir 	return bRet;
137*cdf0e10cSrcweir }
138*cdf0e10cSrcweir //============================================
139*cdf0e10cSrcweir 
140*cdf0e10cSrcweir void LocalizationMgr::implEnableDisableResourceForAllLibraryDialogs( HandleResourceMode eMode )
141*cdf0e10cSrcweir {
142*cdf0e10cSrcweir     Sequence< ::rtl::OUString > aDlgNames = m_aDocument.getObjectNames( E_DIALOGS, m_aLibName );
143*cdf0e10cSrcweir     sal_Int32 nDlgCount = aDlgNames.getLength();
144*cdf0e10cSrcweir     const ::rtl::OUString* pDlgNames = aDlgNames.getConstArray();
145*cdf0e10cSrcweir 
146*cdf0e10cSrcweir 	Reference< XStringResourceResolver > xDummyStringResolver;
147*cdf0e10cSrcweir 	for( sal_Int32 i = 0 ; i < nDlgCount ; i++ )
148*cdf0e10cSrcweir 	{
149*cdf0e10cSrcweir 		String aDlgName = pDlgNames[ i ];
150*cdf0e10cSrcweir 		DialogWindow* pWin = m_pIDEShell->FindDlgWin( m_aDocument, m_aLibName, aDlgName, sal_False );
151*cdf0e10cSrcweir 		if( pWin && pWin->IsA( TYPE( DialogWindow ) ) )
152*cdf0e10cSrcweir 		{
153*cdf0e10cSrcweir 			DialogWindow* pDialogWin = static_cast< DialogWindow* >( pWin );
154*cdf0e10cSrcweir 			Reference< container::XNameContainer > xDialog = pDialogWin->GetDialog();
155*cdf0e10cSrcweir 			if( xDialog.is() )
156*cdf0e10cSrcweir 			{
157*cdf0e10cSrcweir 				// Handle dialog itself as control
158*cdf0e10cSrcweir 				Any aDialogCtrl;
159*cdf0e10cSrcweir 				aDialogCtrl <<= xDialog;
160*cdf0e10cSrcweir 				implHandleControlResourceProperties( aDialogCtrl, aDlgName,
161*cdf0e10cSrcweir 					::rtl::OUString(), m_xStringResourceManager, xDummyStringResolver, eMode );
162*cdf0e10cSrcweir 
163*cdf0e10cSrcweir 				// Handle all controls
164*cdf0e10cSrcweir 				Sequence< ::rtl::OUString > aNames = xDialog->getElementNames();
165*cdf0e10cSrcweir 				const ::rtl::OUString* pNames = aNames.getConstArray();
166*cdf0e10cSrcweir 				sal_Int32 nCtrls = aNames.getLength();
167*cdf0e10cSrcweir 				for( sal_Int32 j = 0 ; j < nCtrls ; ++j )
168*cdf0e10cSrcweir 				{
169*cdf0e10cSrcweir 					::rtl::OUString aCtrlName( pNames[j] );
170*cdf0e10cSrcweir 					Any aCtrl = xDialog->getByName( aCtrlName );
171*cdf0e10cSrcweir 					implHandleControlResourceProperties( aCtrl, aDlgName,
172*cdf0e10cSrcweir 						aCtrlName, m_xStringResourceManager, xDummyStringResolver, eMode );
173*cdf0e10cSrcweir 				}
174*cdf0e10cSrcweir 			}
175*cdf0e10cSrcweir 		}
176*cdf0e10cSrcweir 	}
177*cdf0e10cSrcweir }
178*cdf0e10cSrcweir 
179*cdf0e10cSrcweir 
180*cdf0e10cSrcweir ::rtl::OUString implCreatePureResourceId
181*cdf0e10cSrcweir 	( const ::rtl::OUString& aDialogName, const ::rtl::OUString& aCtrlName,
182*cdf0e10cSrcweir 	  const ::rtl::OUString& aPropName,
183*cdf0e10cSrcweir 	  Reference< XStringResourceManager > xStringResourceManager )
184*cdf0e10cSrcweir {
185*cdf0e10cSrcweir 	sal_Int32 nUniqueId = xStringResourceManager->getUniqueNumericId();
186*cdf0e10cSrcweir 	::rtl::OUString aPureIdStr = ::rtl::OUString::valueOf( nUniqueId );
187*cdf0e10cSrcweir 	aPureIdStr += aDot;
188*cdf0e10cSrcweir 	aPureIdStr += aDialogName;
189*cdf0e10cSrcweir 	aPureIdStr += aDot;
190*cdf0e10cSrcweir 	if( aCtrlName.getLength() )
191*cdf0e10cSrcweir 	{
192*cdf0e10cSrcweir 		aPureIdStr += aCtrlName;
193*cdf0e10cSrcweir 		aPureIdStr += aDot;
194*cdf0e10cSrcweir 	}
195*cdf0e10cSrcweir 	aPureIdStr += aPropName;
196*cdf0e10cSrcweir 	return aPureIdStr;
197*cdf0e10cSrcweir }
198*cdf0e10cSrcweir 
199*cdf0e10cSrcweir extern bool localesAreEqual( const ::com::sun::star::lang::Locale& rLocaleLeft,
200*cdf0e10cSrcweir 							 const ::com::sun::star::lang::Locale& rLocaleRight );
201*cdf0e10cSrcweir 
202*cdf0e10cSrcweir // Works on xStringResourceManager's current language for SET_IDS/RESET_IDS,
203*cdf0e10cSrcweir // anyway only one language should exist when calling this method then,
204*cdf0e10cSrcweir // either the first one for mode SET_IDS or the last one for mode RESET_IDS
205*cdf0e10cSrcweir sal_Int32 LocalizationMgr::implHandleControlResourceProperties
206*cdf0e10cSrcweir 	( Any aControlAny, const ::rtl::OUString& aDialogName, const ::rtl::OUString& aCtrlName,
207*cdf0e10cSrcweir 		Reference< XStringResourceManager > xStringResourceManager,
208*cdf0e10cSrcweir 		Reference< XStringResourceResolver > xSourceStringResolver, HandleResourceMode eMode )
209*cdf0e10cSrcweir {
210*cdf0e10cSrcweir 	sal_Int32 nChangedCount = 0;
211*cdf0e10cSrcweir 
212*cdf0e10cSrcweir 	Reference< XPropertySet > xPropertySet;
213*cdf0e10cSrcweir 	aControlAny >>= xPropertySet;
214*cdf0e10cSrcweir 	if( xPropertySet.is() )
215*cdf0e10cSrcweir 	{
216*cdf0e10cSrcweir 		Sequence< Locale > aLocaleSeq = xStringResourceManager->getLocales();
217*cdf0e10cSrcweir 		sal_Int32 nLocaleCount = aLocaleSeq.getLength();
218*cdf0e10cSrcweir 		if( nLocaleCount == 0 )
219*cdf0e10cSrcweir 			return 0;
220*cdf0e10cSrcweir 
221*cdf0e10cSrcweir 		Reference< XPropertySetInfo > xPropertySetInfo = xPropertySet->getPropertySetInfo();
222*cdf0e10cSrcweir 		if( xPropertySetInfo.is() )
223*cdf0e10cSrcweir 		{
224*cdf0e10cSrcweir 			// get sequence of control properties
225*cdf0e10cSrcweir 			Sequence< Property > aPropSeq = xPropertySetInfo->getProperties();
226*cdf0e10cSrcweir 			const Property* pProps = aPropSeq.getConstArray();
227*cdf0e10cSrcweir 			sal_Int32 nCtrlProps = aPropSeq.getLength();
228*cdf0e10cSrcweir 
229*cdf0e10cSrcweir 			// create a map of tab indices and control names, sorted by tab index
230*cdf0e10cSrcweir 			for( sal_Int32 j = 0 ; j < nCtrlProps ; ++j )
231*cdf0e10cSrcweir 			{
232*cdf0e10cSrcweir 				const Property& rProp = pProps[j];
233*cdf0e10cSrcweir 				::rtl::OUString aPropName = rProp.Name;
234*cdf0e10cSrcweir 		        TypeClass eType = rProp.Type.getTypeClass();
235*cdf0e10cSrcweir 				bool bLanguageDependentProperty =
236*cdf0e10cSrcweir 					(eType == TypeClass_STRING || eType == TypeClass_SEQUENCE)
237*cdf0e10cSrcweir 					&& isLanguageDependentProperty( aPropName );
238*cdf0e10cSrcweir 				if( !bLanguageDependentProperty )
239*cdf0e10cSrcweir 					continue;
240*cdf0e10cSrcweir 
241*cdf0e10cSrcweir 				if( eType == TypeClass_STRING )
242*cdf0e10cSrcweir 				{
243*cdf0e10cSrcweir 					Any aPropAny = xPropertySet->getPropertyValue( aPropName );
244*cdf0e10cSrcweir 					::rtl::OUString aPropStr;
245*cdf0e10cSrcweir 					aPropAny >>= aPropStr;
246*cdf0e10cSrcweir 
247*cdf0e10cSrcweir 					// Replace string by id, add id+string to StringResource
248*cdf0e10cSrcweir 					if( eMode == SET_IDS )
249*cdf0e10cSrcweir 					{
250*cdf0e10cSrcweir 						bool bEscAlreadyExisting = (aPropStr.getLength() && aPropStr.getStr()[0] == '&' );
251*cdf0e10cSrcweir 						if( bEscAlreadyExisting )
252*cdf0e10cSrcweir 							continue;
253*cdf0e10cSrcweir 
254*cdf0e10cSrcweir 						::rtl::OUString aPureIdStr = implCreatePureResourceId
255*cdf0e10cSrcweir 							( aDialogName, aCtrlName, aPropName, xStringResourceManager );
256*cdf0e10cSrcweir 
257*cdf0e10cSrcweir 						// Set Id for all locales
258*cdf0e10cSrcweir 						const Locale* pLocales = aLocaleSeq.getConstArray();
259*cdf0e10cSrcweir 						for( sal_Int32 i = 0 ; i < nLocaleCount ; i++ )
260*cdf0e10cSrcweir 						{
261*cdf0e10cSrcweir 							const Locale& rLocale = pLocales[ i ];
262*cdf0e10cSrcweir 							xStringResourceManager->setStringForLocale( aPureIdStr, aPropStr, rLocale );
263*cdf0e10cSrcweir 						}
264*cdf0e10cSrcweir 
265*cdf0e10cSrcweir 						::rtl::OUString aPropIdStr = aEsc;
266*cdf0e10cSrcweir 						aPropIdStr += aPureIdStr;
267*cdf0e10cSrcweir 						// TODO?: Change here and in toolkit
268*cdf0e10cSrcweir 						//aPropIdStr += aSemi;
269*cdf0e10cSrcweir 						(void)aSemi;
270*cdf0e10cSrcweir 						aPropAny <<= aPropIdStr;
271*cdf0e10cSrcweir 						xPropertySet->setPropertyValue( aPropName, aPropAny );
272*cdf0e10cSrcweir 					}
273*cdf0e10cSrcweir 					// Replace id by string from StringResource
274*cdf0e10cSrcweir 					else if( eMode == RESET_IDS )
275*cdf0e10cSrcweir 					{
276*cdf0e10cSrcweir 						if( aPropStr.getLength() > 1 )
277*cdf0e10cSrcweir 						{
278*cdf0e10cSrcweir 							::rtl::OUString aPureIdStr = aPropStr.copy( 1 );
279*cdf0e10cSrcweir 							::rtl::OUString aNewPropStr = aPropStr;
280*cdf0e10cSrcweir 							try
281*cdf0e10cSrcweir 							{
282*cdf0e10cSrcweir 								aNewPropStr = xStringResourceManager->resolveString( aPureIdStr );
283*cdf0e10cSrcweir 							}
284*cdf0e10cSrcweir 							catch(MissingResourceException&)
285*cdf0e10cSrcweir 							{
286*cdf0e10cSrcweir 							}
287*cdf0e10cSrcweir 							aPropAny <<= aNewPropStr;
288*cdf0e10cSrcweir 							xPropertySet->setPropertyValue( aPropName, aPropAny );
289*cdf0e10cSrcweir 						}
290*cdf0e10cSrcweir 					}
291*cdf0e10cSrcweir 					// Remove Id for all locales
292*cdf0e10cSrcweir 					else if( eMode == REMOVE_IDS_FROM_RESOURCE )
293*cdf0e10cSrcweir 					{
294*cdf0e10cSrcweir 						if( aPropStr.getLength() > 1 )
295*cdf0e10cSrcweir 						{
296*cdf0e10cSrcweir 							::rtl::OUString aPureIdStr = aPropStr.copy( 1 );
297*cdf0e10cSrcweir 
298*cdf0e10cSrcweir 							const Locale* pLocales = aLocaleSeq.getConstArray();
299*cdf0e10cSrcweir 							for( sal_Int32 i = 0 ; i < nLocaleCount ; i++ )
300*cdf0e10cSrcweir 							{
301*cdf0e10cSrcweir 								const Locale& rLocale = pLocales[ i ];
302*cdf0e10cSrcweir 								try
303*cdf0e10cSrcweir 								{
304*cdf0e10cSrcweir 									xStringResourceManager->removeIdForLocale( aPureIdStr, rLocale );
305*cdf0e10cSrcweir 								}
306*cdf0e10cSrcweir 								catch(MissingResourceException&)
307*cdf0e10cSrcweir 								{
308*cdf0e10cSrcweir 								}
309*cdf0e10cSrcweir 							}
310*cdf0e10cSrcweir 						}
311*cdf0e10cSrcweir 					}
312*cdf0e10cSrcweir 					// Rename resource id
313*cdf0e10cSrcweir 					else if( eMode == RENAME_DIALOG_IDS || eMode == RENAME_CONTROL_IDS )
314*cdf0e10cSrcweir 					{
315*cdf0e10cSrcweir 						::rtl::OUString aSourceIdStr = aPropStr;
316*cdf0e10cSrcweir 						::rtl::OUString aPureSourceIdStr = aSourceIdStr.copy( 1 );
317*cdf0e10cSrcweir 
318*cdf0e10cSrcweir 						::rtl::OUString aPureIdStr = implCreatePureResourceId
319*cdf0e10cSrcweir 							( aDialogName, aCtrlName, aPropName, xStringResourceManager );
320*cdf0e10cSrcweir 
321*cdf0e10cSrcweir 						// Set new Id and remove old one for all locales
322*cdf0e10cSrcweir 						const Locale* pLocales = aLocaleSeq.getConstArray();
323*cdf0e10cSrcweir 						for( sal_Int32 i = 0 ; i < nLocaleCount ; i++ )
324*cdf0e10cSrcweir 						{
325*cdf0e10cSrcweir 							const Locale& rLocale = pLocales[ i ];
326*cdf0e10cSrcweir 							::rtl::OUString aResStr;
327*cdf0e10cSrcweir 							try
328*cdf0e10cSrcweir 							{
329*cdf0e10cSrcweir 								aResStr = xStringResourceManager->resolveStringForLocale
330*cdf0e10cSrcweir 									( aPureSourceIdStr, rLocale );
331*cdf0e10cSrcweir 								xStringResourceManager->removeIdForLocale( aPureSourceIdStr, rLocale );
332*cdf0e10cSrcweir 								xStringResourceManager->setStringForLocale( aPureIdStr, aResStr, rLocale );
333*cdf0e10cSrcweir 							}
334*cdf0e10cSrcweir 							catch(MissingResourceException&)
335*cdf0e10cSrcweir 							{}
336*cdf0e10cSrcweir 						}
337*cdf0e10cSrcweir 
338*cdf0e10cSrcweir 						::rtl::OUString aPropIdStr = aEsc;
339*cdf0e10cSrcweir 						aPropIdStr += aPureIdStr;
340*cdf0e10cSrcweir 						// TODO?: Change here and in toolkit
341*cdf0e10cSrcweir 						//aPropIdStr += aSemi;
342*cdf0e10cSrcweir 						(void)aSemi;
343*cdf0e10cSrcweir 						aPropAny <<= aPropIdStr;
344*cdf0e10cSrcweir 						xPropertySet->setPropertyValue( aPropName, aPropAny );
345*cdf0e10cSrcweir 					}
346*cdf0e10cSrcweir 					// Replace string by string from source StringResourceResolver
347*cdf0e10cSrcweir 					else if( eMode == MOVE_RESOURCES && xSourceStringResolver.is() )
348*cdf0e10cSrcweir 					{
349*cdf0e10cSrcweir 						::rtl::OUString aSourceIdStr = aPropStr;
350*cdf0e10cSrcweir 						::rtl::OUString aPureSourceIdStr = aSourceIdStr.copy( 1 );
351*cdf0e10cSrcweir 
352*cdf0e10cSrcweir 						::rtl::OUString aPureIdStr = implCreatePureResourceId
353*cdf0e10cSrcweir 							( aDialogName, aCtrlName, aPropName, xStringResourceManager );
354*cdf0e10cSrcweir 
355*cdf0e10cSrcweir 						const Locale& rDefaultLocale = xSourceStringResolver->getDefaultLocale();
356*cdf0e10cSrcweir 
357*cdf0e10cSrcweir 						// Set Id for all locales
358*cdf0e10cSrcweir 						const Locale* pLocales = aLocaleSeq.getConstArray();
359*cdf0e10cSrcweir 						for( sal_Int32 i = 0 ; i < nLocaleCount ; i++ )
360*cdf0e10cSrcweir 						{
361*cdf0e10cSrcweir 							const Locale& rLocale = pLocales[ i ];
362*cdf0e10cSrcweir 							::rtl::OUString aResStr;
363*cdf0e10cSrcweir 							try
364*cdf0e10cSrcweir 							{
365*cdf0e10cSrcweir 								aResStr = xSourceStringResolver->resolveStringForLocale
366*cdf0e10cSrcweir 									( aPureSourceIdStr, rLocale );
367*cdf0e10cSrcweir 							}
368*cdf0e10cSrcweir 							catch(MissingResourceException&)
369*cdf0e10cSrcweir 							{
370*cdf0e10cSrcweir 								aResStr = xSourceStringResolver->resolveStringForLocale
371*cdf0e10cSrcweir 									( aPureSourceIdStr, rDefaultLocale );
372*cdf0e10cSrcweir 							}
373*cdf0e10cSrcweir 							xStringResourceManager->setStringForLocale( aPureIdStr, aResStr, rLocale );
374*cdf0e10cSrcweir 						}
375*cdf0e10cSrcweir 
376*cdf0e10cSrcweir 						::rtl::OUString aPropIdStr = aEsc;
377*cdf0e10cSrcweir 						aPropIdStr += aPureIdStr;
378*cdf0e10cSrcweir 						// TODO?: Change here and in toolkit
379*cdf0e10cSrcweir 						//aPropIdStr += aSemi;
380*cdf0e10cSrcweir 						(void)aSemi;
381*cdf0e10cSrcweir 						aPropAny <<= aPropIdStr;
382*cdf0e10cSrcweir 						xPropertySet->setPropertyValue( aPropName, aPropAny );
383*cdf0e10cSrcweir 					}
384*cdf0e10cSrcweir 					// Copy string from source to target resource
385*cdf0e10cSrcweir 					else if( eMode == COPY_RESOURCES && xSourceStringResolver.is() )
386*cdf0e10cSrcweir 					{
387*cdf0e10cSrcweir 						::rtl::OUString aSourceIdStr = aPropStr;
388*cdf0e10cSrcweir 						::rtl::OUString aPureSourceIdStr = aSourceIdStr.copy( 1 );
389*cdf0e10cSrcweir 
390*cdf0e10cSrcweir 						const Locale& rDefaultLocale = xSourceStringResolver->getDefaultLocale();
391*cdf0e10cSrcweir 
392*cdf0e10cSrcweir 						// Copy Id for all locales
393*cdf0e10cSrcweir 						const Locale* pLocales = aLocaleSeq.getConstArray();
394*cdf0e10cSrcweir 						for( sal_Int32 i = 0 ; i < nLocaleCount ; i++ )
395*cdf0e10cSrcweir 						{
396*cdf0e10cSrcweir 							const Locale& rLocale = pLocales[ i ];
397*cdf0e10cSrcweir 							::rtl::OUString aResStr;
398*cdf0e10cSrcweir 							try
399*cdf0e10cSrcweir 							{
400*cdf0e10cSrcweir 								aResStr = xSourceStringResolver->resolveStringForLocale
401*cdf0e10cSrcweir 									( aPureSourceIdStr, rLocale );
402*cdf0e10cSrcweir 							}
403*cdf0e10cSrcweir 							catch(MissingResourceException&)
404*cdf0e10cSrcweir 							{
405*cdf0e10cSrcweir 								aResStr = xSourceStringResolver->resolveStringForLocale
406*cdf0e10cSrcweir 									( aPureSourceIdStr, rDefaultLocale );
407*cdf0e10cSrcweir 							}
408*cdf0e10cSrcweir 							xStringResourceManager->setStringForLocale( aPureSourceIdStr, aResStr, rLocale );
409*cdf0e10cSrcweir 						}
410*cdf0e10cSrcweir 					}
411*cdf0e10cSrcweir 					nChangedCount++;
412*cdf0e10cSrcweir 				}
413*cdf0e10cSrcweir 
414*cdf0e10cSrcweir 				// Listbox / Combobox
415*cdf0e10cSrcweir 				else if( eType == TypeClass_SEQUENCE )
416*cdf0e10cSrcweir 				{
417*cdf0e10cSrcweir 					Any aPropAny = xPropertySet->getPropertyValue( aPropName );
418*cdf0e10cSrcweir 					Sequence< ::rtl::OUString > aPropStrings;
419*cdf0e10cSrcweir 					aPropAny >>= aPropStrings;
420*cdf0e10cSrcweir 
421*cdf0e10cSrcweir 					const ::rtl::OUString* pPropStrings = aPropStrings.getConstArray();
422*cdf0e10cSrcweir 					sal_Int32 nPropStringCount = aPropStrings.getLength();
423*cdf0e10cSrcweir 					if( nPropStringCount == 0 )
424*cdf0e10cSrcweir 						continue;
425*cdf0e10cSrcweir 
426*cdf0e10cSrcweir 					// Replace string by id, add id+string to StringResource
427*cdf0e10cSrcweir 					if( eMode == SET_IDS )
428*cdf0e10cSrcweir 					{
429*cdf0e10cSrcweir 						Sequence< ::rtl::OUString > aIdStrings;
430*cdf0e10cSrcweir 						aIdStrings.realloc( nPropStringCount );
431*cdf0e10cSrcweir 						::rtl::OUString* pIdStrings = aIdStrings.getArray();
432*cdf0e10cSrcweir 
433*cdf0e10cSrcweir 						::rtl::OUString aIdStrBase = aDot;
434*cdf0e10cSrcweir 						aIdStrBase += aCtrlName;
435*cdf0e10cSrcweir 						aIdStrBase += aDot;
436*cdf0e10cSrcweir 						aIdStrBase += aPropName;
437*cdf0e10cSrcweir 
438*cdf0e10cSrcweir 						const Locale* pLocales = aLocaleSeq.getConstArray();
439*cdf0e10cSrcweir 						sal_Int32 i;
440*cdf0e10cSrcweir 						for ( i = 0; i < nPropStringCount; ++i )
441*cdf0e10cSrcweir 						{
442*cdf0e10cSrcweir 							::rtl::OUString aPropStr = pPropStrings[i];
443*cdf0e10cSrcweir 							bool bEscAlreadyExisting = (aPropStr.getLength() && aPropStr.getStr()[0] == '&' );
444*cdf0e10cSrcweir 							if( bEscAlreadyExisting )
445*cdf0e10cSrcweir 							{
446*cdf0e10cSrcweir 								pIdStrings[i] = aPropStr;
447*cdf0e10cSrcweir 								continue;
448*cdf0e10cSrcweir 							}
449*cdf0e10cSrcweir 
450*cdf0e10cSrcweir 							sal_Int32 nUniqueId = xStringResourceManager->getUniqueNumericId();
451*cdf0e10cSrcweir 							::rtl::OUString aPureIdStr = ::rtl::OUString::valueOf( nUniqueId );
452*cdf0e10cSrcweir 							aPureIdStr += aIdStrBase;
453*cdf0e10cSrcweir 
454*cdf0e10cSrcweir 							// Set Id for all locales
455*cdf0e10cSrcweir 							for( sal_Int32 iLocale = 0 ; iLocale < nLocaleCount ; iLocale++ )
456*cdf0e10cSrcweir 							{
457*cdf0e10cSrcweir 								const Locale& rLocale = pLocales[ iLocale ];
458*cdf0e10cSrcweir 								xStringResourceManager->setStringForLocale( aPureIdStr, aPropStr, rLocale );
459*cdf0e10cSrcweir 							}
460*cdf0e10cSrcweir 
461*cdf0e10cSrcweir 							::rtl::OUString aPropIdStr = aEsc;
462*cdf0e10cSrcweir 							aPropIdStr += aPureIdStr;
463*cdf0e10cSrcweir 							pIdStrings[i] = aPropIdStr;
464*cdf0e10cSrcweir 						}
465*cdf0e10cSrcweir 						aPropAny <<= aIdStrings;
466*cdf0e10cSrcweir 						xPropertySet->setPropertyValue( aPropName, aPropAny );
467*cdf0e10cSrcweir 					}
468*cdf0e10cSrcweir 					// Replace id by string from StringResource
469*cdf0e10cSrcweir 					else if( eMode == RESET_IDS )
470*cdf0e10cSrcweir 					{
471*cdf0e10cSrcweir 						Sequence< ::rtl::OUString > aNewPropStrings;
472*cdf0e10cSrcweir 						aNewPropStrings.realloc( nPropStringCount );
473*cdf0e10cSrcweir 						::rtl::OUString* pNewPropStrings = aNewPropStrings.getArray();
474*cdf0e10cSrcweir 
475*cdf0e10cSrcweir 						sal_Int32 i;
476*cdf0e10cSrcweir 						for ( i = 0; i < nPropStringCount; ++i )
477*cdf0e10cSrcweir 						{
478*cdf0e10cSrcweir 							::rtl::OUString aIdStr = pPropStrings[i];
479*cdf0e10cSrcweir 							::rtl::OUString aNewPropStr = aIdStr;
480*cdf0e10cSrcweir 							if( aIdStr.getLength() > 1 )
481*cdf0e10cSrcweir 							{
482*cdf0e10cSrcweir 								::rtl::OUString aPureIdStr = aIdStr.copy( 1 );
483*cdf0e10cSrcweir 								try
484*cdf0e10cSrcweir 								{
485*cdf0e10cSrcweir 									aNewPropStr = xStringResourceManager->resolveString( aPureIdStr );
486*cdf0e10cSrcweir 								}
487*cdf0e10cSrcweir 								catch(MissingResourceException&)
488*cdf0e10cSrcweir 								{
489*cdf0e10cSrcweir 								}
490*cdf0e10cSrcweir 							}
491*cdf0e10cSrcweir 							pNewPropStrings[i] = aNewPropStr;
492*cdf0e10cSrcweir 						}
493*cdf0e10cSrcweir 						aPropAny <<= aNewPropStrings;
494*cdf0e10cSrcweir 						xPropertySet->setPropertyValue( aPropName, aPropAny );
495*cdf0e10cSrcweir 					}
496*cdf0e10cSrcweir 					// Remove Id for all locales
497*cdf0e10cSrcweir 					else if( eMode == REMOVE_IDS_FROM_RESOURCE )
498*cdf0e10cSrcweir 					{
499*cdf0e10cSrcweir 						Sequence< ::rtl::OUString > aNewPropStrings;
500*cdf0e10cSrcweir 						aNewPropStrings.realloc( nPropStringCount );
501*cdf0e10cSrcweir 
502*cdf0e10cSrcweir 						const Locale* pLocales = aLocaleSeq.getConstArray();
503*cdf0e10cSrcweir 						sal_Int32 i;
504*cdf0e10cSrcweir 						for ( i = 0; i < nPropStringCount; ++i )
505*cdf0e10cSrcweir 						{
506*cdf0e10cSrcweir 							::rtl::OUString aIdStr = pPropStrings[i];
507*cdf0e10cSrcweir 							if( aIdStr.getLength() > 1 )
508*cdf0e10cSrcweir 							{
509*cdf0e10cSrcweir 								::rtl::OUString aPureIdStr = aIdStr.copy( 1 );
510*cdf0e10cSrcweir 
511*cdf0e10cSrcweir 								for( sal_Int32 iLocale = 0 ; iLocale < nLocaleCount ; iLocale++ )
512*cdf0e10cSrcweir 								{
513*cdf0e10cSrcweir 									const Locale& rLocale = pLocales[iLocale];
514*cdf0e10cSrcweir 									try
515*cdf0e10cSrcweir 									{
516*cdf0e10cSrcweir 										xStringResourceManager->removeIdForLocale( aPureIdStr, rLocale );
517*cdf0e10cSrcweir 									}
518*cdf0e10cSrcweir 									catch(MissingResourceException&)
519*cdf0e10cSrcweir 									{
520*cdf0e10cSrcweir 									}
521*cdf0e10cSrcweir 								}
522*cdf0e10cSrcweir 							}
523*cdf0e10cSrcweir 						}
524*cdf0e10cSrcweir 					}
525*cdf0e10cSrcweir 					// Rename resource id
526*cdf0e10cSrcweir 					else if( eMode == RENAME_CONTROL_IDS )
527*cdf0e10cSrcweir 					{
528*cdf0e10cSrcweir 						Sequence< ::rtl::OUString > aIdStrings;
529*cdf0e10cSrcweir 						aIdStrings.realloc( nPropStringCount );
530*cdf0e10cSrcweir 						::rtl::OUString* pIdStrings = aIdStrings.getArray();
531*cdf0e10cSrcweir 
532*cdf0e10cSrcweir 						::rtl::OUString aIdStrBase = aDot;
533*cdf0e10cSrcweir 						aIdStrBase += aCtrlName;
534*cdf0e10cSrcweir 						aIdStrBase += aDot;
535*cdf0e10cSrcweir 						aIdStrBase += aPropName;
536*cdf0e10cSrcweir 
537*cdf0e10cSrcweir 						const Locale* pLocales = aLocaleSeq.getConstArray();
538*cdf0e10cSrcweir 						sal_Int32 i;
539*cdf0e10cSrcweir 						for ( i = 0; i < nPropStringCount; ++i )
540*cdf0e10cSrcweir 						{
541*cdf0e10cSrcweir 							::rtl::OUString aSourceIdStr = pPropStrings[i];
542*cdf0e10cSrcweir 							::rtl::OUString aPureSourceIdStr = aSourceIdStr.copy( 1 );
543*cdf0e10cSrcweir 
544*cdf0e10cSrcweir 							sal_Int32 nUniqueId = xStringResourceManager->getUniqueNumericId();
545*cdf0e10cSrcweir 							::rtl::OUString aPureIdStr = ::rtl::OUString::valueOf( nUniqueId );
546*cdf0e10cSrcweir 							aPureIdStr += aIdStrBase;
547*cdf0e10cSrcweir 
548*cdf0e10cSrcweir 							// Set Id for all locales
549*cdf0e10cSrcweir 							for( sal_Int32 iLocale = 0 ; iLocale < nLocaleCount ; iLocale++ )
550*cdf0e10cSrcweir 							{
551*cdf0e10cSrcweir 								const Locale& rLocale = pLocales[ iLocale ];
552*cdf0e10cSrcweir 
553*cdf0e10cSrcweir 								::rtl::OUString aResStr;
554*cdf0e10cSrcweir 								try
555*cdf0e10cSrcweir 								{
556*cdf0e10cSrcweir 									aResStr = xStringResourceManager->resolveStringForLocale
557*cdf0e10cSrcweir 										( aPureSourceIdStr, rLocale );
558*cdf0e10cSrcweir 									xStringResourceManager->removeIdForLocale( aPureSourceIdStr, rLocale );
559*cdf0e10cSrcweir 									xStringResourceManager->setStringForLocale( aPureIdStr, aResStr, rLocale );
560*cdf0e10cSrcweir 								}
561*cdf0e10cSrcweir 								catch(MissingResourceException&)
562*cdf0e10cSrcweir 								{}
563*cdf0e10cSrcweir 							}
564*cdf0e10cSrcweir 
565*cdf0e10cSrcweir 							::rtl::OUString aPropIdStr = aEsc;
566*cdf0e10cSrcweir 							aPropIdStr += aPureIdStr;
567*cdf0e10cSrcweir 							pIdStrings[i] = aPropIdStr;
568*cdf0e10cSrcweir 						}
569*cdf0e10cSrcweir 						aPropAny <<= aIdStrings;
570*cdf0e10cSrcweir 						xPropertySet->setPropertyValue( aPropName, aPropAny );
571*cdf0e10cSrcweir 					}
572*cdf0e10cSrcweir 					// Replace string by string from source StringResourceResolver
573*cdf0e10cSrcweir 					else if( eMode == MOVE_RESOURCES && xSourceStringResolver.is() )
574*cdf0e10cSrcweir 					{
575*cdf0e10cSrcweir 						Sequence< ::rtl::OUString > aIdStrings;
576*cdf0e10cSrcweir 						aIdStrings.realloc( nPropStringCount );
577*cdf0e10cSrcweir 						::rtl::OUString* pIdStrings = aIdStrings.getArray();
578*cdf0e10cSrcweir 
579*cdf0e10cSrcweir 						::rtl::OUString aIdStrBase = aDot;
580*cdf0e10cSrcweir 						aIdStrBase += aCtrlName;
581*cdf0e10cSrcweir 						aIdStrBase += aDot;
582*cdf0e10cSrcweir 						aIdStrBase += aPropName;
583*cdf0e10cSrcweir 
584*cdf0e10cSrcweir 						const Locale& rDefaultLocale = xSourceStringResolver->getDefaultLocale();
585*cdf0e10cSrcweir 
586*cdf0e10cSrcweir 						const Locale* pLocales = aLocaleSeq.getConstArray();
587*cdf0e10cSrcweir 						sal_Int32 i;
588*cdf0e10cSrcweir 						for ( i = 0; i < nPropStringCount; ++i )
589*cdf0e10cSrcweir 						{
590*cdf0e10cSrcweir 							::rtl::OUString aSourceIdStr = pPropStrings[i];
591*cdf0e10cSrcweir 							::rtl::OUString aPureSourceIdStr = aSourceIdStr.copy( 1 );
592*cdf0e10cSrcweir 
593*cdf0e10cSrcweir 							sal_Int32 nUniqueId = xStringResourceManager->getUniqueNumericId();
594*cdf0e10cSrcweir 							::rtl::OUString aPureIdStr = ::rtl::OUString::valueOf( nUniqueId );
595*cdf0e10cSrcweir 							aPureIdStr += aIdStrBase;
596*cdf0e10cSrcweir 
597*cdf0e10cSrcweir 							// Set Id for all locales
598*cdf0e10cSrcweir 							for( sal_Int32 iLocale = 0 ; iLocale < nLocaleCount ; iLocale++ )
599*cdf0e10cSrcweir 							{
600*cdf0e10cSrcweir 								const Locale& rLocale = pLocales[ iLocale ];
601*cdf0e10cSrcweir 
602*cdf0e10cSrcweir 								::rtl::OUString aResStr;
603*cdf0e10cSrcweir 								try
604*cdf0e10cSrcweir 								{
605*cdf0e10cSrcweir 									aResStr = xSourceStringResolver->resolveStringForLocale
606*cdf0e10cSrcweir 										( aPureSourceIdStr, rLocale );
607*cdf0e10cSrcweir 								}
608*cdf0e10cSrcweir 								catch(MissingResourceException&)
609*cdf0e10cSrcweir 								{
610*cdf0e10cSrcweir 									aResStr = xSourceStringResolver->resolveStringForLocale
611*cdf0e10cSrcweir 										( aPureSourceIdStr, rDefaultLocale );
612*cdf0e10cSrcweir 								}
613*cdf0e10cSrcweir 								xStringResourceManager->setStringForLocale( aPureIdStr, aResStr, rLocale );
614*cdf0e10cSrcweir 							}
615*cdf0e10cSrcweir 
616*cdf0e10cSrcweir 							::rtl::OUString aPropIdStr = aEsc;
617*cdf0e10cSrcweir 							aPropIdStr += aPureIdStr;
618*cdf0e10cSrcweir 							pIdStrings[i] = aPropIdStr;
619*cdf0e10cSrcweir 						}
620*cdf0e10cSrcweir 						aPropAny <<= aIdStrings;
621*cdf0e10cSrcweir 						xPropertySet->setPropertyValue( aPropName, aPropAny );
622*cdf0e10cSrcweir 					}
623*cdf0e10cSrcweir 					// Copy string from source to target resource
624*cdf0e10cSrcweir 					else if( eMode == COPY_RESOURCES && xSourceStringResolver.is() )
625*cdf0e10cSrcweir 					{
626*cdf0e10cSrcweir 						const Locale& rDefaultLocale = xSourceStringResolver->getDefaultLocale();
627*cdf0e10cSrcweir 
628*cdf0e10cSrcweir 						const Locale* pLocales = aLocaleSeq.getConstArray();
629*cdf0e10cSrcweir 						sal_Int32 i;
630*cdf0e10cSrcweir 						for ( i = 0; i < nPropStringCount; ++i )
631*cdf0e10cSrcweir 						{
632*cdf0e10cSrcweir 							::rtl::OUString aSourceIdStr = pPropStrings[i];
633*cdf0e10cSrcweir 							::rtl::OUString aPureSourceIdStr = aSourceIdStr.copy( 1 );
634*cdf0e10cSrcweir 
635*cdf0e10cSrcweir 							// Set Id for all locales
636*cdf0e10cSrcweir 							for( sal_Int32 iLocale = 0 ; iLocale < nLocaleCount ; iLocale++ )
637*cdf0e10cSrcweir 							{
638*cdf0e10cSrcweir 								const Locale& rLocale = pLocales[ iLocale ];
639*cdf0e10cSrcweir 
640*cdf0e10cSrcweir 								::rtl::OUString aResStr;
641*cdf0e10cSrcweir 								try
642*cdf0e10cSrcweir 								{
643*cdf0e10cSrcweir 									aResStr = xSourceStringResolver->resolveStringForLocale
644*cdf0e10cSrcweir 										( aPureSourceIdStr, rLocale );
645*cdf0e10cSrcweir 								}
646*cdf0e10cSrcweir 								catch(MissingResourceException&)
647*cdf0e10cSrcweir 								{
648*cdf0e10cSrcweir 									aResStr = xSourceStringResolver->resolveStringForLocale
649*cdf0e10cSrcweir 										( aPureSourceIdStr, rDefaultLocale );
650*cdf0e10cSrcweir 								}
651*cdf0e10cSrcweir 								xStringResourceManager->setStringForLocale( aPureSourceIdStr, aResStr, rLocale );
652*cdf0e10cSrcweir 							}
653*cdf0e10cSrcweir 						}
654*cdf0e10cSrcweir 					}
655*cdf0e10cSrcweir 					nChangedCount++;
656*cdf0e10cSrcweir 				}
657*cdf0e10cSrcweir 			}
658*cdf0e10cSrcweir 		}
659*cdf0e10cSrcweir 	}
660*cdf0e10cSrcweir 	return nChangedCount;
661*cdf0e10cSrcweir }
662*cdf0e10cSrcweir 
663*cdf0e10cSrcweir /*
664*cdf0e10cSrcweir void TEST_simulateDialogAddRemoveLocale( bool bAdd )
665*cdf0e10cSrcweir {
666*cdf0e10cSrcweir 	Sequence< Locale > aLocaleSeq( 1 );
667*cdf0e10cSrcweir 	Locale* pLocales = aLocaleSeq.getArray();
668*cdf0e10cSrcweir 
669*cdf0e10cSrcweir 	::com::sun::star::lang::Locale aLocale_en;
670*cdf0e10cSrcweir 	aLocale_en.Language = ::rtl::OUString::createFromAscii( "en" );
671*cdf0e10cSrcweir 	aLocale_en.Country = ::rtl::OUString::createFromAscii( "US" );
672*cdf0e10cSrcweir 
673*cdf0e10cSrcweir 	::com::sun::star::lang::Locale aLocale_de;
674*cdf0e10cSrcweir 	aLocale_de.Language = ::rtl::OUString::createFromAscii( "de" );
675*cdf0e10cSrcweir 	aLocale_de.Country = ::rtl::OUString::createFromAscii( "DE" );
676*cdf0e10cSrcweir 
677*cdf0e10cSrcweir 	::com::sun::star::lang::Locale aLocale_fr;
678*cdf0e10cSrcweir 	aLocale_fr.Language = ::rtl::OUString::createFromAscii( "fr" );
679*cdf0e10cSrcweir 	aLocale_fr.Country = ::rtl::OUString::createFromAscii( "FR" );
680*cdf0e10cSrcweir 
681*cdf0e10cSrcweir 	int n = 0;
682*cdf0e10cSrcweir 	if( n == 0 )
683*cdf0e10cSrcweir 		pLocales[0] = aLocale_en;
684*cdf0e10cSrcweir 	else if( n == 1 )
685*cdf0e10cSrcweir 		pLocales[0] = aLocale_de;
686*cdf0e10cSrcweir 	else if( n == 2 )
687*cdf0e10cSrcweir 		pLocales[0] = aLocale_fr;
688*cdf0e10cSrcweir 
689*cdf0e10cSrcweir 	BasicIDEShell* pIDEShell = IDE_DLL()->GetShell();
690*cdf0e10cSrcweir 	LocalizationMgr* pMgr = pIDEShell->GetCurLocalizationMgr();
691*cdf0e10cSrcweir 	if( bAdd )
692*cdf0e10cSrcweir 		pMgr->handleAddLocales( aLocaleSeq );
693*cdf0e10cSrcweir 	else
694*cdf0e10cSrcweir 		pMgr->handleRemoveLocales( aLocaleSeq );
695*cdf0e10cSrcweir }
696*cdf0e10cSrcweir 
697*cdf0e10cSrcweir void TEST_simulateDialogAddLocale( void )
698*cdf0e10cSrcweir {
699*cdf0e10cSrcweir 	TEST_simulateDialogAddRemoveLocale( true );
700*cdf0e10cSrcweir }
701*cdf0e10cSrcweir 
702*cdf0e10cSrcweir void TEST_simulateDialogRemoveLocale( void )
703*cdf0e10cSrcweir {
704*cdf0e10cSrcweir 	TEST_simulateDialogAddRemoveLocale( false );
705*cdf0e10cSrcweir }
706*cdf0e10cSrcweir */
707*cdf0e10cSrcweir 
708*cdf0e10cSrcweir void LocalizationMgr::handleAddLocales( Sequence< Locale > aLocaleSeq )
709*cdf0e10cSrcweir {
710*cdf0e10cSrcweir 	const Locale* pLocales = aLocaleSeq.getConstArray();
711*cdf0e10cSrcweir 	sal_Int32 nLocaleCount = aLocaleSeq.getLength();
712*cdf0e10cSrcweir 
713*cdf0e10cSrcweir 	if( isLibraryLocalized() )
714*cdf0e10cSrcweir 	{
715*cdf0e10cSrcweir 		for( sal_Int32 i = 0 ; i < nLocaleCount ; i++ )
716*cdf0e10cSrcweir 		{
717*cdf0e10cSrcweir 			const Locale& rLocale = pLocales[ i ];
718*cdf0e10cSrcweir 			m_xStringResourceManager->newLocale( rLocale );
719*cdf0e10cSrcweir 		}
720*cdf0e10cSrcweir 	}
721*cdf0e10cSrcweir 	else
722*cdf0e10cSrcweir 	{
723*cdf0e10cSrcweir 		DBG_ASSERT( nLocaleCount==1, "LocalizationMgr::handleAddLocales(): Only one first locale allowed" );
724*cdf0e10cSrcweir 
725*cdf0e10cSrcweir 		const Locale& rLocale = pLocales[ 0 ];
726*cdf0e10cSrcweir 		m_xStringResourceManager->newLocale( rLocale );
727*cdf0e10cSrcweir 		enableResourceForAllLibraryDialogs();
728*cdf0e10cSrcweir 	}
729*cdf0e10cSrcweir 
730*cdf0e10cSrcweir 	BasicIDE::MarkDocumentModified( m_aDocument );
731*cdf0e10cSrcweir 
732*cdf0e10cSrcweir 	// update locale toolbar
733*cdf0e10cSrcweir     SfxBindings* pBindings = BasicIDE::GetBindingsPtr();
734*cdf0e10cSrcweir     if ( pBindings )
735*cdf0e10cSrcweir 		pBindings->Invalidate( SID_BASICIDE_CURRENT_LANG );
736*cdf0e10cSrcweir 
737*cdf0e10cSrcweir 	handleTranslationbar();
738*cdf0e10cSrcweir }
739*cdf0e10cSrcweir 
740*cdf0e10cSrcweir 
741*cdf0e10cSrcweir void LocalizationMgr::handleRemoveLocales( Sequence< Locale > aLocaleSeq )
742*cdf0e10cSrcweir {
743*cdf0e10cSrcweir 	const Locale* pLocales = aLocaleSeq.getConstArray();
744*cdf0e10cSrcweir 	sal_Int32 nLocaleCount = aLocaleSeq.getLength();
745*cdf0e10cSrcweir 	bool bConsistant = true;
746*cdf0e10cSrcweir 	bool bModified = false;
747*cdf0e10cSrcweir 
748*cdf0e10cSrcweir 	for( sal_Int32 i = 0 ; i < nLocaleCount ; i++ )
749*cdf0e10cSrcweir 	{
750*cdf0e10cSrcweir 		const Locale& rLocale = pLocales[ i ];
751*cdf0e10cSrcweir 		bool bRemove = true;
752*cdf0e10cSrcweir 
753*cdf0e10cSrcweir 		// Check if last locale
754*cdf0e10cSrcweir 		Sequence< Locale > aResLocaleSeq = m_xStringResourceManager->getLocales();
755*cdf0e10cSrcweir 		if( aResLocaleSeq.getLength() == 1 )
756*cdf0e10cSrcweir         {
757*cdf0e10cSrcweir 			const Locale& rLastResLocale = aResLocaleSeq.getConstArray()[ 0 ];
758*cdf0e10cSrcweir 			if( localesAreEqual( rLocale, rLastResLocale ) )
759*cdf0e10cSrcweir 			{
760*cdf0e10cSrcweir 				disableResourceForAllLibraryDialogs();
761*cdf0e10cSrcweir 			}
762*cdf0e10cSrcweir 			else
763*cdf0e10cSrcweir 			{
764*cdf0e10cSrcweir 				// Inconsistancy, keep last locale
765*cdf0e10cSrcweir 				bConsistant = false;
766*cdf0e10cSrcweir 				bRemove = false;
767*cdf0e10cSrcweir 			}
768*cdf0e10cSrcweir         }
769*cdf0e10cSrcweir 
770*cdf0e10cSrcweir 		if( bRemove )
771*cdf0e10cSrcweir         {
772*cdf0e10cSrcweir 			try
773*cdf0e10cSrcweir 			{
774*cdf0e10cSrcweir 				m_xStringResourceManager->removeLocale( rLocale );
775*cdf0e10cSrcweir 				bModified = true;
776*cdf0e10cSrcweir 			}
777*cdf0e10cSrcweir 			catch(IllegalArgumentException&)
778*cdf0e10cSrcweir 			{
779*cdf0e10cSrcweir 				bConsistant = false;
780*cdf0e10cSrcweir 			}
781*cdf0e10cSrcweir         }
782*cdf0e10cSrcweir 	}
783*cdf0e10cSrcweir 	if( bModified )
784*cdf0e10cSrcweir 	{
785*cdf0e10cSrcweir 		BasicIDE::MarkDocumentModified( m_aDocument );
786*cdf0e10cSrcweir 
787*cdf0e10cSrcweir 		// update slots
788*cdf0e10cSrcweir         SfxBindings* pBindings = BasicIDE::GetBindingsPtr();
789*cdf0e10cSrcweir         if ( pBindings )
790*cdf0e10cSrcweir 		{
791*cdf0e10cSrcweir 			pBindings->Invalidate( SID_BASICIDE_CURRENT_LANG );
792*cdf0e10cSrcweir 			pBindings->Invalidate( SID_BASICIDE_MANAGE_LANG );
793*cdf0e10cSrcweir 		}
794*cdf0e10cSrcweir 
795*cdf0e10cSrcweir 		handleTranslationbar();
796*cdf0e10cSrcweir 	}
797*cdf0e10cSrcweir 
798*cdf0e10cSrcweir 	DBG_ASSERT( bConsistant,
799*cdf0e10cSrcweir 		"LocalizationMgr::handleRemoveLocales(): sequence contains unsupported locales" );
800*cdf0e10cSrcweir }
801*cdf0e10cSrcweir 
802*cdf0e10cSrcweir void LocalizationMgr::handleSetDefaultLocale( Locale aLocale )
803*cdf0e10cSrcweir {
804*cdf0e10cSrcweir 	if( m_xStringResourceManager.is() )
805*cdf0e10cSrcweir 	{
806*cdf0e10cSrcweir 		try
807*cdf0e10cSrcweir 		{
808*cdf0e10cSrcweir 			m_xStringResourceManager->setDefaultLocale( aLocale );
809*cdf0e10cSrcweir 		}
810*cdf0e10cSrcweir 		catch(IllegalArgumentException&)
811*cdf0e10cSrcweir 		{
812*cdf0e10cSrcweir 			DBG_ERROR( "LocalizationMgr::handleSetDefaultLocale: Invalid locale" );
813*cdf0e10cSrcweir 		}
814*cdf0e10cSrcweir 
815*cdf0e10cSrcweir 		// update locale toolbar
816*cdf0e10cSrcweir         SfxBindings* pBindings = BasicIDE::GetBindingsPtr();
817*cdf0e10cSrcweir         if ( pBindings )
818*cdf0e10cSrcweir 			pBindings->Invalidate( SID_BASICIDE_CURRENT_LANG );
819*cdf0e10cSrcweir 	}
820*cdf0e10cSrcweir }
821*cdf0e10cSrcweir 
822*cdf0e10cSrcweir void LocalizationMgr::handleSetCurrentLocale( ::com::sun::star::lang::Locale aLocale )
823*cdf0e10cSrcweir {
824*cdf0e10cSrcweir 	if( m_xStringResourceManager.is() )
825*cdf0e10cSrcweir 	{
826*cdf0e10cSrcweir 		try
827*cdf0e10cSrcweir 		{
828*cdf0e10cSrcweir 			m_xStringResourceManager->setCurrentLocale( aLocale, false );
829*cdf0e10cSrcweir 		}
830*cdf0e10cSrcweir 		catch(IllegalArgumentException&)
831*cdf0e10cSrcweir 		{
832*cdf0e10cSrcweir 			DBG_ERROR( "LocalizationMgr::handleSetCurrentLocale: Invalid locale" );
833*cdf0e10cSrcweir 		}
834*cdf0e10cSrcweir 
835*cdf0e10cSrcweir 		// update locale toolbar
836*cdf0e10cSrcweir         SfxBindings* pBindings = BasicIDE::GetBindingsPtr();
837*cdf0e10cSrcweir         if ( pBindings )
838*cdf0e10cSrcweir 			pBindings->Invalidate( SID_BASICIDE_CURRENT_LANG );
839*cdf0e10cSrcweir 
840*cdf0e10cSrcweir 		IDEBaseWindow* pCurWin = m_pIDEShell->GetCurWindow();
841*cdf0e10cSrcweir 		if ( pCurWin && !pCurWin->IsSuspended() && pCurWin->IsA( TYPE( DialogWindow ) ) )
842*cdf0e10cSrcweir 		{
843*cdf0e10cSrcweir 			DialogWindow* pDlgWin = (DialogWindow*)pCurWin;
844*cdf0e10cSrcweir 			DlgEditor* pWinEditor = pDlgWin->GetEditor();
845*cdf0e10cSrcweir 			if( pWinEditor )
846*cdf0e10cSrcweir 				pWinEditor->UpdatePropertyBrowserDelayed();
847*cdf0e10cSrcweir 		}
848*cdf0e10cSrcweir 	}
849*cdf0e10cSrcweir }
850*cdf0e10cSrcweir 
851*cdf0e10cSrcweir void LocalizationMgr::handleBasicStarted( void )
852*cdf0e10cSrcweir {
853*cdf0e10cSrcweir 	if( m_xStringResourceManager.is() )
854*cdf0e10cSrcweir 		m_aLocaleBeforeBasicStart = m_xStringResourceManager->getCurrentLocale();
855*cdf0e10cSrcweir }
856*cdf0e10cSrcweir 
857*cdf0e10cSrcweir void LocalizationMgr::handleBasicStopped( void )
858*cdf0e10cSrcweir {
859*cdf0e10cSrcweir 	try
860*cdf0e10cSrcweir 	{
861*cdf0e10cSrcweir 		if( m_xStringResourceManager.is() )
862*cdf0e10cSrcweir 			m_xStringResourceManager->setCurrentLocale( m_aLocaleBeforeBasicStart, true );
863*cdf0e10cSrcweir 	}
864*cdf0e10cSrcweir 	catch(IllegalArgumentException&)
865*cdf0e10cSrcweir 	{
866*cdf0e10cSrcweir 	}
867*cdf0e10cSrcweir }
868*cdf0e10cSrcweir 
869*cdf0e10cSrcweir 
870*cdf0e10cSrcweir DialogWindow* FindDialogWindowForEditor( DlgEditor* pEditor )
871*cdf0e10cSrcweir {
872*cdf0e10cSrcweir 	BasicIDEShell* pIDEShell = IDE_DLL()->GetShell();
873*cdf0e10cSrcweir 	IDEWindowTable& aIDEWindowTable = pIDEShell->GetIDEWindowTable();
874*cdf0e10cSrcweir 	IDEBaseWindow* pWin = aIDEWindowTable.First();
875*cdf0e10cSrcweir 	DialogWindow* pFoundDlgWin = NULL;
876*cdf0e10cSrcweir 	while( pWin )
877*cdf0e10cSrcweir 	{
878*cdf0e10cSrcweir 		if ( !pWin->IsSuspended() && pWin->IsA( TYPE( DialogWindow ) ) )
879*cdf0e10cSrcweir 		{
880*cdf0e10cSrcweir 			DialogWindow* pDlgWin = (DialogWindow*)pWin;
881*cdf0e10cSrcweir 			DlgEditor* pWinEditor = pDlgWin->GetEditor();
882*cdf0e10cSrcweir 			if( pWinEditor == pEditor )
883*cdf0e10cSrcweir 			{
884*cdf0e10cSrcweir 				pFoundDlgWin = pDlgWin;
885*cdf0e10cSrcweir 				break;
886*cdf0e10cSrcweir 			}
887*cdf0e10cSrcweir 		}
888*cdf0e10cSrcweir 		pWin = aIDEWindowTable.Next();
889*cdf0e10cSrcweir 	}
890*cdf0e10cSrcweir 	return pFoundDlgWin;
891*cdf0e10cSrcweir }
892*cdf0e10cSrcweir 
893*cdf0e10cSrcweir 
894*cdf0e10cSrcweir void LocalizationMgr::setControlResourceIDsForNewEditorObject( DlgEditor* pEditor,
895*cdf0e10cSrcweir 	Any aControlAny, const ::rtl::OUString& aCtrlName )
896*cdf0e10cSrcweir {
897*cdf0e10cSrcweir 	// Get library for DlgEditor
898*cdf0e10cSrcweir 	DialogWindow* pDlgWin = FindDialogWindowForEditor( pEditor );
899*cdf0e10cSrcweir 	if( !pDlgWin )
900*cdf0e10cSrcweir 		return;
901*cdf0e10cSrcweir     ScriptDocument aDocument( pDlgWin->GetDocument() );
902*cdf0e10cSrcweir     DBG_ASSERT( aDocument.isValid(), "LocalizationMgr::setControlResourceIDsForNewEditorObject: invalid document!" );
903*cdf0e10cSrcweir     if ( !aDocument.isValid() )
904*cdf0e10cSrcweir         return;
905*cdf0e10cSrcweir 	const String& rLibName = pDlgWin->GetLibName();
906*cdf0e10cSrcweir 	Reference< container::XNameContainer > xDialogLib( aDocument.getLibrary( E_DIALOGS, rLibName, sal_True ) );
907*cdf0e10cSrcweir 	Reference< XStringResourceManager > xStringResourceManager =
908*cdf0e10cSrcweir 		LocalizationMgr::getStringResourceFromDialogLibrary( xDialogLib );
909*cdf0e10cSrcweir 
910*cdf0e10cSrcweir 	// Set resource property
911*cdf0e10cSrcweir 	if( !xStringResourceManager.is() || xStringResourceManager->getLocales().getLength() == 0 )
912*cdf0e10cSrcweir 		return;
913*cdf0e10cSrcweir 
914*cdf0e10cSrcweir 	::rtl::OUString aDialogName = pDlgWin->GetName();
915*cdf0e10cSrcweir 	Reference< XStringResourceResolver > xDummyStringResolver;
916*cdf0e10cSrcweir 	sal_Int32 nChangedCount = implHandleControlResourceProperties
917*cdf0e10cSrcweir 		( aControlAny, aDialogName, aCtrlName, xStringResourceManager,
918*cdf0e10cSrcweir 		  xDummyStringResolver, SET_IDS );
919*cdf0e10cSrcweir 
920*cdf0e10cSrcweir 	if( nChangedCount )
921*cdf0e10cSrcweir 		BasicIDE::MarkDocumentModified( aDocument );
922*cdf0e10cSrcweir }
923*cdf0e10cSrcweir 
924*cdf0e10cSrcweir void LocalizationMgr::renameControlResourceIDsForEditorObject( DlgEditor* pEditor,
925*cdf0e10cSrcweir 	::com::sun::star::uno::Any aControlAny, const ::rtl::OUString& aNewCtrlName )
926*cdf0e10cSrcweir {
927*cdf0e10cSrcweir 	// Get library for DlgEditor
928*cdf0e10cSrcweir 	DialogWindow* pDlgWin = FindDialogWindowForEditor( pEditor );
929*cdf0e10cSrcweir 	if( !pDlgWin )
930*cdf0e10cSrcweir 		return;
931*cdf0e10cSrcweir     ScriptDocument aDocument( pDlgWin->GetDocument() );
932*cdf0e10cSrcweir     DBG_ASSERT( aDocument.isValid(), "LocalizationMgr::renameControlResourceIDsForEditorObject: invalid document!" );
933*cdf0e10cSrcweir     if ( !aDocument.isValid() )
934*cdf0e10cSrcweir         return;
935*cdf0e10cSrcweir 	const String& rLibName = pDlgWin->GetLibName();
936*cdf0e10cSrcweir 	Reference< container::XNameContainer > xDialogLib( aDocument.getLibrary( E_DIALOGS, rLibName, sal_True ) );
937*cdf0e10cSrcweir 	Reference< XStringResourceManager > xStringResourceManager =
938*cdf0e10cSrcweir 		LocalizationMgr::getStringResourceFromDialogLibrary( xDialogLib );
939*cdf0e10cSrcweir 
940*cdf0e10cSrcweir 	// Set resource property
941*cdf0e10cSrcweir 	if( !xStringResourceManager.is() || xStringResourceManager->getLocales().getLength() == 0 )
942*cdf0e10cSrcweir 		return;
943*cdf0e10cSrcweir 
944*cdf0e10cSrcweir 	::rtl::OUString aDialogName = pDlgWin->GetName();
945*cdf0e10cSrcweir 	Reference< XStringResourceResolver > xDummyStringResolver;
946*cdf0e10cSrcweir 	implHandleControlResourceProperties
947*cdf0e10cSrcweir 		( aControlAny, aDialogName, aNewCtrlName, xStringResourceManager,
948*cdf0e10cSrcweir 		  xDummyStringResolver, RENAME_CONTROL_IDS );
949*cdf0e10cSrcweir }
950*cdf0e10cSrcweir 
951*cdf0e10cSrcweir 
952*cdf0e10cSrcweir void LocalizationMgr::deleteControlResourceIDsForDeletedEditorObject( DlgEditor* pEditor,
953*cdf0e10cSrcweir 	Any aControlAny, const ::rtl::OUString& aCtrlName )
954*cdf0e10cSrcweir {
955*cdf0e10cSrcweir 	// Get library for DlgEditor
956*cdf0e10cSrcweir 	DialogWindow* pDlgWin = FindDialogWindowForEditor( pEditor );
957*cdf0e10cSrcweir 	if( !pDlgWin )
958*cdf0e10cSrcweir 		return;
959*cdf0e10cSrcweir     ScriptDocument aDocument( pDlgWin->GetDocument() );
960*cdf0e10cSrcweir     DBG_ASSERT( aDocument.isValid(), "LocalizationMgr::deleteControlResourceIDsForDeletedEditorObject: invalid document!" );
961*cdf0e10cSrcweir     if ( !aDocument.isValid() )
962*cdf0e10cSrcweir         return;
963*cdf0e10cSrcweir 	const String& rLibName = pDlgWin->GetLibName();
964*cdf0e10cSrcweir 	Reference< container::XNameContainer > xDialogLib( aDocument.getLibrary( E_DIALOGS, rLibName, sal_True ) );
965*cdf0e10cSrcweir 	Reference< XStringResourceManager > xStringResourceManager =
966*cdf0e10cSrcweir 		LocalizationMgr::getStringResourceFromDialogLibrary( xDialogLib );
967*cdf0e10cSrcweir 
968*cdf0e10cSrcweir 	::rtl::OUString aDialogName = pDlgWin->GetName();
969*cdf0e10cSrcweir 	Reference< XStringResourceResolver > xDummyStringResolver;
970*cdf0e10cSrcweir 	sal_Int32 nChangedCount = implHandleControlResourceProperties
971*cdf0e10cSrcweir 		( aControlAny, aDialogName, aCtrlName, xStringResourceManager,
972*cdf0e10cSrcweir 		  xDummyStringResolver, REMOVE_IDS_FROM_RESOURCE );
973*cdf0e10cSrcweir 
974*cdf0e10cSrcweir 	if( nChangedCount )
975*cdf0e10cSrcweir 		BasicIDE::MarkDocumentModified( aDocument );
976*cdf0e10cSrcweir }
977*cdf0e10cSrcweir 
978*cdf0e10cSrcweir void LocalizationMgr::setStringResourceAtDialog( const ScriptDocument& rDocument, const String& aLibName,
979*cdf0e10cSrcweir 	const String& aDlgName, Reference< container::XNameContainer > xDialogModel )
980*cdf0e10cSrcweir {
981*cdf0e10cSrcweir 	static ::rtl::OUString aResourceResolverPropName = ::rtl::OUString::createFromAscii( "ResourceResolver" );
982*cdf0e10cSrcweir 
983*cdf0e10cSrcweir 	// Get library
984*cdf0e10cSrcweir 	Reference< container::XNameContainer > xDialogLib( rDocument.getLibrary( E_DIALOGS, aLibName, sal_True ) );
985*cdf0e10cSrcweir 	Reference< XStringResourceManager > xStringResourceManager =
986*cdf0e10cSrcweir 		LocalizationMgr::getStringResourceFromDialogLibrary( xDialogLib );
987*cdf0e10cSrcweir 
988*cdf0e10cSrcweir 	// Set resource property
989*cdf0e10cSrcweir 	if( xStringResourceManager.is() )
990*cdf0e10cSrcweir 	{
991*cdf0e10cSrcweir 		// Not very elegant as dialog may or may not be localized yet
992*cdf0e10cSrcweir 		// TODO: Find better place, where dialog is created
993*cdf0e10cSrcweir 		if( xStringResourceManager->getLocales().getLength() > 0 )
994*cdf0e10cSrcweir 		{
995*cdf0e10cSrcweir 			Any aDialogCtrl;
996*cdf0e10cSrcweir 			aDialogCtrl <<= xDialogModel;
997*cdf0e10cSrcweir 			Reference< XStringResourceResolver > xDummyStringResolver;
998*cdf0e10cSrcweir 			implHandleControlResourceProperties( aDialogCtrl, aDlgName,
999*cdf0e10cSrcweir 				::rtl::OUString(), xStringResourceManager,
1000*cdf0e10cSrcweir 				xDummyStringResolver, SET_IDS );
1001*cdf0e10cSrcweir 		}
1002*cdf0e10cSrcweir 
1003*cdf0e10cSrcweir 		Reference< beans::XPropertySet > xDlgPSet( xDialogModel, UNO_QUERY );
1004*cdf0e10cSrcweir 		Any aStringResourceManagerAny;
1005*cdf0e10cSrcweir 		aStringResourceManagerAny <<= xStringResourceManager;
1006*cdf0e10cSrcweir 		xDlgPSet->setPropertyValue( aResourceResolverPropName, aStringResourceManagerAny );
1007*cdf0e10cSrcweir 	}
1008*cdf0e10cSrcweir }
1009*cdf0e10cSrcweir 
1010*cdf0e10cSrcweir void LocalizationMgr::renameStringResourceIDs( const ScriptDocument& rDocument, const String& aLibName,
1011*cdf0e10cSrcweir 	const String& aDlgName, Reference< container::XNameContainer > xDialogModel )
1012*cdf0e10cSrcweir {
1013*cdf0e10cSrcweir 	// Get library
1014*cdf0e10cSrcweir 	Reference< container::XNameContainer > xDialogLib( rDocument.getLibrary( E_DIALOGS, aLibName, sal_True ) );
1015*cdf0e10cSrcweir 	Reference< XStringResourceManager > xStringResourceManager =
1016*cdf0e10cSrcweir 		LocalizationMgr::getStringResourceFromDialogLibrary( xDialogLib );
1017*cdf0e10cSrcweir 	if( !xStringResourceManager.is() )
1018*cdf0e10cSrcweir 		return;
1019*cdf0e10cSrcweir 
1020*cdf0e10cSrcweir 	Any aDialogCtrl;
1021*cdf0e10cSrcweir 	aDialogCtrl <<= xDialogModel;
1022*cdf0e10cSrcweir 	Reference< XStringResourceResolver > xDummyStringResolver;
1023*cdf0e10cSrcweir 	implHandleControlResourceProperties( aDialogCtrl, aDlgName,
1024*cdf0e10cSrcweir 		::rtl::OUString(), xStringResourceManager,
1025*cdf0e10cSrcweir 		xDummyStringResolver, RENAME_DIALOG_IDS );
1026*cdf0e10cSrcweir 
1027*cdf0e10cSrcweir 	// Handle all controls
1028*cdf0e10cSrcweir 	Sequence< ::rtl::OUString > aNames = xDialogModel->getElementNames();
1029*cdf0e10cSrcweir 	const ::rtl::OUString* pNames = aNames.getConstArray();
1030*cdf0e10cSrcweir 	sal_Int32 nCtrls = aNames.getLength();
1031*cdf0e10cSrcweir 	for( sal_Int32 i = 0 ; i < nCtrls ; ++i )
1032*cdf0e10cSrcweir 	{
1033*cdf0e10cSrcweir 		::rtl::OUString aCtrlName( pNames[i] );
1034*cdf0e10cSrcweir 		Any aCtrl = xDialogModel->getByName( aCtrlName );
1035*cdf0e10cSrcweir 		implHandleControlResourceProperties( aCtrl, aDlgName,
1036*cdf0e10cSrcweir 			aCtrlName, xStringResourceManager,
1037*cdf0e10cSrcweir 			xDummyStringResolver, RENAME_DIALOG_IDS );
1038*cdf0e10cSrcweir 	}
1039*cdf0e10cSrcweir }
1040*cdf0e10cSrcweir 
1041*cdf0e10cSrcweir void LocalizationMgr::removeResourceForDialog( const ScriptDocument& rDocument, const String& aLibName,
1042*cdf0e10cSrcweir 	const String& aDlgName, Reference< container::XNameContainer > xDialogModel )
1043*cdf0e10cSrcweir {
1044*cdf0e10cSrcweir 	// Get library
1045*cdf0e10cSrcweir 	Reference< container::XNameContainer > xDialogLib( rDocument.getLibrary( E_DIALOGS, aLibName, sal_True ) );
1046*cdf0e10cSrcweir 	Reference< XStringResourceManager > xStringResourceManager =
1047*cdf0e10cSrcweir 		LocalizationMgr::getStringResourceFromDialogLibrary( xDialogLib );
1048*cdf0e10cSrcweir 	if( !xStringResourceManager.is() )
1049*cdf0e10cSrcweir 		return;
1050*cdf0e10cSrcweir 
1051*cdf0e10cSrcweir 	Any aDialogCtrl;
1052*cdf0e10cSrcweir 	aDialogCtrl <<= xDialogModel;
1053*cdf0e10cSrcweir 	Reference< XStringResourceResolver > xDummyStringResolver;
1054*cdf0e10cSrcweir 	implHandleControlResourceProperties( aDialogCtrl, aDlgName,
1055*cdf0e10cSrcweir 		::rtl::OUString(), xStringResourceManager,
1056*cdf0e10cSrcweir 		xDummyStringResolver, REMOVE_IDS_FROM_RESOURCE );
1057*cdf0e10cSrcweir 
1058*cdf0e10cSrcweir 	// Handle all controls
1059*cdf0e10cSrcweir 	Sequence< ::rtl::OUString > aNames = xDialogModel->getElementNames();
1060*cdf0e10cSrcweir 	const ::rtl::OUString* pNames = aNames.getConstArray();
1061*cdf0e10cSrcweir 	sal_Int32 nCtrls = aNames.getLength();
1062*cdf0e10cSrcweir 	for( sal_Int32 i = 0 ; i < nCtrls ; ++i )
1063*cdf0e10cSrcweir 	{
1064*cdf0e10cSrcweir 		::rtl::OUString aCtrlName( pNames[i] );
1065*cdf0e10cSrcweir 		Any aCtrl = xDialogModel->getByName( aCtrlName );
1066*cdf0e10cSrcweir 		implHandleControlResourceProperties( aCtrl, aDlgName,
1067*cdf0e10cSrcweir 			aCtrlName, xStringResourceManager,
1068*cdf0e10cSrcweir 			xDummyStringResolver, REMOVE_IDS_FROM_RESOURCE );
1069*cdf0e10cSrcweir 	}
1070*cdf0e10cSrcweir }
1071*cdf0e10cSrcweir 
1072*cdf0e10cSrcweir void LocalizationMgr::resetResourceForDialog( Reference< container::XNameContainer > xDialogModel,
1073*cdf0e10cSrcweir 	Reference< XStringResourceManager > xStringResourceManager )
1074*cdf0e10cSrcweir {
1075*cdf0e10cSrcweir 	if( !xStringResourceManager.is() )
1076*cdf0e10cSrcweir 		return;
1077*cdf0e10cSrcweir 
1078*cdf0e10cSrcweir 	// Dialog as control
1079*cdf0e10cSrcweir 	::rtl::OUString aDummyName;
1080*cdf0e10cSrcweir 	Any aDialogCtrl;
1081*cdf0e10cSrcweir 	aDialogCtrl <<= xDialogModel;
1082*cdf0e10cSrcweir 	Reference< XStringResourceResolver > xDummyStringResolver;
1083*cdf0e10cSrcweir 	implHandleControlResourceProperties( aDialogCtrl, aDummyName,
1084*cdf0e10cSrcweir 		aDummyName, xStringResourceManager, xDummyStringResolver, RESET_IDS );
1085*cdf0e10cSrcweir 
1086*cdf0e10cSrcweir 	// Handle all controls
1087*cdf0e10cSrcweir 	Sequence< ::rtl::OUString > aNames = xDialogModel->getElementNames();
1088*cdf0e10cSrcweir 	const ::rtl::OUString* pNames = aNames.getConstArray();
1089*cdf0e10cSrcweir 	sal_Int32 nCtrls = aNames.getLength();
1090*cdf0e10cSrcweir 	for( sal_Int32 i = 0 ; i < nCtrls ; ++i )
1091*cdf0e10cSrcweir 	{
1092*cdf0e10cSrcweir 		::rtl::OUString aCtrlName( pNames[i] );
1093*cdf0e10cSrcweir 		Any aCtrl = xDialogModel->getByName( aCtrlName );
1094*cdf0e10cSrcweir 		implHandleControlResourceProperties( aCtrl, aDummyName,
1095*cdf0e10cSrcweir 			aCtrlName, xStringResourceManager, xDummyStringResolver, RESET_IDS );
1096*cdf0e10cSrcweir 	}
1097*cdf0e10cSrcweir }
1098*cdf0e10cSrcweir 
1099*cdf0e10cSrcweir void LocalizationMgr::setResourceIDsForDialog( Reference< container::XNameContainer > xDialogModel,
1100*cdf0e10cSrcweir 	Reference< XStringResourceManager > xStringResourceManager )
1101*cdf0e10cSrcweir {
1102*cdf0e10cSrcweir 	if( !xStringResourceManager.is() )
1103*cdf0e10cSrcweir 		return;
1104*cdf0e10cSrcweir 
1105*cdf0e10cSrcweir 	// Dialog as control
1106*cdf0e10cSrcweir 	::rtl::OUString aDummyName;
1107*cdf0e10cSrcweir 	Any aDialogCtrl;
1108*cdf0e10cSrcweir 	aDialogCtrl <<= xDialogModel;
1109*cdf0e10cSrcweir 	Reference< XStringResourceResolver > xDummyStringResolver;
1110*cdf0e10cSrcweir 	implHandleControlResourceProperties( aDialogCtrl, aDummyName,
1111*cdf0e10cSrcweir 		aDummyName, xStringResourceManager, xDummyStringResolver, SET_IDS );
1112*cdf0e10cSrcweir 
1113*cdf0e10cSrcweir 	// Handle all controls
1114*cdf0e10cSrcweir 	Sequence< ::rtl::OUString > aNames = xDialogModel->getElementNames();
1115*cdf0e10cSrcweir 	const ::rtl::OUString* pNames = aNames.getConstArray();
1116*cdf0e10cSrcweir 	sal_Int32 nCtrls = aNames.getLength();
1117*cdf0e10cSrcweir 	for( sal_Int32 i = 0 ; i < nCtrls ; ++i )
1118*cdf0e10cSrcweir 	{
1119*cdf0e10cSrcweir 		::rtl::OUString aCtrlName( pNames[i] );
1120*cdf0e10cSrcweir 		Any aCtrl = xDialogModel->getByName( aCtrlName );
1121*cdf0e10cSrcweir 		implHandleControlResourceProperties( aCtrl, aDummyName,
1122*cdf0e10cSrcweir 			aCtrlName, xStringResourceManager, xDummyStringResolver, SET_IDS );
1123*cdf0e10cSrcweir 	}
1124*cdf0e10cSrcweir }
1125*cdf0e10cSrcweir 
1126*cdf0e10cSrcweir void LocalizationMgr::copyResourcesForPastedEditorObject( DlgEditor* pEditor,
1127*cdf0e10cSrcweir 	Any aControlAny, const ::rtl::OUString& aCtrlName,
1128*cdf0e10cSrcweir 	Reference< XStringResourceResolver > xSourceStringResolver )
1129*cdf0e10cSrcweir {
1130*cdf0e10cSrcweir 	// Get library for DlgEditor
1131*cdf0e10cSrcweir 	DialogWindow* pDlgWin = FindDialogWindowForEditor( pEditor );
1132*cdf0e10cSrcweir 	if( !pDlgWin )
1133*cdf0e10cSrcweir 		return;
1134*cdf0e10cSrcweir     ScriptDocument aDocument( pDlgWin->GetDocument() );
1135*cdf0e10cSrcweir     DBG_ASSERT( aDocument.isValid(), "LocalizationMgr::copyResourcesForPastedEditorObject: invalid document!" );
1136*cdf0e10cSrcweir     if ( !aDocument.isValid() )
1137*cdf0e10cSrcweir         return;
1138*cdf0e10cSrcweir 	const String& rLibName = pDlgWin->GetLibName();
1139*cdf0e10cSrcweir 	Reference< container::XNameContainer > xDialogLib( aDocument.getLibrary( E_DIALOGS, rLibName, sal_True ) );
1140*cdf0e10cSrcweir 	Reference< XStringResourceManager > xStringResourceManager =
1141*cdf0e10cSrcweir 		LocalizationMgr::getStringResourceFromDialogLibrary( xDialogLib );
1142*cdf0e10cSrcweir 
1143*cdf0e10cSrcweir 	// Set resource property
1144*cdf0e10cSrcweir 	if( !xStringResourceManager.is() || xStringResourceManager->getLocales().getLength() == 0 )
1145*cdf0e10cSrcweir 		return;
1146*cdf0e10cSrcweir 
1147*cdf0e10cSrcweir 	::rtl::OUString aDialogName = pDlgWin->GetName();
1148*cdf0e10cSrcweir 	implHandleControlResourceProperties
1149*cdf0e10cSrcweir 		( aControlAny, aDialogName, aCtrlName, xStringResourceManager,
1150*cdf0e10cSrcweir 		  xSourceStringResolver, MOVE_RESOURCES );
1151*cdf0e10cSrcweir }
1152*cdf0e10cSrcweir 
1153*cdf0e10cSrcweir void LocalizationMgr::copyResourceForDroppedDialog( Reference< container::XNameContainer > xDialogModel,
1154*cdf0e10cSrcweir 	const ::rtl::OUString& aDialogName, Reference< XStringResourceManager > xStringResourceManager,
1155*cdf0e10cSrcweir 	Reference< XStringResourceResolver > xSourceStringResolver )
1156*cdf0e10cSrcweir {
1157*cdf0e10cSrcweir 	if( !xStringResourceManager.is() )
1158*cdf0e10cSrcweir 		return;
1159*cdf0e10cSrcweir 
1160*cdf0e10cSrcweir 	// Dialog as control
1161*cdf0e10cSrcweir 	::rtl::OUString aDummyName;
1162*cdf0e10cSrcweir 	Any aDialogCtrl;
1163*cdf0e10cSrcweir 	aDialogCtrl <<= xDialogModel;
1164*cdf0e10cSrcweir 	implHandleControlResourceProperties( aDialogCtrl, aDialogName,
1165*cdf0e10cSrcweir 		aDummyName, xStringResourceManager, xSourceStringResolver, MOVE_RESOURCES );
1166*cdf0e10cSrcweir 
1167*cdf0e10cSrcweir 	// Handle all controls
1168*cdf0e10cSrcweir 	Sequence< ::rtl::OUString > aNames = xDialogModel->getElementNames();
1169*cdf0e10cSrcweir 	const ::rtl::OUString* pNames = aNames.getConstArray();
1170*cdf0e10cSrcweir 	sal_Int32 nCtrls = aNames.getLength();
1171*cdf0e10cSrcweir 	for( sal_Int32 i = 0 ; i < nCtrls ; ++i )
1172*cdf0e10cSrcweir 	{
1173*cdf0e10cSrcweir 		::rtl::OUString aCtrlName( pNames[i] );
1174*cdf0e10cSrcweir 		Any aCtrl = xDialogModel->getByName( aCtrlName );
1175*cdf0e10cSrcweir 		implHandleControlResourceProperties( aCtrl, aDialogName,
1176*cdf0e10cSrcweir 			aCtrlName, xStringResourceManager, xSourceStringResolver, MOVE_RESOURCES );
1177*cdf0e10cSrcweir 	}
1178*cdf0e10cSrcweir }
1179*cdf0e10cSrcweir 
1180*cdf0e10cSrcweir void LocalizationMgr::copyResourceForDialog(
1181*cdf0e10cSrcweir 	const Reference< container::XNameContainer >& xDialogModel,
1182*cdf0e10cSrcweir 	const Reference< XStringResourceResolver >& xSourceStringResolver,
1183*cdf0e10cSrcweir 	const Reference< XStringResourceManager >& xTargetStringResourceManager )
1184*cdf0e10cSrcweir {
1185*cdf0e10cSrcweir 	if( !xDialogModel.is() || !xSourceStringResolver.is() || !xTargetStringResourceManager.is() )
1186*cdf0e10cSrcweir 		return;
1187*cdf0e10cSrcweir 
1188*cdf0e10cSrcweir 	::rtl::OUString aDummyName;
1189*cdf0e10cSrcweir 	Any aDialogCtrl;
1190*cdf0e10cSrcweir 	aDialogCtrl <<= xDialogModel;
1191*cdf0e10cSrcweir 	implHandleControlResourceProperties
1192*cdf0e10cSrcweir 		( aDialogCtrl, aDummyName, aDummyName, xTargetStringResourceManager,
1193*cdf0e10cSrcweir 		  xSourceStringResolver, COPY_RESOURCES );
1194*cdf0e10cSrcweir 
1195*cdf0e10cSrcweir 	// Handle all controls
1196*cdf0e10cSrcweir 	Sequence< ::rtl::OUString > aNames = xDialogModel->getElementNames();
1197*cdf0e10cSrcweir 	const ::rtl::OUString* pNames = aNames.getConstArray();
1198*cdf0e10cSrcweir 	sal_Int32 nCtrls = aNames.getLength();
1199*cdf0e10cSrcweir 	for( sal_Int32 i = 0 ; i < nCtrls ; ++i )
1200*cdf0e10cSrcweir 	{
1201*cdf0e10cSrcweir 		::rtl::OUString aCtrlName( pNames[i] );
1202*cdf0e10cSrcweir 		Any aCtrl = xDialogModel->getByName( aCtrlName );
1203*cdf0e10cSrcweir 		implHandleControlResourceProperties( aCtrl, aDummyName, aDummyName,
1204*cdf0e10cSrcweir 			xTargetStringResourceManager, xSourceStringResolver, COPY_RESOURCES );
1205*cdf0e10cSrcweir 	}
1206*cdf0e10cSrcweir }
1207*cdf0e10cSrcweir 
1208*cdf0e10cSrcweir Reference< XStringResourceManager > LocalizationMgr::getStringResourceFromDialogLibrary
1209*cdf0e10cSrcweir 	( Reference< container::XNameContainer > xDialogLib )
1210*cdf0e10cSrcweir {
1211*cdf0e10cSrcweir 	Reference< XStringResourceManager > xStringResourceManager;
1212*cdf0e10cSrcweir 	if( xDialogLib.is() )
1213*cdf0e10cSrcweir 	{
1214*cdf0e10cSrcweir 		Reference< resource::XStringResourceSupplier > xStringResourceSupplier( xDialogLib, UNO_QUERY );
1215*cdf0e10cSrcweir 		if( xStringResourceSupplier.is() )
1216*cdf0e10cSrcweir 		{
1217*cdf0e10cSrcweir 			Reference< resource::XStringResourceResolver >
1218*cdf0e10cSrcweir 				xStringResourceResolver = xStringResourceSupplier->getStringResource();
1219*cdf0e10cSrcweir 
1220*cdf0e10cSrcweir 			xStringResourceManager =
1221*cdf0e10cSrcweir 				Reference< resource::XStringResourceManager >( xStringResourceResolver, UNO_QUERY );
1222*cdf0e10cSrcweir 		}
1223*cdf0e10cSrcweir 	}
1224*cdf0e10cSrcweir 	return xStringResourceManager;
1225*cdf0e10cSrcweir }
1226*cdf0e10cSrcweir 
1227