From d298d8fa1794ce97c4505d15cc7e06dc5d25f144 Mon Sep 17 00:00:00 2001 From: RĂ¼diger Timm Date: Wed, 18 Feb 2009 15:07:12 +0000 Subject: #i10000# Fix even more line ends --- basic/source/classes/sb.cxx | 4 +- basic/source/comp/dim.cxx | 4 +- basic/source/comp/scanner.cxx | 2 +- basic/source/runtime/methods.cxx | 4 +- basic/source/sbx/sbxexec.cxx | 4 +- connectivity/source/commontools/FValue.cxx | 28 +- .../source/commontools/ParamterSubstitution.cxx | 232 +- desktop/os2/source/applauncher/launcher.cxx | 236 +- framework/inc/classes/fwktabwindow.hxx | 2 +- framework/inc/dispatch/startmoduledispatcher.hxx | 24 +- framework/inc/services/tabwindowservice.hxx | 86 +- .../accelerators/acceleratorconfiguration.cxx | 3328 ++++++++++---------- framework/source/dispatch/dispatchprovider.cxx | 42 +- .../source/dispatch/startmoduledispatcher.cxx | 100 +- framework/source/services/tabwindowservice.cxx | 10 +- .../uifactory/windowcontentfactorymanager.cxx | 1100 +++---- ucb/source/ucp/file/shell.cxx | 10 +- xmlhelp/source/com/sun/star/help/HelpLinker.cxx | 34 +- xmlhelp/source/cxxhelp/inc/qe/DocGenerator.hxx | 214 +- xmlhelp/source/cxxhelp/inc/qe/Query.hxx | 356 +-- .../source/cxxhelp/provider/resultsetforquery.cxx | 74 +- xmlhelp/source/cxxhelp/provider/urlparameter.cxx | 2 +- xmlhelp/source/cxxhelp/qe/DocGenerator.cxx | 128 +- xmlhelp/source/cxxhelp/util/Decompressor.cxx | 2 +- 24 files changed, 3013 insertions(+), 3013 deletions(-) diff --git a/basic/source/classes/sb.cxx b/basic/source/classes/sb.cxx index 1c0f70dbb4..2346f5262c 100644 --- a/basic/source/classes/sb.cxx +++ b/basic/source/classes/sb.cxx @@ -425,8 +425,8 @@ SbClassModuleObject::SbClassModuleObject( SbModule* pClassModule ) SbProcedureProperty* pNewProp = new SbProcedureProperty ( pProcedureProp->GetName(), pProcedureProp->GetType() ); // ( pProcedureProp->GetName(), pProcedureProp->GetType(), this ); - pNewProp->SetFlags( nFlags_ ); // Copy flags - pNewProp->ResetFlag( SBX_NO_BROADCAST ); // except the Broadcast if it was set + pNewProp->SetFlags( nFlags_ ); // Copy flags + pNewProp->ResetFlag( SBX_NO_BROADCAST ); // except the Broadcast if it was set pProcedureProp->SetFlags( nFlags_ ); pProps->PutDirect( pNewProp, i ); StartListening( pNewProp->GetBroadcaster(), TRUE ); diff --git a/basic/source/comp/dim.cxx b/basic/source/comp/dim.cxx index b6c95c5748..f3057763a1 100644 --- a/basic/source/comp/dim.cxx +++ b/basic/source/comp/dim.cxx @@ -742,7 +742,7 @@ void SbiParser::DefEnum( BOOL bPrivate ) SbiProcDef* SbiParser::ProcDecl( BOOL bDecl ) { BOOL bFunc = BOOL( eCurTok == FUNCTION ); - BOOL bProp = BOOL( eCurTok == GET || eCurTok == SET || eCurTok == LET ); + BOOL bProp = BOOL( eCurTok == GET || eCurTok == SET || eCurTok == LET ); if( !TestSymbol() ) return NULL; String aName( aSym ); SbxDataType eType = eScanType; @@ -863,7 +863,7 @@ SbiProcDef* SbiParser::ProcDecl( BOOL bDecl ) // if( pDef->GetType() == SbxOBJECT ) // pDef->SetType( SbxVARIANT ), // Error( SbERR_SYNTAX ); - if( pDef->GetType() == SbxVARIANT && !( bFunc || bProp ) ) + if( pDef->GetType() == SbxVARIANT && !( bFunc || bProp ) ) pDef->SetType( SbxEMPTY ); return pDef; } diff --git a/basic/source/comp/scanner.cxx b/basic/source/comp/scanner.cxx index ee487baaa9..7a6df2c749 100644 --- a/basic/source/comp/scanner.cxx +++ b/basic/source/comp/scanner.cxx @@ -196,7 +196,7 @@ BOOL SbiScanner::NextSym() } // Leerstellen weg: - while( *pLine && (( *pLine == ' ' ) || ( *pLine == '\t' ) || ( *pLine == '\f' )) ) + while( *pLine && (( *pLine == ' ' ) || ( *pLine == '\t' ) || ( *pLine == '\f' )) ) pLine++, nCol++, bSpaces = TRUE; nCol1 = nCol; diff --git a/basic/source/runtime/methods.cxx b/basic/source/runtime/methods.cxx index 5c1bae13ab..20dae1980b 100644 --- a/basic/source/runtime/methods.cxx +++ b/basic/source/runtime/methods.cxx @@ -1786,9 +1786,9 @@ INT16 implGetDateYear( double aDate ) BOOL implDateSerial( INT16 nYear, INT16 nMonth, INT16 nDay, double& rdRet ) { - if ( nYear < 30 && SbiRuntime::isVBAEnabled() ) + if ( nYear < 30 && SbiRuntime::isVBAEnabled() ) nYear += 2000; - else if ( nYear < 100 ) + else if ( nYear < 100 ) nYear += 1900; Date aCurDate( nDay, nMonth, nYear ); if ((nYear < 100 || nYear > 9999) ) diff --git a/basic/source/sbx/sbxexec.cxx b/basic/source/sbx/sbxexec.cxx index 234befbff0..7c5df2a521 100644 --- a/basic/source/sbx/sbxexec.cxx +++ b/basic/source/sbx/sbxexec.cxx @@ -94,7 +94,7 @@ static const xub_Unicode* Symbol( const xub_Unicode* p, XubString& rSym, const S { rSym = p; // Dann darf es Buchstaben, Zahlen oder Underlines enthalten - while( *p && (rCharClass.isAlphaNumeric( *p ) || *p == '_') ) + while( *p && (rCharClass.isAlphaNumeric( *p ) || *p == '_') ) p++, nLen++; // BASIC-Standard-Suffixe werden ignoriert if( *p && (*p == '%' || *p == '&' || *p == '!' || *p == '#' || *p == '$' ) ) @@ -118,7 +118,7 @@ static SbxVariable* QualifiedName { // Element einlesen refVar = Element( pObj, pGbl, &p, t, aCharClass ); - while( refVar.Is() && (*p == '.' || *p == '!') ) + while( refVar.Is() && (*p == '.' || *p == '!') ) { // Es folgt noch ein Objektelement. Das aktuelle Element // muss also ein SBX-Objekt sein oder liefern! diff --git a/connectivity/source/commontools/FValue.cxx b/connectivity/source/commontools/FValue.cxx index 0142f02404..c628840d80 100644 --- a/connectivity/source/commontools/FValue.cxx +++ b/connectivity/source/commontools/FValue.cxx @@ -1939,20 +1939,20 @@ void ORowSetValue::fill(const Any& _rValue) setSigned(sal_False); break; } - case TypeClass_HYPER: - { - sal_Int64 nValue(0); - _rValue >>= nValue; - (*this) = nValue; - break; - } - case TypeClass_UNSIGNED_HYPER: - { - sal_uInt64 nValue(0); - _rValue >>= nValue; - (*this) = static_cast(nValue); - setSigned(sal_False); - break; + case TypeClass_HYPER: + { + sal_Int64 nValue(0); + _rValue >>= nValue; + (*this) = nValue; + break; + } + case TypeClass_UNSIGNED_HYPER: + { + sal_uInt64 nValue(0); + _rValue >>= nValue; + (*this) = static_cast(nValue); + setSigned(sal_False); + break; } case TypeClass_UNSIGNED_LONG: { diff --git a/connectivity/source/commontools/ParamterSubstitution.cxx b/connectivity/source/commontools/ParamterSubstitution.cxx index 7dc64e0a27..0628e4a392 100644 --- a/connectivity/source/commontools/ParamterSubstitution.cxx +++ b/connectivity/source/commontools/ParamterSubstitution.cxx @@ -1,61 +1,61 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: FDatabaseMetaDataResultSet.cxx,v $ - * $Revision: 1.24 $ - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * - * for a copy of the LGPLv3 License. - * - ************************************************************************/ -#include "precompiled_connectivity.hxx" -#include "ParameterSubstitution.hxx" -#include "connectivity/sqlparse.hxx" -#include - -namespace connectivity -{ - using namespace ::com::sun::star::uno; - using namespace ::com::sun::star::sdbc; - using namespace ::com::sun::star::lang; - using namespace ::com::sun::star; - - ParameterSubstitution::ParameterSubstitution(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& _rxContext ) : m_xContext(_rxContext) - { - } - void SAL_CALL ParameterSubstitution::initialize( const uno::Sequence< uno::Any >& _aArguments ) throw (uno::Exception, uno::RuntimeException) - { - ::osl::MutexGuard aGuard(m_aMutex); - comphelper::SequenceAsHashMap aArgs(_aArguments); - uno::Reference< sdbc::XConnection > xConnection; - xConnection = aArgs.getUnpackedValueOrDefault(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ActiveConnection")),xConnection); - m_xConnection = xConnection; - } - //------------------------------------------------------------------------------ - rtl::OUString ParameterSubstitution::getImplementationName_Static( ) throw(RuntimeException) - { - return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.comp.helper.ParameterSubstitution")); - } - //------------------------------------------------------------------------------ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: FDatabaseMetaDataResultSet.cxx,v $ + * $Revision: 1.24 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ +#include "precompiled_connectivity.hxx" +#include "ParameterSubstitution.hxx" +#include "connectivity/sqlparse.hxx" +#include + +namespace connectivity +{ + using namespace ::com::sun::star::uno; + using namespace ::com::sun::star::sdbc; + using namespace ::com::sun::star::lang; + using namespace ::com::sun::star; + + ParameterSubstitution::ParameterSubstitution(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& _rxContext ) : m_xContext(_rxContext) + { + } + void SAL_CALL ParameterSubstitution::initialize( const uno::Sequence< uno::Any >& _aArguments ) throw (uno::Exception, uno::RuntimeException) + { + ::osl::MutexGuard aGuard(m_aMutex); + comphelper::SequenceAsHashMap aArgs(_aArguments); + uno::Reference< sdbc::XConnection > xConnection; + xConnection = aArgs.getUnpackedValueOrDefault(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ActiveConnection")),xConnection); + m_xConnection = xConnection; + } + //------------------------------------------------------------------------------ + rtl::OUString ParameterSubstitution::getImplementationName_Static( ) throw(RuntimeException) + { + return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.comp.helper.ParameterSubstitution")); + } + //------------------------------------------------------------------------------ ::rtl::OUString SAL_CALL ParameterSubstitution::getImplementationName( ) throw(RuntimeException) { return getImplementationName_Static(); @@ -75,61 +75,61 @@ namespace connectivity Sequence< ::rtl::OUString > SAL_CALL ParameterSubstitution::getSupportedServiceNames( ) throw(RuntimeException) { return getSupportedServiceNames_Static(); - } - //------------------------------------------------------------------ - Sequence< ::rtl::OUString > ParameterSubstitution::getSupportedServiceNames_Static( ) throw (RuntimeException) - { - Sequence< ::rtl::OUString > aSNS( 1 ); - aSNS[0] = ::rtl::OUString::createFromAscii("com.sun.star.sdb.ParameterSubstitution"); - return aSNS; - } - - //------------------------------------------------------------------ - Reference< XInterface > ParameterSubstitution::create(const Reference< XComponentContext >& _xContext) - { - return *(new ParameterSubstitution(_xContext)); - } - //------------------------------------------------------------------ - ::rtl::OUString SAL_CALL ParameterSubstitution::substituteVariables( const ::rtl::OUString& _sText, ::sal_Bool /*bSubstRequired*/ ) throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::uno::RuntimeException) - { - ::rtl::OUString sRet = _sText; - uno::Reference< sdbc::XConnection > xConnection = m_xConnection; - if ( xConnection.is() ) - { - try - { - uno::Reference< XMultiServiceFactory> xFac(m_xContext->getServiceManager(),uno::UNO_QUERY_THROW); - OSQLParser aParser( xFac ); - ::rtl::OUString sErrorMessage; - ::rtl::OUString sNewSql; - OSQLParseNode* pNode = aParser.parseTree(sErrorMessage,_sText); - if(pNode) - { // special handling for parameters - OSQLParseNode::substituteParameterNames(pNode); - pNode->parseNodeToStr( sNewSql, xConnection ); - delete pNode; - sRet = sNewSql; - } - } - catch(const Exception&) - { - } - } - return sRet; - } - //------------------------------------------------------------------ - ::rtl::OUString SAL_CALL ParameterSubstitution::reSubstituteVariables( const ::rtl::OUString& _sText ) throw (::com::sun::star::uno::RuntimeException) - { - return _sText; - } - //------------------------------------------------------------------ - ::rtl::OUString SAL_CALL ParameterSubstitution::getSubstituteVariableValue( const ::rtl::OUString& /*variable*/ ) throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::uno::RuntimeException) - { - throw container::NoSuchElementException(); - } - //------------------------------------------------------------------ - - -// ================================== -} // connectivity -// ================================== + } + //------------------------------------------------------------------ + Sequence< ::rtl::OUString > ParameterSubstitution::getSupportedServiceNames_Static( ) throw (RuntimeException) + { + Sequence< ::rtl::OUString > aSNS( 1 ); + aSNS[0] = ::rtl::OUString::createFromAscii("com.sun.star.sdb.ParameterSubstitution"); + return aSNS; + } + + //------------------------------------------------------------------ + Reference< XInterface > ParameterSubstitution::create(const Reference< XComponentContext >& _xContext) + { + return *(new ParameterSubstitution(_xContext)); + } + //------------------------------------------------------------------ + ::rtl::OUString SAL_CALL ParameterSubstitution::substituteVariables( const ::rtl::OUString& _sText, ::sal_Bool /*bSubstRequired*/ ) throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::uno::RuntimeException) + { + ::rtl::OUString sRet = _sText; + uno::Reference< sdbc::XConnection > xConnection = m_xConnection; + if ( xConnection.is() ) + { + try + { + uno::Reference< XMultiServiceFactory> xFac(m_xContext->getServiceManager(),uno::UNO_QUERY_THROW); + OSQLParser aParser( xFac ); + ::rtl::OUString sErrorMessage; + ::rtl::OUString sNewSql; + OSQLParseNode* pNode = aParser.parseTree(sErrorMessage,_sText); + if(pNode) + { // special handling for parameters + OSQLParseNode::substituteParameterNames(pNode); + pNode->parseNodeToStr( sNewSql, xConnection ); + delete pNode; + sRet = sNewSql; + } + } + catch(const Exception&) + { + } + } + return sRet; + } + //------------------------------------------------------------------ + ::rtl::OUString SAL_CALL ParameterSubstitution::reSubstituteVariables( const ::rtl::OUString& _sText ) throw (::com::sun::star::uno::RuntimeException) + { + return _sText; + } + //------------------------------------------------------------------ + ::rtl::OUString SAL_CALL ParameterSubstitution::getSubstituteVariableValue( const ::rtl::OUString& /*variable*/ ) throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::uno::RuntimeException) + { + throw container::NoSuchElementException(); + } + //------------------------------------------------------------------ + + +// ================================== +} // connectivity +// ================================== diff --git a/desktop/os2/source/applauncher/launcher.cxx b/desktop/os2/source/applauncher/launcher.cxx index 3869ed1a18..debaf7cae3 100644 --- a/desktop/os2/source/applauncher/launcher.cxx +++ b/desktop/os2/source/applauncher/launcher.cxx @@ -1,118 +1,118 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#include "launcher.hxx" - -#include -#include -#include -#include -#include - -int main( int argc, char* argv[]) -{ - PPIB pib; - APIRET rc; - RESULTCODES result = {0}; - char szFail[ _MAX_PATH]; - - HAB hab = WinInitialize( 0); - HMQ hmq = WinCreateMsgQueue( hab, 0); - ERRORID erridErrorCode = 0; - erridErrorCode = WinGetLastError(hab); - - // Calculate application name - CHAR szLibpath[_MAX_PATH*2]; - CHAR szApplicationName[_MAX_PATH]; - CHAR szDrive[_MAX_PATH]; - CHAR szDir[_MAX_PATH]; - CHAR szFileName[_MAX_PATH]; - CHAR szExt[_MAX_PATH]; - - // get executable fullpath - DosGetInfoBlocks(NULL, &pib); - DosQueryModuleName(pib->pib_hmte, sizeof(szApplicationName), szApplicationName); - - // adjust libpath - _splitpath( szApplicationName, szDrive, szDir, szFileName, szExt ); - char* basedir = strstr( szDir, "\\PROGRAM\\"); - if (basedir) *basedir = 0; - sprintf( szLibpath, "%s%s\\URE\\BIN;%s%s\\BASIS\\PROGRAM;%BeginLIBPATH%", - szDrive, szDir, szDrive, szDir); - DosSetExtLIBPATH( (PCSZ)szLibpath, BEGIN_LIBPATH); - // make sure we load DLL from our path only, so multiple instances/versions - // can be loaded. - DosSetExtLIBPATH( (PCSZ)"T", LIBPATHSTRICT); - - // adjust exe name - _splitpath( szApplicationName, szDrive, szDir, szFileName, szExt ); - _makepath( szApplicationName, szDrive, szDir, OFFICE_IMAGE_NAME, (".bin") ); - - // copy command line parameters - int i, len; - len = strlen(szApplicationName) + 1 + strlen( APPLICATION_SWITCH) + 1 + 1; - for( i=1; i + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#include "launcher.hxx" + +#include +#include +#include +#include +#include + +int main( int argc, char* argv[]) +{ + PPIB pib; + APIRET rc; + RESULTCODES result = {0}; + char szFail[ _MAX_PATH]; + + HAB hab = WinInitialize( 0); + HMQ hmq = WinCreateMsgQueue( hab, 0); + ERRORID erridErrorCode = 0; + erridErrorCode = WinGetLastError(hab); + + // Calculate application name + CHAR szLibpath[_MAX_PATH*2]; + CHAR szApplicationName[_MAX_PATH]; + CHAR szDrive[_MAX_PATH]; + CHAR szDir[_MAX_PATH]; + CHAR szFileName[_MAX_PATH]; + CHAR szExt[_MAX_PATH]; + + // get executable fullpath + DosGetInfoBlocks(NULL, &pib); + DosQueryModuleName(pib->pib_hmte, sizeof(szApplicationName), szApplicationName); + + // adjust libpath + _splitpath( szApplicationName, szDrive, szDir, szFileName, szExt ); + char* basedir = strstr( szDir, "\\PROGRAM\\"); + if (basedir) *basedir = 0; + sprintf( szLibpath, "%s%s\\URE\\BIN;%s%s\\BASIS\\PROGRAM;%BeginLIBPATH%", + szDrive, szDir, szDrive, szDir); + DosSetExtLIBPATH( (PCSZ)szLibpath, BEGIN_LIBPATH); + // make sure we load DLL from our path only, so multiple instances/versions + // can be loaded. + DosSetExtLIBPATH( (PCSZ)"T", LIBPATHSTRICT); + + // adjust exe name + _splitpath( szApplicationName, szDrive, szDir, szFileName, szExt ); + _makepath( szApplicationName, szDrive, szDir, OFFICE_IMAGE_NAME, (".bin") ); + + // copy command line parameters + int i, len; + len = strlen(szApplicationName) + 1 + strlen( APPLICATION_SWITCH) + 1 + 1; + for( i=1; i& rProperties ); void ActivatePage( sal_Int32 nIndex ); void RemovePage( sal_Int32 nIndex ); - sal_Int32 GetActivePageId() const; + sal_Int32 GetActivePageId() const; virtual void Resize(); }; diff --git a/framework/inc/dispatch/startmoduledispatcher.hxx b/framework/inc/dispatch/startmoduledispatcher.hxx index 4d084f9f2b..0a7c42e5bd 100644 --- a/framework/inc/dispatch/startmoduledispatcher.hxx +++ b/framework/inc/dispatch/startmoduledispatcher.hxx @@ -86,14 +86,14 @@ class StartModuleDispatcher : public css::lang::XTypeProvider uno resources. */ css::uno::Reference< css::lang::XMultiServiceFactory > m_xSMGR; - //--------------------------------------- - /** @short our "context" frame. */ - css::uno::WeakReference< css::frame::XFrame > m_xOwner; + //--------------------------------------- + /** @short our "context" frame. */ + css::uno::WeakReference< css::frame::XFrame > m_xOwner; + + //--------------------------------------- + /** @short the original queryDispatch() target. */ + ::rtl::OUString m_sDispatchTarget; - //--------------------------------------- - /** @short the original queryDispatch() target. */ - ::rtl::OUString m_sDispatchTarget; - //--------------------------------------- /** @short list of registered status listener */ ListenerHash m_lStatusListener; @@ -104,7 +104,7 @@ class StartModuleDispatcher : public css::lang::XTypeProvider public: //--------------------------------------- - /** @short connect a new StartModuleDispatcher instance to its "owner frame". + /** @short connect a new StartModuleDispatcher instance to its "owner frame". @descr Such "owner frame" is used as context for all related operations. @@ -159,11 +159,11 @@ class StartModuleDispatcher : public css::lang::XTypeProvider // internal helper private: - - //--------------------------------------- - /** @short check if StartModule can be shown. + + //--------------------------------------- + /** @short check if StartModule can be shown. */ - ::sal_Bool implts_isBackingModePossible(); + ::sal_Bool implts_isBackingModePossible(); //--------------------------------------- /** @short open the special BackingComponent (now StartModule) diff --git a/framework/inc/services/tabwindowservice.hxx b/framework/inc/services/tabwindowservice.hxx index 198d84be0b..873b300598 100644 --- a/framework/inc/services/tabwindowservice.hxx +++ b/framework/inc/services/tabwindowservice.hxx @@ -48,13 +48,13 @@ #include #include #include -#include +#include #include - + //_________________________________________________________________________________________________________________ // interface includes //_________________________________________________________________________________________________________________ - + #include #include #include @@ -62,7 +62,7 @@ //_________________________________________________________________________________________________________________ // other includes //_________________________________________________________________________________________________________________ - + #include #include @@ -81,31 +81,31 @@ namespace framework{ //_________________________________________________________________________________________________________________ struct TTabPageInfo -{ - public: +{ + public: - TTabPageInfo() - : m_nIndex ( -1 ) - , m_bCreated (sal_False) - , m_pPage ( NULL ) - , m_lProperties ( ) - {} - - TTabPageInfo(::sal_Int32 nID) - : m_nIndex ( nID ) - , m_bCreated (sal_False) - , m_pPage ( NULL ) - , m_lProperties ( ) - {} - - public: + TTabPageInfo() + : m_nIndex ( -1 ) + , m_bCreated (sal_False) + , m_pPage ( NULL ) + , m_lProperties ( ) + {} + + TTabPageInfo(::sal_Int32 nID) + : m_nIndex ( nID ) + , m_bCreated (sal_False) + , m_pPage ( NULL ) + , m_lProperties ( ) + {} + + public: - ::sal_Int32 m_nIndex; + ::sal_Int32 m_nIndex; ::sal_Bool m_bCreated; FwkTabPage* m_pPage; css::uno::Sequence< css::beans::NamedValue > m_lProperties; -}; - +}; + typedef ::std::hash_map< ::sal_Int32 , TTabPageInfo , Int32HashCode , @@ -120,8 +120,8 @@ class TabWindowService : public css::lang::XTypeProvider , public css::awt::XSimpleTabController , public ThreadHelpBase , public TransactionBase - , public PropertySetHelper - , public ::cppu::OWeakObject + , public PropertySetHelper + , public ::cppu::OWeakObject { //------------------------------------------------------------------------------------------------------------- // public methods @@ -132,7 +132,7 @@ class TabWindowService : public css::lang::XTypeProvider //--------------------------------------------------------------------------------------------------------- // constructor / destructor //--------------------------------------------------------------------------------------------------------- - + TabWindowService( const css::uno::Reference< css::lang::XMultiServiceFactory >& xFactory ); virtual ~TabWindowService(); @@ -186,8 +186,8 @@ class TabWindowService : public css::lang::XTypeProvider DECL_DLLPRIVATE_LINK( EventListener, VclSimpleEvent * ); - void impl_checkTabIndex (::sal_Int32 nID) throw (css::lang::IndexOutOfBoundsException); - TTabPageInfoHash::iterator impl_getTabPageInfo(::sal_Int32 nID) throw (css::lang::IndexOutOfBoundsException); + void impl_checkTabIndex (::sal_Int32 nID) throw (css::lang::IndexOutOfBoundsException); + TTabPageInfoHash::iterator impl_getTabPageInfo(::sal_Int32 nID) throw (css::lang::IndexOutOfBoundsException); FwkTabWindow* mem_TabWin (); /* ::cppu::IPropertyArrayHelper& SAL_CALL getInfoHelper(); @@ -203,26 +203,26 @@ class TabWindowService : public css::lang::XTypeProvider private: /// reference to factory, which has created this instance - css::uno::Reference< css::lang::XMultiServiceFactory > m_xFactory; - + css::uno::Reference< css::lang::XMultiServiceFactory > m_xFactory; + /// the tab window as XWindow ( to hold window* alive !) - css::uno::Reference< css::awt::XWindow > m_xTabWin; - - /// the VCL tab window - FwkTabWindow* m_pTabWin; - - /// container of inserted tab pages - TTabPageInfoHash m_lTabPageInfos; - + css::uno::Reference< css::awt::XWindow > m_xTabWin; + + /// the VCL tab window + FwkTabWindow* m_pTabWin; + + /// container of inserted tab pages + TTabPageInfoHash m_lTabPageInfos; + /// container of the added TabListener ::cppu::OMultiTypeInterfaceContainerHelper m_lListener; - + /// counter of the tabpage indexes - ::sal_Int32 m_nPageIndexCounter; - + ::sal_Int32 m_nPageIndexCounter; + /// index of the current active page ::sal_Int32 m_nCurrentPageIndex; - + /// title of the tabcontrolled window ::rtl::OUString m_sTitle; diff --git a/framework/source/accelerators/acceleratorconfiguration.cxx b/framework/source/accelerators/acceleratorconfiguration.cxx index 9c2eaadd40..7d069e54d1 100644 --- a/framework/source/accelerators/acceleratorconfiguration.cxx +++ b/framework/source/accelerators/acceleratorconfiguration.cxx @@ -1,1664 +1,1664 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: acceleratorconfiguration.cxx,v $ - * $Revision: 1.7.204.12 $ - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_framework.hxx" -#include - -//_______________________________________________ -// own includes -#include -#include - -#include -#include -#include - -#include -#include - -#include -#include - -//_______________________________________________ -// interface includes -#include -#include -#include -#include -#include -#include -#include - -//_______________________________________________ -// other includes -#include - -#ifndef __FRAMEWORK_ACCELERATORS_KEYMAPPING_HXX_ -#include -#endif - -#ifndef _COM_SUN_STAR_CONTAINER_XNAMED_HPP_ -#include -#endif - -#ifndef _COM_SUN_STAR_CONTAINER_XNAMECONTAINER_HPP_ -#include -#endif - -#ifndef __COM_SUN_STAR_AWT_KEYEVENT_HPP_ -#include -#endif - -#ifndef __COM_SUN_STAR_AWT_KEYMODIFIER_HPP_ -#include -#endif - -#ifndef _COM_SUN_STAR_LANG_XSINGLESERVICEFACTORY_HPP_ -#include -#endif - -#ifndef _COM_SUN_STAR_UTIL_XCHANGESNOTIFIER_HPP_ -#include -#endif - -#ifndef _COMPHELPER_CONFIGURATIONHELPER_HXX_ -#include -#endif - -#ifndef UNOTOOLS_CONFIGPATHES_HXX_INCLUDED -#include -#endif - -#ifndef _RTL_LOGFILE_HXX_ -#include -#endif - -#include - -//_______________________________________________ -// const - -namespace framework -{ - -#ifdef fpc - #error "Who exports this define? I use it as namespace alias ..." -#else - namespace fpc = ::framework::pattern::configuration; -#endif - -//----------------------------------------------- -// XInterface, XTypeProvider -DEFINE_XINTERFACE_6(XMLBasedAcceleratorConfiguration , - OWeakObject , - DIRECT_INTERFACE(css::lang::XTypeProvider ), - DIRECT_INTERFACE(css::ui::XAcceleratorConfiguration ), - DIRECT_INTERFACE(css::form::XReset ), - DIRECT_INTERFACE(css::ui::XUIConfigurationPersistence), - DIRECT_INTERFACE(css::ui::XUIConfigurationStorage ), - DIRECT_INTERFACE(css::ui::XUIConfiguration )) - -DEFINE_XTYPEPROVIDER_6(XMLBasedAcceleratorConfiguration , - css::lang::XTypeProvider , - css::ui::XAcceleratorConfiguration , - css::form::XReset , - css::ui::XUIConfigurationPersistence, - css::ui::XUIConfigurationStorage , - css::ui::XUIConfiguration ) - -//----------------------------------------------- -XMLBasedAcceleratorConfiguration::XMLBasedAcceleratorConfiguration(const css::uno::Reference< css::lang::XMultiServiceFactory > xSMGR) - : ThreadHelpBase (&Application::GetSolarMutex()) - , m_xSMGR (xSMGR ) - , m_aPresetHandler(xSMGR ) - , m_pWriteCache (0 ) -{ -} - -//----------------------------------------------- -XMLBasedAcceleratorConfiguration::~XMLBasedAcceleratorConfiguration() -{ - LOG_ASSERT(!m_pWriteCache, "XMLBasedAcceleratorConfiguration::~XMLBasedAcceleratorConfiguration()\nChanges not flushed. Ignore it ...") -} - -//----------------------------------------------- -css::uno::Sequence< css::awt::KeyEvent > SAL_CALL XMLBasedAcceleratorConfiguration::getAllKeyEvents() - throw(css::uno::RuntimeException) -{ - // SAFE -> ---------------------------------- - ReadGuard aReadLock(m_aLock); - - AcceleratorCache& rCache = impl_getCFG(); - AcceleratorCache::TKeyList lKeys = rCache.getAllKeys(); - return lKeys.getAsConstList(); - - // <- SAFE ---------------------------------- -} - -//----------------------------------------------- -::rtl::OUString SAL_CALL XMLBasedAcceleratorConfiguration::getCommandByKeyEvent(const css::awt::KeyEvent& aKeyEvent) - throw(css::container::NoSuchElementException, - css::uno::RuntimeException ) -{ - // SAFE -> ---------------------------------- - ReadGuard aReadLock(m_aLock); - - AcceleratorCache& rCache = impl_getCFG(); - if (!rCache.hasKey(aKeyEvent)) - throw css::container::NoSuchElementException( - ::rtl::OUString(), - static_cast< ::cppu::OWeakObject* >(this)); - return rCache.getCommandByKey(aKeyEvent); - - // <- SAFE ---------------------------------- -} - -//----------------------------------------------- -void SAL_CALL XMLBasedAcceleratorConfiguration::setKeyEvent(const css::awt::KeyEvent& aKeyEvent, - const ::rtl::OUString& sCommand ) - throw(css::lang::IllegalArgumentException, - css::uno::RuntimeException ) -{ - if ( - (aKeyEvent.KeyCode == 0) && - (aKeyEvent.KeyChar == 0) && - (aKeyEvent.KeyFunc == 0) && - (aKeyEvent.Modifiers == 0) - ) - throw css::lang::IllegalArgumentException( - ::rtl::OUString::createFromAscii("Such key event seams not to be supported by any operating system."), - static_cast< ::cppu::OWeakObject* >(this), - 0); - - if (!sCommand.getLength()) - throw css::lang::IllegalArgumentException( - ::rtl::OUString::createFromAscii("Empty command strings are not allowed here."), - static_cast< ::cppu::OWeakObject* >(this), - 1); - - // SAFE -> ---------------------------------- - WriteGuard aWriteLock(m_aLock); - - AcceleratorCache& rCache = impl_getCFG(sal_True); // TRUE => force getting of a writeable cache! - rCache.setKeyCommandPair(aKeyEvent, sCommand); - - aWriteLock.unlock(); - // <- SAFE ---------------------------------- -} - -//----------------------------------------------- -void SAL_CALL XMLBasedAcceleratorConfiguration::removeKeyEvent(const css::awt::KeyEvent& aKeyEvent) -throw(css::container::NoSuchElementException, - css::uno::RuntimeException ) -{ - // SAFE -> ---------------------------------- - WriteGuard aWriteLock(m_aLock); - - AcceleratorCache& rCache = impl_getCFG(sal_True); // true => force using of a writeable cache - if (!rCache.hasKey(aKeyEvent)) - throw css::container::NoSuchElementException( - ::rtl::OUString(), - static_cast< ::cppu::OWeakObject* >(this)); - rCache.removeKey(aKeyEvent); - - // <- SAFE ---------------------------------- -} - -//----------------------------------------------- -css::uno::Sequence< css::awt::KeyEvent > SAL_CALL XMLBasedAcceleratorConfiguration::getKeyEventsByCommand(const ::rtl::OUString& sCommand) - throw(css::lang::IllegalArgumentException , - css::container::NoSuchElementException, - css::uno::RuntimeException ) -{ - if (!sCommand.getLength()) - throw css::lang::IllegalArgumentException( - ::rtl::OUString::createFromAscii("Empty command strings are not allowed here."), - static_cast< ::cppu::OWeakObject* >(this), - 1); - - // SAFE -> ---------------------------------- - ReadGuard aReadLock(m_aLock); - - AcceleratorCache& rCache = impl_getCFG(); - if (!rCache.hasCommand(sCommand)) - throw css::container::NoSuchElementException( - ::rtl::OUString(), - static_cast< ::cppu::OWeakObject* >(this)); - - AcceleratorCache::TKeyList lKeys = rCache.getKeysByCommand(sCommand); - return lKeys.getAsConstList(); - - // <- SAFE ---------------------------------- -} - -//----------------------------------------------- -css::uno::Sequence< css::uno::Any > SAL_CALL XMLBasedAcceleratorConfiguration::getPreferredKeyEventsForCommandList(const css::uno::Sequence< ::rtl::OUString >& lCommandList) - throw(css::lang::IllegalArgumentException , - css::uno::RuntimeException ) -{ - // SAFE -> ---------------------------------- - ReadGuard aReadLock(m_aLock); - - sal_Int32 i = 0; - sal_Int32 c = lCommandList.getLength(); - css::uno::Sequence< css::uno::Any > lPreferredOnes (c); // dont pack list! - AcceleratorCache& rCache = impl_getCFG(); - - for (i=0; i(this), - (sal_Int16)i); - - if (!rCache.hasCommand(rCommand)) - continue; - - AcceleratorCache::TKeyList lKeys = rCache.getKeysByCommand(rCommand); - if (lKeys.size()<1) - continue; - - css::uno::Any& rAny = lPreferredOnes[i]; - rAny <<= *(lKeys.begin()); - } - - aReadLock.unlock(); - // <- SAFE ---------------------------------- - - return lPreferredOnes; -} - -//----------------------------------------------- -void SAL_CALL XMLBasedAcceleratorConfiguration::removeCommandFromAllKeyEvents(const ::rtl::OUString& sCommand) - throw(css::lang::IllegalArgumentException , - css::container::NoSuchElementException, - css::uno::RuntimeException ) -{ - if (!sCommand.getLength()) - throw css::lang::IllegalArgumentException( - ::rtl::OUString::createFromAscii("Empty command strings are not allowed here."), - static_cast< ::cppu::OWeakObject* >(this), - 0); - - // SAFE -> ---------------------------------- - WriteGuard aWriteLock(m_aLock); - - AcceleratorCache& rCache = impl_getCFG(sal_True); // TRUE => force getting of a writeable cache! - if (!rCache.hasCommand(sCommand)) - throw css::container::NoSuchElementException( - ::rtl::OUString::createFromAscii("Command does not exists inside this container."), - static_cast< ::cppu::OWeakObject* >(this)); - rCache.removeCommand(sCommand); - - aWriteLock.unlock(); - // <- SAFE ---------------------------------- -} - -//----------------------------------------------- -void SAL_CALL XMLBasedAcceleratorConfiguration::reload() - throw(css::uno::Exception , - css::uno::RuntimeException) -{ - css::uno::Reference< css::io::XStream > xStreamNoLang; - - // SAFE -> ---------------------------------- - ReadGuard aReadLock(m_aLock); - css::uno::Reference< css::io::XStream > xStream = m_aPresetHandler.openTarget(PresetHandler::TARGET_CURRENT(), sal_True); // TRUE => open or create! - try - { - xStreamNoLang = m_aPresetHandler.openPreset(PresetHandler::PRESET_DEFAULT(), sal_True); - } - catch(const css::io::IOException&) {} // does not have to exist - aReadLock.unlock(); - // <- SAFE ---------------------------------- - - css::uno::Reference< css::io::XInputStream > xIn; - if (xStream.is()) - xIn = xStream->getInputStream(); - if (!xIn.is()) - throw css::io::IOException( - ::rtl::OUString::createFromAscii("Could not open accelerator configuration for reading."), - static_cast< ::cppu::OWeakObject* >(this)); - - // impl_ts_load() does not clear the cache - // SAFE -> ---------------------------------- - WriteGuard aWriteLock(m_aLock); - m_aReadCache = AcceleratorCache(); - aWriteLock.unlock(); - // <- SAFE ---------------------------------- - - impl_ts_load(xIn); - - // Load also the general language independent default accelerators - // (ignoring the already defined accelerators) - if (xStreamNoLang.is()) - { - xIn = xStreamNoLang->getInputStream(); - if (xIn.is()) - impl_ts_load(xIn); - } -} - -//----------------------------------------------- -void SAL_CALL XMLBasedAcceleratorConfiguration::store() - throw(css::uno::Exception , - css::uno::RuntimeException) -{ - // SAFE -> ---------------------------------- - ReadGuard aReadLock(m_aLock); - css::uno::Reference< css::io::XStream > xStream = m_aPresetHandler.openTarget(PresetHandler::TARGET_CURRENT(), sal_True); // TRUE => open or create! - aReadLock.unlock(); - // <- SAFE ---------------------------------- - - css::uno::Reference< css::io::XOutputStream > xOut; - if (xStream.is()) - xOut = xStream->getOutputStream(); - - if (!xOut.is()) - throw css::io::IOException( - ::rtl::OUString::createFromAscii("Could not open accelerator configuration for saving."), - static_cast< ::cppu::OWeakObject* >(this)); - - impl_ts_save(xOut); - - xOut.clear(); - xStream.clear(); - - m_aPresetHandler.commitUserChanges(); -} - -//----------------------------------------------- -void SAL_CALL XMLBasedAcceleratorConfiguration::storeToStorage(const css::uno::Reference< css::embed::XStorage >& xStorage) - throw(css::uno::Exception , - css::uno::RuntimeException) -{ - css::uno::Reference< css::io::XStream > xStream = StorageHolder::openSubStreamWithFallback( - xStorage, - PresetHandler::TARGET_CURRENT(), - css::embed::ElementModes::READWRITE, - sal_False); // False => no fallback from read/write to readonly! - css::uno::Reference< css::io::XOutputStream > xOut; - if (xStream.is()) - xOut = xStream->getOutputStream(); - - if (!xOut.is()) - throw css::io::IOException( - ::rtl::OUString::createFromAscii("Could not open accelerator configuration for saving."), - static_cast< ::cppu::OWeakObject* >(this)); - - impl_ts_save(xOut); - - // TODO inform listener about success, so it can flush the root and sub storage of this stream! -} - -//----------------------------------------------- -::sal_Bool SAL_CALL XMLBasedAcceleratorConfiguration::isModified() - throw(css::uno::RuntimeException) -{ - // SAFE -> ---------------------------------- - ReadGuard aReadLock(m_aLock); - return (m_pWriteCache != 0); - // <- SAFE ---------------------------------- -} - -//----------------------------------------------- -::sal_Bool SAL_CALL XMLBasedAcceleratorConfiguration::isReadOnly() - throw(css::uno::RuntimeException) -{ - // SAFE -> ---------------------------------- - ReadGuard aReadLock(m_aLock); - css::uno::Reference< css::io::XStream > xStream = m_aPresetHandler.openTarget(PresetHandler::TARGET_CURRENT(), sal_True); // TRUE => open or create! - aReadLock.unlock(); - // <- SAFE ---------------------------------- - - css::uno::Reference< css::io::XOutputStream > xOut; - if (xStream.is()) - xOut = xStream->getOutputStream(); - return !(xOut.is()); -} - -//----------------------------------------------- -void SAL_CALL XMLBasedAcceleratorConfiguration::setStorage(const css::uno::Reference< css::embed::XStorage >& /*xStorage*/) - throw(css::uno::RuntimeException) -{ - LOG_WARNING("XMLBasedAcceleratorConfiguration::setStorage()", "TODO implement this HACK .-)") -} - -//----------------------------------------------- -::sal_Bool SAL_CALL XMLBasedAcceleratorConfiguration::hasStorage() - throw(css::uno::RuntimeException) -{ - LOG_WARNING("XMLBasedAcceleratorConfiguration::hasStorage()", "TODO implement this HACK .-)") - return sal_False; -} - -//----------------------------------------------- -void SAL_CALL XMLBasedAcceleratorConfiguration::addConfigurationListener(const css::uno::Reference< css::ui::XUIConfigurationListener >& /*xListener*/) - throw(css::uno::RuntimeException) -{ - LOG_WARNING("XMLBasedAcceleratorConfiguration::addConfigurationListener()", "TODO implement me") -} - -//----------------------------------------------- -void SAL_CALL XMLBasedAcceleratorConfiguration::removeConfigurationListener(const css::uno::Reference< css::ui::XUIConfigurationListener >& /*xListener*/) - throw(css::uno::RuntimeException) -{ - LOG_WARNING("XMLBasedAcceleratorConfiguration::removeConfigurationListener()", "TODO implement me") -} - -//----------------------------------------------- -void SAL_CALL XMLBasedAcceleratorConfiguration::reset() -throw(css::uno::RuntimeException) -{ - // SAFE -> ---------------------------------- - WriteGuard aWriteLock(m_aLock); - m_aPresetHandler.copyPresetToTarget(PresetHandler::PRESET_DEFAULT(), PresetHandler::TARGET_CURRENT()); - aWriteLock.unlock(); - // <- SAFE ---------------------------------- - - reload(); -} - -//----------------------------------------------- -void SAL_CALL XMLBasedAcceleratorConfiguration::addResetListener(const css::uno::Reference< css::form::XResetListener >& /*xListener*/) - throw(css::uno::RuntimeException) -{ - LOG_WARNING("XMLBasedAcceleratorConfiguration::addResetListener()", "TODO implement me") -} - -//----------------------------------------------- -void SAL_CALL XMLBasedAcceleratorConfiguration::removeResetListener(const css::uno::Reference< css::form::XResetListener >& /*xListener*/) - throw(css::uno::RuntimeException) -{ - LOG_WARNING("XMLBasedAcceleratorConfiguration::removeResetListener()", "TODO implement me") -} - -//----------------------------------------------- -// IStorageListener -void XMLBasedAcceleratorConfiguration::changesOccured(const ::rtl::OUString& /*sPath*/) -{ - reload(); -} - -//----------------------------------------------- -void XMLBasedAcceleratorConfiguration::impl_ts_load(const css::uno::Reference< css::io::XInputStream >& xStream) -{ - // SAFE -> ---------------------------------- - WriteGuard aWriteLock(m_aLock); - - css::uno::Reference< css::lang::XMultiServiceFactory > xSMGR = m_xSMGR; - if (m_pWriteCache) - { - // be aware of reentrance problems - use temp variable for calling delete ... :-) - AcceleratorCache* pTemp = m_pWriteCache; - m_pWriteCache = 0; - delete pTemp; - } - - aWriteLock.unlock(); - // <- SAFE ---------------------------------- - - css::uno::Reference< css::io::XSeekable > xSeek(xStream, css::uno::UNO_QUERY); - if (xSeek.is()) - xSeek->seek(0); - - // add accelerators to the cache (the cache is not cleared) - // SAFE -> ---------------------------------- - aWriteLock.lock(); - - // create the parser queue - // Note: Use special filter object between parser and reader - // to get filtered xml with right namespaces ... - // Use further a temp cache for reading! - AcceleratorConfigurationReader* pReader = new AcceleratorConfigurationReader(m_aReadCache); - css::uno::Reference< css::xml::sax::XDocumentHandler > xReader (static_cast< ::cppu::OWeakObject* >(pReader), css::uno::UNO_QUERY_THROW); - SaxNamespaceFilter* pFilter = new SaxNamespaceFilter(xReader); - css::uno::Reference< css::xml::sax::XDocumentHandler > xFilter (static_cast< ::cppu::OWeakObject* >(pFilter), css::uno::UNO_QUERY_THROW); - - // connect parser, filter and stream - css::uno::Reference< css::xml::sax::XParser > xParser(xSMGR->createInstance(SERVICENAME_SAXPARSER), css::uno::UNO_QUERY_THROW); - xParser->setDocumentHandler(xFilter); - - css::xml::sax::InputSource aSource; - aSource.aInputStream = xStream; - - // TODO think about error handling - xParser->parseStream(aSource); - - aWriteLock.unlock(); - // <- SAFE ---------------------------------- -} - -//----------------------------------------------- -void XMLBasedAcceleratorConfiguration::impl_ts_save(const css::uno::Reference< css::io::XOutputStream >& xStream) -{ - // SAFE -> ---------------------------------- - ReadGuard aReadLock(m_aLock); - - AcceleratorCache aCache; - sal_Bool bChanged = (m_pWriteCache != 0); - if (bChanged) - aCache.takeOver(*m_pWriteCache); - else - aCache.takeOver(m_aReadCache); - css::uno::Reference< css::lang::XMultiServiceFactory > xSMGR = m_xSMGR; - - aReadLock.unlock(); - // <- SAFE ---------------------------------- - - css::uno::Reference< css::io::XTruncate > xClearable(xStream, css::uno::UNO_QUERY_THROW); - xClearable->truncate(); - - // TODO can be removed if seek(0) is done by truncate() automaticly! - css::uno::Reference< css::io::XSeekable > xSeek(xStream, css::uno::UNO_QUERY); - if (xSeek.is()) - xSeek->seek(0); - - // combine writer/cache/stream etcpp. - css::uno::Reference< css::xml::sax::XDocumentHandler > xWriter (xSMGR->createInstance(SERVICENAME_SAXWRITER), css::uno::UNO_QUERY_THROW); - css::uno::Reference< css::io::XActiveDataSource> xDataSource(xWriter , css::uno::UNO_QUERY_THROW); - xDataSource->setOutputStream(xStream); - - // write into the stream - AcceleratorConfigurationWriter aWriter(aCache, xWriter); - aWriter.flush(); - - // take over all changes into the original container - // SAFE -> ---------------------------------- - WriteGuard aWriteLock(m_aLock); - - // take over all changes into the readonly cache ... - // and forget the copy-on-write copied cache - if (bChanged) - { - m_aReadCache.takeOver(*m_pWriteCache); - // live with reentrance .-) - AcceleratorCache* pTemp = m_pWriteCache; - m_pWriteCache = 0; - delete pTemp; - } - - aWriteLock.unlock(); - // <- SAFE ---------------------------------- -} - -//----------------------------------------------- -AcceleratorCache& XMLBasedAcceleratorConfiguration::impl_getCFG(sal_Bool bWriteAccessRequested) -{ - // SAFE -> ---------------------------------- - WriteGuard aWriteLock(m_aLock); - - //create copy of our readonly-cache, if write access is forced ... but - //not still possible! - if ( - (bWriteAccessRequested) && - (!m_pWriteCache ) - ) - { - m_pWriteCache = new AcceleratorCache(m_aReadCache); - } - - // in case, we have a writeable cache, we use it for reading too! - // Otherwhise the API user cant find its own changes ... - if (m_pWriteCache) - return *m_pWriteCache; - else - return m_aReadCache; - // <- SAFE ---------------------------------- -} - -//----------------------------------------------- -::comphelper::Locale XMLBasedAcceleratorConfiguration::impl_ts_getLocale() const -{ - static ::rtl::OUString LOCALE_PACKAGE = ::rtl::OUString::createFromAscii("/org.openoffice.Setup"); - static ::rtl::OUString LOCALE_PATH = ::rtl::OUString::createFromAscii("L10N" ); - static ::rtl::OUString LOCALE_KEY = ::rtl::OUString::createFromAscii("ooLocale" ); - - // SAFE -> ---------------------------------- - ReadGuard aReadLock(m_aLock); - css::uno::Reference< css::lang::XMultiServiceFactory > xSMGR = m_xSMGR; - aReadLock.unlock(); - // <- SAFE ---------------------------------- - - css::uno::Reference< css::uno::XInterface > xCFG = fpc::ConfigurationHelper::openConfig(xSMGR, LOCALE_PACKAGE, LOCALE_PATH, fpc::ConfigurationHelper::E_READONLY); - css::uno::Reference< css::beans::XPropertySet > xProp (xCFG, css::uno::UNO_QUERY_THROW); - ::rtl::OUString sISOLocale; - xProp->getPropertyValue(LOCALE_KEY) >>= sISOLocale; - - if (!sISOLocale.getLength()) - return ::comphelper::Locale::EN_US(); - return ::comphelper::Locale(sISOLocale); -} - -/******************************************************************************* -* -* XCU based accelerator configuration -* -*******************************************************************************/ - -//----------------------------------------------- -// XInterface, XTypeProvider -DEFINE_XINTERFACE_7(XCUBasedAcceleratorConfiguration , - OWeakObject , - DIRECT_INTERFACE(css::lang::XTypeProvider ), - DIRECT_INTERFACE(css::ui::XAcceleratorConfiguration ), - DIRECT_INTERFACE(css::util::XChangesListener ), - DIRECT_INTERFACE(css::form::XReset ), - DIRECT_INTERFACE(css::ui::XUIConfigurationPersistence), - DIRECT_INTERFACE(css::ui::XUIConfigurationStorage ), - DIRECT_INTERFACE(css::ui::XUIConfiguration )) - - DEFINE_XTYPEPROVIDER_7(XCUBasedAcceleratorConfiguration , - css::lang::XTypeProvider , - css::ui::XAcceleratorConfiguration , - css::util::XChangesListener , - css::form::XReset , - css::ui::XUIConfigurationPersistence, - css::ui::XUIConfigurationStorage , - css::ui::XUIConfiguration ) - -//----------------------------------------------- -XCUBasedAcceleratorConfiguration::XCUBasedAcceleratorConfiguration(const css::uno::Reference< css::lang::XMultiServiceFactory > xSMGR) - : ThreadHelpBase (&Application::GetSolarMutex()) - , m_xSMGR (xSMGR ) - , m_pPrimaryWriteCache(0 ) - , m_pSecondaryWriteCache(0 ) -{ - m_xCfg = css::uno::Reference< css::container::XNameAccess > ( - ::comphelper::ConfigurationHelper::openConfig( m_xSMGR, CFG_ENTRY_ACCELERATORS, ::comphelper::ConfigurationHelper::E_ALL_LOCALES ), - css::uno::UNO_QUERY ); -} - -//----------------------------------------------- -XCUBasedAcceleratorConfiguration::~XCUBasedAcceleratorConfiguration() -{ -} - -//----------------------------------------------- -css::uno::Sequence< css::awt::KeyEvent > SAL_CALL XCUBasedAcceleratorConfiguration::getAllKeyEvents() - throw(css::uno::RuntimeException) -{ - // SAFE -> ---------------------------------- - ReadGuard aReadLock(m_aLock); - - AcceleratorCache::TKeyList lKeys = impl_getCFG(sal_True).getAllKeys(); //get keys from PrimaryKeys set - - AcceleratorCache::TKeyList lSecondaryKeys = impl_getCFG(sal_False).getAllKeys(); //get keys from SecondaryKeys set - AcceleratorCache::TKeyList::const_iterator pIt; - for ( pIt = lSecondaryKeys.begin(); pIt != lSecondaryKeys.end(); ++pIt ) - lKeys.push_back(*pIt); - - return lKeys.getAsConstList(); - - // <- SAFE ---------------------------------- -} - -//----------------------------------------------- -::rtl::OUString SAL_CALL XCUBasedAcceleratorConfiguration::getCommandByKeyEvent(const css::awt::KeyEvent& aKeyEvent) - throw(css::container::NoSuchElementException, - css::uno::RuntimeException ) -{ - // SAFE -> ---------------------------------- - ReadGuard aReadLock(m_aLock); - - AcceleratorCache& rPrimaryCache = impl_getCFG(sal_True ); - AcceleratorCache& rSecondaryCache = impl_getCFG(sal_False); - - if (!rPrimaryCache.hasKey(aKeyEvent) && !rSecondaryCache.hasKey(aKeyEvent)) - throw css::container::NoSuchElementException( - ::rtl::OUString(), - static_cast< ::cppu::OWeakObject* >(this)); - - if (rPrimaryCache.hasKey(aKeyEvent)) - return rPrimaryCache.getCommandByKey(aKeyEvent); - else - return rSecondaryCache.getCommandByKey(aKeyEvent); - - // <- SAFE ---------------------------------- -} - -//----------------------------------------------- -void SAL_CALL XCUBasedAcceleratorConfiguration::setKeyEvent(const css::awt::KeyEvent& aKeyEvent, - const ::rtl::OUString& sCommand ) - throw(css::lang::IllegalArgumentException, - css::uno::RuntimeException ) -{ - RTL_LOGFILE_PRODUCT_CONTEXT( aLog1, " start XCUBasedAcceleratorConfiguration::setKeyEvent" ); - - if ( - (aKeyEvent.KeyCode == 0) && - (aKeyEvent.KeyChar == 0) && - (aKeyEvent.KeyFunc == 0) && - (aKeyEvent.Modifiers == 0) - ) - throw css::lang::IllegalArgumentException( - ::rtl::OUString::createFromAscii("Such key event seams not to be supported by any operating system."), - static_cast< ::cppu::OWeakObject* >(this), - 0); - - if (!sCommand.getLength()) - throw css::lang::IllegalArgumentException( - ::rtl::OUString::createFromAscii("Empty command strings are not allowed here."), - static_cast< ::cppu::OWeakObject* >(this), - 1); - - // SAFE -> ---------------------------------- - WriteGuard aWriteLock(m_aLock); - - AcceleratorCache& rPrimaryCache = impl_getCFG(sal_True, sal_True ); // TRUE => force getting of a writeable cache! - AcceleratorCache& rSecondaryCache = impl_getCFG(sal_False, sal_True); // TRUE => force getting of a writeable cache! - - if ( rPrimaryCache.hasKey(aKeyEvent) ) - { - ::rtl::OUString sOriginalCommand = rPrimaryCache.getCommandByKey(aKeyEvent); - if ( sCommand != sOriginalCommand ) - { - if (rSecondaryCache.hasCommand(sOriginalCommand)) - { - AcceleratorCache::TKeyList lSecondaryKeys = rSecondaryCache.getKeysByCommand(sOriginalCommand); - rSecondaryCache.removeKey(lSecondaryKeys[0]); - rPrimaryCache.setKeyCommandPair(lSecondaryKeys[0], sOriginalCommand); - } - - if (rPrimaryCache.hasCommand(sCommand)) - { - AcceleratorCache::TKeyList lPrimaryKeys = rPrimaryCache.getKeysByCommand(sCommand); - rPrimaryCache.removeKey(lPrimaryKeys[0]); - rSecondaryCache.setKeyCommandPair(lPrimaryKeys[0], sCommand); - } - - rPrimaryCache.setKeyCommandPair(aKeyEvent, sCommand); - } - } - - else if ( rSecondaryCache.hasKey(aKeyEvent) ) - { - ::rtl::OUString sOriginalCommand = rSecondaryCache.getCommandByKey(aKeyEvent); - if (sCommand != sOriginalCommand) - { - if (rPrimaryCache.hasCommand(sCommand)) - { - AcceleratorCache::TKeyList lPrimaryKeys = rPrimaryCache.getKeysByCommand(sCommand); - rPrimaryCache.removeKey(lPrimaryKeys[0]); - rSecondaryCache.setKeyCommandPair(lPrimaryKeys[0], sCommand); - } - - rSecondaryCache.removeKey(aKeyEvent); - rPrimaryCache.setKeyCommandPair(aKeyEvent, sCommand); - } - } - - else - { - if (rPrimaryCache.hasCommand(sCommand)) - { - AcceleratorCache::TKeyList lPrimaryKeys = rPrimaryCache.getKeysByCommand(sCommand); - rPrimaryCache.removeKey(lPrimaryKeys[0]); - rSecondaryCache.setKeyCommandPair(lPrimaryKeys[0], sCommand); - } - - rPrimaryCache.setKeyCommandPair(aKeyEvent, sCommand); - } - - aWriteLock.unlock(); - // <- SAFE ---------------------------------- - - RTL_LOGFILE_PRODUCT_CONTEXT( aLog2, " end XCUBasedAcceleratorConfiguration::setKeyEvent" ); -} - -//----------------------------------------------- -void SAL_CALL XCUBasedAcceleratorConfiguration::removeKeyEvent(const css::awt::KeyEvent& aKeyEvent) - throw(css::container::NoSuchElementException, - css::uno::RuntimeException ) -{ - // SAFE -> ---------------------------------- - WriteGuard aWriteLock(m_aLock); - - AcceleratorCache& rPrimaryCache = impl_getCFG(sal_True, sal_True ); - AcceleratorCache& rSecondaryCache = impl_getCFG(sal_False, sal_True); - - if (!rPrimaryCache.hasKey(aKeyEvent) && !rSecondaryCache.hasKey(aKeyEvent)) - throw css::container::NoSuchElementException( - ::rtl::OUString(), - static_cast< ::cppu::OWeakObject* >(this)); - - if (rPrimaryCache.hasKey(aKeyEvent)) - { - ::rtl::OUString sDelCommand = rPrimaryCache.getCommandByKey(aKeyEvent); - if (sDelCommand.getLength() > 0) - { - ::rtl::OUString sOriginalCommand = rPrimaryCache.getCommandByKey(aKeyEvent); - if (rSecondaryCache.hasCommand(sOriginalCommand)) - { - AcceleratorCache::TKeyList lSecondaryKeys = rSecondaryCache.getKeysByCommand(sOriginalCommand); - rSecondaryCache.removeKey(lSecondaryKeys[0]); - rPrimaryCache.setKeyCommandPair(lSecondaryKeys[0], sOriginalCommand); - } - - rPrimaryCache.removeKey(aKeyEvent); - } - - } - else - { - ::rtl::OUString sDelCommand = rSecondaryCache.getCommandByKey(aKeyEvent); - if (sDelCommand.getLength() > 0) - rSecondaryCache.removeKey(aKeyEvent); - } - - // <- SAFE ---------------------------------- -} - -//----------------------------------------------- -css::uno::Sequence< css::awt::KeyEvent > SAL_CALL XCUBasedAcceleratorConfiguration::getKeyEventsByCommand(const ::rtl::OUString& sCommand) - throw(css::lang::IllegalArgumentException , - css::container::NoSuchElementException, - css::uno::RuntimeException ) -{ - if (!sCommand.getLength()) - throw css::lang::IllegalArgumentException( - ::rtl::OUString::createFromAscii("Empty command strings are not allowed here."), - static_cast< ::cppu::OWeakObject* >(this), - 1); - - // SAFE -> ---------------------------------- - ReadGuard aReadLock(m_aLock); - - AcceleratorCache& rPrimaryCache = impl_getCFG(sal_True ); - AcceleratorCache& rSecondaryCache = impl_getCFG(sal_False); - - if (!rPrimaryCache.hasCommand(sCommand) && !rSecondaryCache.hasCommand(sCommand)) - throw css::container::NoSuchElementException( - ::rtl::OUString(), - static_cast< ::cppu::OWeakObject* >(this)); - - AcceleratorCache::TKeyList lKeys = rPrimaryCache.getKeysByCommand(sCommand); - - AcceleratorCache::TKeyList lSecondaryKeys = rSecondaryCache.getKeysByCommand(sCommand); - AcceleratorCache::TKeyList::const_iterator pIt; - for (pIt = lSecondaryKeys.begin(); pIt != lSecondaryKeys.end(); ++pIt) - lKeys.push_back(*pIt); - - return lKeys.getAsConstList(); - - // <- SAFE ---------------------------------- -} - -//----------------------------------------------- -AcceleratorCache::TKeyList::const_iterator lcl_getPreferredKey(const AcceleratorCache::TKeyList& lKeys) -{ - AcceleratorCache::TKeyList::const_iterator pIt; - for ( pIt = lKeys.begin (); - pIt != lKeys.end (); - ++pIt ) - { - const css::awt::KeyEvent& rAWTKey = *pIt; - const KeyCode aVCLKey = ::svt::AcceleratorExecute::st_AWTKey2VCLKey(rAWTKey); - const String sName = aVCLKey.GetName(); - - if (sName.Len () > 0) - return pIt; - } - - return lKeys.end (); -} - -//----------------------------------------------- -css::uno::Sequence< css::uno::Any > SAL_CALL XCUBasedAcceleratorConfiguration::getPreferredKeyEventsForCommandList(const css::uno::Sequence< ::rtl::OUString >& lCommandList) - throw(css::lang::IllegalArgumentException , - css::uno::RuntimeException ) -{ - // SAFE -> ---------------------------------- - ReadGuard aReadLock(m_aLock); - - sal_Int32 i = 0; - sal_Int32 c = lCommandList.getLength(); - css::uno::Sequence< css::uno::Any > lPreferredOnes (c); // dont pack list! - AcceleratorCache& rCache = impl_getCFG(sal_True); - - for (i=0; i(this), - (sal_Int16)i); - - if (!rCache.hasCommand(rCommand)) - continue; - - AcceleratorCache::TKeyList lKeys = rCache.getKeysByCommand(rCommand); - if (lKeys.size()<1) - continue; - - AcceleratorCache::TKeyList::const_iterator pPreferredKey = lcl_getPreferredKey(lKeys); - if (pPreferredKey != lKeys.end ()) - { - css::uno::Any& rAny = lPreferredOnes[i]; - rAny <<= *(pPreferredKey); - } - } - - aReadLock.unlock(); - // <- SAFE ---------------------------------- - - return lPreferredOnes; -} - -//----------------------------------------------- -void SAL_CALL XCUBasedAcceleratorConfiguration::removeCommandFromAllKeyEvents(const ::rtl::OUString& sCommand) - throw(css::lang::IllegalArgumentException , - css::container::NoSuchElementException, - css::uno::RuntimeException ) -{ - if (!sCommand.getLength()) - throw css::lang::IllegalArgumentException( - ::rtl::OUString::createFromAscii("Empty command strings are not allowed here."), - static_cast< ::cppu::OWeakObject* >(this), - 0); - - // SAFE -> ---------------------------------- - WriteGuard aWriteLock(m_aLock); - - AcceleratorCache& rPrimaryCache = impl_getCFG(sal_True, sal_True ); - AcceleratorCache& rSecondaryCache = impl_getCFG(sal_False, sal_True); - - if (!rPrimaryCache.hasCommand(sCommand) && !rSecondaryCache.hasCommand(sCommand)) - throw css::container::NoSuchElementException( - ::rtl::OUString::createFromAscii("Command does not exists inside this container."), - static_cast< ::cppu::OWeakObject* >(this)); - - if (rPrimaryCache.hasCommand(sCommand)) - rPrimaryCache.removeCommand(sCommand); - if (rSecondaryCache.hasCommand(sCommand)) - rSecondaryCache.removeCommand(sCommand); - - aWriteLock.unlock(); - // <- SAFE ---------------------------------- -} - -//----------------------------------------------- -void SAL_CALL XCUBasedAcceleratorConfiguration::reload() - throw(css::uno::Exception , - css::uno::RuntimeException) -{ - RTL_LOGFILE_PRODUCT_CONTEXT( aLog1, " start XCUBasedAcceleratorConfiguration::reload()" ); - - // SAFE -> ---------------------------------- - WriteGuard aWriteLock(m_aLock); - - sal_Bool bPreferred; - css::uno::Reference< css::container::XNameAccess > xAccess; - - bPreferred = sal_True; - m_aPrimaryReadCache = AcceleratorCache(); - if (m_pPrimaryWriteCache) - { - // be aware of reentrance problems - use temp variable for calling delete ... :-) - AcceleratorCache* pTemp = m_pPrimaryWriteCache; - m_pPrimaryWriteCache = 0; - delete pTemp; - } - m_xCfg->getByName(CFG_ENTRY_PRIMARY) >>= xAccess; - impl_ts_load(bPreferred, xAccess); // load the preferred keys - - bPreferred = sal_False; - m_aSecondaryReadCache = AcceleratorCache(); - if (m_pSecondaryWriteCache) - { - // be aware of reentrance problems - use temp variable for calling delete ... :-) - AcceleratorCache* pTemp = m_pSecondaryWriteCache; - m_pSecondaryWriteCache = 0; - delete pTemp; - } - m_xCfg->getByName(CFG_ENTRY_SECONDARY) >>= xAccess; - impl_ts_load(bPreferred, xAccess); // load the secondary keys - - aWriteLock.unlock(); - // <- SAFE ---------------------------------- - - RTL_LOGFILE_PRODUCT_CONTEXT( aLog2, " end XCUBasedAcceleratorConfiguration::reload()" ); -} - -//----------------------------------------------- -void SAL_CALL XCUBasedAcceleratorConfiguration::store() - throw(css::uno::Exception , - css::uno::RuntimeException) -{ - RTL_LOGFILE_PRODUCT_CONTEXT( aLog1, " start XCUBasedAcceleratorConfiguration::store()" ); - - // SAFE -> ---------------------------------- - ReadGuard aReadLock(m_aLock); - - sal_Bool bPreferred; - css::uno::Reference< css::container::XNameAccess > xAccess; - - bPreferred = sal_True; - m_xCfg->getByName(CFG_ENTRY_PRIMARY) >>= xAccess; - impl_ts_save(bPreferred, xAccess); - - bPreferred = sal_False; - m_xCfg->getByName(CFG_ENTRY_SECONDARY) >>= xAccess; - impl_ts_save(bPreferred, xAccess); - - aReadLock.unlock(); - // <- SAFE ---------------------------------- - - RTL_LOGFILE_PRODUCT_CONTEXT( aLog2, " end XCUBasedAcceleratorConfiguration::store()" ); -} - -//----------------------------------------------- -void SAL_CALL XCUBasedAcceleratorConfiguration::storeToStorage(const css::uno::Reference< css::embed::XStorage >& /*xStorage*/) - throw(css::uno::Exception , - css::uno::RuntimeException) -{ - // todo implement me - // use m_aCache + old AcceleratorXMLWriter to store data directly on storage given as parameter ... -} - -//----------------------------------------------- -::sal_Bool SAL_CALL XCUBasedAcceleratorConfiguration::isModified() - throw(css::uno::RuntimeException) -{ - return sal_False; -} - -//----------------------------------------------- -::sal_Bool SAL_CALL XCUBasedAcceleratorConfiguration::isReadOnly() - throw(css::uno::RuntimeException) -{ - return sal_False; -} - -//----------------------------------------------- -void SAL_CALL XCUBasedAcceleratorConfiguration::setStorage(const css::uno::Reference< css::embed::XStorage >& /*xStorage*/) - throw(css::uno::RuntimeException) -{ - LOG_WARNING("XCUBasedAcceleratorConfiguration::setStorage()", "TODO implement this HACK .-)") -} - -//----------------------------------------------- -::sal_Bool SAL_CALL XCUBasedAcceleratorConfiguration::hasStorage() - throw(css::uno::RuntimeException) -{ - LOG_WARNING("XCUBasedAcceleratorConfiguration::hasStorage()", "TODO implement this HACK .-)") - return sal_False; -} - -//----------------------------------------------- -void SAL_CALL XCUBasedAcceleratorConfiguration::addConfigurationListener(const css::uno::Reference< css::ui::XUIConfigurationListener >& /*xListener*/) - throw(css::uno::RuntimeException) -{ - LOG_WARNING("XCUBasedAcceleratorConfiguration::addConfigurationListener()", "TODO implement me") -} - -//----------------------------------------------- -void SAL_CALL XCUBasedAcceleratorConfiguration::removeConfigurationListener(const css::uno::Reference< css::ui::XUIConfigurationListener >& /*xListener*/) - throw(css::uno::RuntimeException) -{ - LOG_WARNING("XCUBasedAcceleratorConfiguration::removeConfigurationListener()", "TODO implement me") -} - -//----------------------------------------------- -void SAL_CALL XCUBasedAcceleratorConfiguration::reset() - throw(css::uno::RuntimeException) -{ - css::uno::Reference< css::container::XNamed > xNamed(m_xCfg, css::uno::UNO_QUERY); - ::rtl::OUString sConfig = xNamed->getName(); - if ( sConfig.equalsAscii("Global") ) - { - m_xCfg = css::uno::Reference< css::container::XNameAccess > ( - ::comphelper::ConfigurationHelper::openConfig( m_xSMGR, CFG_ENTRY_GLOBAL, ::comphelper::ConfigurationHelper::E_ALL_LOCALES ), - css::uno::UNO_QUERY ); - XCUBasedAcceleratorConfiguration::reload(); - } - else if ( sConfig.equalsAscii("Modules") ) - { - m_xCfg = css::uno::Reference< css::container::XNameAccess > ( - ::comphelper::ConfigurationHelper::openConfig( m_xSMGR, CFG_ENTRY_MODULES, ::comphelper::ConfigurationHelper::E_ALL_LOCALES ), - css::uno::UNO_QUERY ); - XCUBasedAcceleratorConfiguration::reload(); - } -} - -//----------------------------------------------- -void SAL_CALL XCUBasedAcceleratorConfiguration::addResetListener(const css::uno::Reference< css::form::XResetListener >& /*xListener*/) - throw(css::uno::RuntimeException) -{ - LOG_WARNING("XCUBasedAcceleratorConfiguration::addResetListener()", "TODO implement me") -} - -//----------------------------------------------- -void SAL_CALL XCUBasedAcceleratorConfiguration::removeResetListener(const css::uno::Reference< css::form::XResetListener >& /*xListener*/) - throw(css::uno::RuntimeException) -{ - LOG_WARNING("XCUBasedAcceleratorConfiguration::removeResetListener()", "TODO implement me") -} - -//----------------------------------------------- -void SAL_CALL XCUBasedAcceleratorConfiguration::changesOccurred(const css::util::ChangesEvent& aEvent) - throw(css::uno::RuntimeException) -{ - RTL_LOGFILE_PRODUCT_CONTEXT( aLog1, " start XCUBasedAcceleratorConfiguration::changesOccurred()" ); - - css::uno::Reference< css::container::XHierarchicalNameAccess > xHAccess; - aEvent.Base >>= xHAccess; - if (! xHAccess.is ()) - return; - - const sal_Int32 c = aEvent.Changes.getLength(); - sal_Int32 i = 0; - - for (i=0; i']/Key['']/Command[]" will - // be interesting for use. Sometimes short path values are given also by the broadcaster ... but they must be ignored :-) - // So we try to split the path into 3 parts (module isnt important here, because we already know it ... because - // these instance is bound to a specific module configuration ... or it''s the global configuration where no module is given at all. - - ::rtl::OUString sOrgPath ; - ::rtl::OUString sPath ; - ::rtl::OUString sKey; - - aChange.Accessor >>= sOrgPath; - sPath = sOrgPath; - ::rtl::OUString sPrimarySecondary = ::utl::extractFirstFromConfigurationPath(sPath); - sPath = ::utl::dropPrefixFromConfigurationPath(sPath, sPrimarySecondary); - - ::rtl::OUString sGlobalModules = ::utl::extractFirstFromConfigurationPath(sPath); - sPath = ::utl::dropPrefixFromConfigurationPath(sPath, sGlobalModules); - - if ( sGlobalModules.equals(CFG_ENTRY_GLOBAL) ) - { - ::rtl::OUString sModule; - sKey = ::utl::extractFirstFromConfigurationPath(sPath); - reloadChanged(sPrimarySecondary, sGlobalModules, sModule, sKey); - } - else if ( sGlobalModules.equals(CFG_ENTRY_MODULES) ) - { - ::rtl::OUString sModule = ::utl::extractFirstFromConfigurationPath(sPath); - ::rtl::OUString sDropModule = ::rtl::OUString::createFromAscii("Module['") + sModule + ::rtl::OUString::createFromAscii("']"); - sPath = ::utl::dropPrefixFromConfigurationPath(sPath, sDropModule); - sKey = ::utl::extractFirstFromConfigurationPath(sPath); - reloadChanged(sPrimarySecondary, sGlobalModules, sModule, sKey); - } - } - - RTL_LOGFILE_PRODUCT_CONTEXT( aLog2, " end XCUBasedAcceleratorConfiguration::changesOccurred()" ); -} - -//----------------------------------------------- -void SAL_CALL XCUBasedAcceleratorConfiguration::disposing(const css::lang::EventObject& /*aSource*/) - throw(css::uno::RuntimeException) -{ -} - -//----------------------------------------------- -void XCUBasedAcceleratorConfiguration::impl_ts_load( sal_Bool bPreferred, const css::uno::Reference< css::container::XNameAccess >& xCfg ) -{ - AcceleratorCache aReadCache = AcceleratorCache(); - css::uno::Reference< css::container::XNameAccess > xAccess; - if (m_sGlobalOrModules.equalsAscii("Global")) - xCfg->getByName(CFG_ENTRY_GLOBAL) >>= xAccess; - else if (m_sGlobalOrModules.equalsAscii("Modules")) - { - css::uno::Reference< css::container::XNameAccess > xModules; - xCfg->getByName(CFG_ENTRY_MODULES) >>= xModules; - xModules->getByName(m_sModuleCFG) >>= xAccess; - } - - css::uno::Reference< css::container::XNameAccess > xKey; - css::uno::Reference< css::container::XNameAccess > xCommand; - if (xAccess.is()) - { - css::uno::Sequence< ::rtl::OUString > lKeys = xAccess->getElementNames(); - sal_Int32 nKeys = lKeys.getLength(); - for ( sal_Int32 i=0; igetByName(sKey) >>= xKey; - xKey->getByName(CFG_PROP_COMMAND) >>= xCommand; - - css::uno::Sequence< ::rtl::OUString > lLocales = xCommand->getElementNames(); - sal_Int32 nLocales = lLocales.getLength(); - ::std::vector< ::rtl::OUString > aLocales; - for ( sal_Int32 j=0; j::const_iterator pFound; - for ( pFound = aLocales.begin(); pFound != aLocales.end(); ++pFound ) - { - if ( *pFound == impl_ts_getLocale().toISO() ) - break; - } - - if ( pFound == aLocales.end() ) - { - ::rtl::OUString sDefaultLocale = ::rtl::OUString::createFromAscii("en-US"); - for ( pFound = aLocales.begin(); pFound != aLocales.end(); ++pFound ) - { - if ( *pFound == sDefaultLocale ) - break; - } - - if ( pFound == aLocales.end() ) - continue; - } - - ::rtl::OUString sLocale = *pFound; - ::rtl::OUString sCommand; - xCommand->getByName(sLocale) >>= sCommand; - if (sCommand.getLength()<1) - continue; - - KeyMapping aKeyMapping; - css::awt::KeyEvent aKeyEvent; - - sal_Int32 nIndex = 0; - ::rtl::OUString sKeyCommand = sKey.getToken(0, '_', nIndex); - ::rtl::OUString sPrefix = ::rtl::OUString::createFromAscii("KEY_"); - aKeyEvent.KeyCode = aKeyMapping.mapIdentifierToCode(sPrefix + sKeyCommand); - - css::uno::Sequence< ::rtl::OUString > sToken(4); - const sal_Int32 nToken = 4; - sal_Bool bValid = sal_True; - sal_Int32 k; - for (k=0; k& /*xCfg*/) -{ - if (bPreferred) - { - AcceleratorCache::TKeyList::const_iterator pIt; - AcceleratorCache::TKeyList lPrimaryReadKeys = m_aPrimaryReadCache.getAllKeys(); - AcceleratorCache::TKeyList lPrimaryWriteKeys = m_pPrimaryWriteCache->getAllKeys(); - - for ( pIt = lPrimaryReadKeys.begin(); pIt != lPrimaryReadKeys.end(); ++pIt ) - { - if (!m_pPrimaryWriteCache->hasKey(*pIt)) - removeKeyFromConfiguration(*pIt, sal_True); - } - - for ( pIt = lPrimaryWriteKeys.begin(); pIt != lPrimaryWriteKeys.end(); ++pIt ) - { - ::rtl::OUString sCommand = m_pPrimaryWriteCache->getCommandByKey(*pIt); - if (!m_aPrimaryReadCache.hasKey(*pIt)) - { - insertKeyToConfiguration(*pIt, sCommand, sal_True); - } - else - { - ::rtl::OUString sReadCommand = m_aPrimaryReadCache.getCommandByKey(*pIt); - if (sReadCommand != sCommand) - insertKeyToConfiguration(*pIt, sCommand, sal_True); - } - } - - // take over all changes into the original container - // SAFE -> ---------------------------------- - WriteGuard aWriteLock(m_aLock); - - if (m_pPrimaryWriteCache) - { - m_aPrimaryReadCache.takeOver(*m_pPrimaryWriteCache); - AcceleratorCache* pTemp = m_pPrimaryWriteCache; - m_pPrimaryWriteCache = 0; - delete pTemp; - } - - aWriteLock.unlock(); - // <- SAFE ---------------------------------- - } - - else - { - AcceleratorCache::TKeyList::const_iterator pIt; - AcceleratorCache::TKeyList lSecondaryReadKeys = m_aSecondaryReadCache.getAllKeys(); - AcceleratorCache::TKeyList lSecondaryWriteKeys = m_pSecondaryWriteCache->getAllKeys(); - - for ( pIt = lSecondaryReadKeys.begin(); pIt != lSecondaryReadKeys.end(); ++pIt) - { - if (!m_pSecondaryWriteCache->hasKey(*pIt)) - removeKeyFromConfiguration(*pIt, sal_False); - } - - - for ( pIt = lSecondaryWriteKeys.begin(); pIt != lSecondaryWriteKeys.end(); ++pIt ) - { - ::rtl::OUString sCommand = m_pSecondaryWriteCache->getCommandByKey(*pIt); - if (!m_aSecondaryReadCache.hasKey(*pIt)) - { - insertKeyToConfiguration(*pIt, sCommand, sal_False); - } - else - { - ::rtl::OUString sReadCommand = m_aSecondaryReadCache.getCommandByKey(*pIt); - if (sReadCommand != sCommand) - insertKeyToConfiguration(*pIt, sCommand, sal_False); - } - } - - // take over all changes into the original container - // SAFE -> ---------------------------------- - WriteGuard aWriteLock(m_aLock); - - if (m_pSecondaryWriteCache) - { - m_aSecondaryReadCache.takeOver(*m_pSecondaryWriteCache); - AcceleratorCache* pTemp = m_pSecondaryWriteCache; - m_pSecondaryWriteCache = 0; - delete pTemp; - } - - aWriteLock.unlock(); - // <- SAFE ---------------------------------- - } - - ::comphelper::ConfigurationHelper::flush(m_xCfg); -} - -//----------------------------------------------- -void XCUBasedAcceleratorConfiguration::insertKeyToConfiguration( const css::awt::KeyEvent& aKeyEvent, const ::rtl::OUString& sCommand, const sal_Bool bPreferred ) -{ - css::uno::Reference< css::container::XNameAccess > xAccess; - css::uno::Reference< css::container::XNameContainer > xContainer; - css::uno::Reference< css::lang::XSingleServiceFactory > xFac; - css::uno::Reference< css::uno::XInterface > xInst; - - if ( bPreferred ) - m_xCfg->getByName(CFG_ENTRY_PRIMARY) >>= xAccess; - else - m_xCfg->getByName(CFG_ENTRY_SECONDARY) >>= xAccess; - - if ( m_sGlobalOrModules.equals(CFG_ENTRY_GLOBAL) ) - xAccess->getByName(CFG_ENTRY_GLOBAL) >>= xContainer; - else if ( m_sGlobalOrModules.equals(CFG_ENTRY_MODULES) ) - { - css::uno::Reference< css::container::XNameContainer > xModules; - xAccess->getByName(CFG_ENTRY_MODULES) >>= xModules; - if ( !xModules->hasByName(m_sModuleCFG) ) - { - xFac = css::uno::Reference< css::lang::XSingleServiceFactory >(xModules, css::uno::UNO_QUERY); - xInst = xFac->createInstance(); - xModules->insertByName(m_sModuleCFG, css::uno::makeAny(xInst)); - } - xModules->getByName(m_sModuleCFG) >>= xContainer; - } - - KeyMapping aKeyMapping; - const sal_Int32 nBeginIndex = 4; // "KEY_" is the prefix of a identifier... - ::rtl::OUString sKey = (aKeyMapping.mapCodeToIdentifier(aKeyEvent.KeyCode)).copy(nBeginIndex); - - if ( (aKeyEvent.Modifiers & css::awt::KeyModifier::SHIFT) == css::awt::KeyModifier::SHIFT ) - sKey += ::rtl::OUString::createFromAscii("_SHIFT"); - if ( (aKeyEvent.Modifiers & css::awt::KeyModifier::MOD1 ) == css::awt::KeyModifier::MOD1 ) - sKey += ::rtl::OUString::createFromAscii("_MOD1"); - if ( (aKeyEvent.Modifiers & css::awt::KeyModifier::MOD2 ) == css::awt::KeyModifier::MOD2 ) - sKey += ::rtl::OUString::createFromAscii("_MOD2"); - - css::uno::Reference< css::container::XNameAccess > xKey; - css::uno::Reference< css::container::XNameContainer > xCommand; - if ( !xContainer->hasByName(sKey) ) - { - xFac = css::uno::Reference< css::lang::XSingleServiceFactory >(xContainer, css::uno::UNO_QUERY); - xInst = xFac->createInstance(); - xContainer->insertByName(sKey, css::uno::makeAny(xInst)); - } - xContainer->getByName(sKey) >>= xKey; - - xKey->getByName(CFG_PROP_COMMAND) >>= xCommand; - ::rtl::OUString sLocale = impl_ts_getLocale().toISO(); - if ( !xCommand->hasByName(sLocale) ) - xCommand->insertByName(sLocale, css::uno::makeAny(sCommand)); - else - xCommand->replaceByName(sLocale, css::uno::makeAny(sCommand)); -} - -//----------------------------------------------- -void XCUBasedAcceleratorConfiguration::removeKeyFromConfiguration( const css::awt::KeyEvent& aKeyEvent, const sal_Bool bPreferred ) -{ - css::uno::Reference< css::container::XNameAccess > xAccess; - css::uno::Reference< css::container::XNameContainer > xContainer; - - if ( bPreferred ) - m_xCfg->getByName(CFG_ENTRY_PRIMARY) >>= xAccess; - else - m_xCfg->getByName(CFG_ENTRY_SECONDARY) >>= xAccess; - - if ( m_sGlobalOrModules.equals(CFG_ENTRY_GLOBAL) ) - xAccess->getByName(CFG_ENTRY_GLOBAL) >>= xContainer; - else if ( m_sGlobalOrModules.equals(CFG_ENTRY_MODULES) ) - { - css::uno::Reference< css::container::XNameAccess > xModules; - xAccess->getByName(CFG_ENTRY_MODULES) >>= xModules; - if ( !xModules->hasByName(m_sModuleCFG) ) - return; - xModules->getByName(m_sModuleCFG) >>= xContainer; - } - - KeyMapping aKeyMapping; - const sal_Int32 nBeginIndex = 4; // "KEY_" is the prefix of a identifier... - ::rtl::OUString sKey = (aKeyMapping.mapCodeToIdentifier(aKeyEvent.KeyCode)).copy(nBeginIndex); - - if ( (aKeyEvent.Modifiers & css::awt::KeyModifier::SHIFT) == css::awt::KeyModifier::SHIFT ) - sKey += ::rtl::OUString::createFromAscii("_SHIFT"); - if ( (aKeyEvent.Modifiers & css::awt::KeyModifier::MOD1 ) == css::awt::KeyModifier::MOD1 ) - sKey += ::rtl::OUString::createFromAscii("_MOD1"); - if ( (aKeyEvent.Modifiers & css::awt::KeyModifier::MOD2 ) == css::awt::KeyModifier::MOD2 ) - sKey += ::rtl::OUString::createFromAscii("_MOD2"); - - xContainer->removeByName(sKey); -} - -//----------------------------------------------- -void XCUBasedAcceleratorConfiguration::reloadChanged( const ::rtl::OUString& sPrimarySecondary, const ::rtl::OUString& sGlobalModules, const ::rtl::OUString& sModule, const ::rtl::OUString& sKey ) -{ - css::uno::Reference< css::container::XNameAccess > xAccess; - css::uno::Reference< css::container::XNameContainer > xContainer; - - m_xCfg->getByName(sPrimarySecondary) >>= xAccess; - if ( sGlobalModules.equals(CFG_ENTRY_GLOBAL) ) - xAccess->getByName(CFG_ENTRY_GLOBAL) >>= xContainer; - else - { - css::uno::Reference< css::container::XNameAccess > xModules; - xAccess->getByName(CFG_ENTRY_MODULES) >>= xModules; - if ( !xModules->hasByName(sModule) ) - return; - xModules->getByName(sModule) >>= xContainer; - } - - KeyMapping aKeyMapping; - css::awt::KeyEvent aKeyEvent; - ::rtl::OUString sKeyIdentifier; - - sal_Int32 nIndex = 0; - sKeyIdentifier = sKey.getToken(0, '_', nIndex); - aKeyEvent.KeyCode = aKeyMapping.mapIdentifierToCode(::rtl::OUString::createFromAscii("KEY_")+sKeyIdentifier); - - css::uno::Sequence< ::rtl::OUString > sToken(3); - const sal_Int32 nToken = 3; - for (sal_Int32 i=0; i xKey; - css::uno::Reference< css::container::XNameAccess > xCommand; - ::rtl::OUString sCommand; - - if (xContainer->hasByName(sKey)) - { - ::rtl::OUString sLocale = impl_ts_getLocale().toISO(); - xContainer->getByName(sKey) >>= xKey; - xKey->getByName(CFG_PROP_COMMAND) >>= xCommand; - xCommand->getByName(sLocale) >>= sCommand; - } - - if (sPrimarySecondary.equals(CFG_ENTRY_PRIMARY)) - { - if (sCommand.getLength() ==0) - m_aPrimaryReadCache.removeKey(aKeyEvent); - else - m_aPrimaryReadCache.setKeyCommandPair(aKeyEvent, sCommand); - } - else if (sPrimarySecondary.equals(CFG_ENTRY_SECONDARY)) - { - if (sCommand.getLength() ==0) - m_aSecondaryReadCache.removeKey(aKeyEvent); - else - m_aSecondaryReadCache.setKeyCommandPair(aKeyEvent, sCommand); - } -} - -//----------------------------------------------- -AcceleratorCache& XCUBasedAcceleratorConfiguration::impl_getCFG(sal_Bool bPreferred, sal_Bool bWriteAccessRequested) -{ - // SAFE -> ---------------------------------- - WriteGuard aWriteLock(m_aLock); - - if (bPreferred) - { - //create copy of our readonly-cache, if write access is forced ... but - //not still possible! - if ( - (bWriteAccessRequested) && - (!m_pPrimaryWriteCache ) - ) - { - m_pPrimaryWriteCache = new AcceleratorCache(m_aPrimaryReadCache); - } - - // in case, we have a writeable cache, we use it for reading too! - // Otherwhise the API user cant find its own changes ... - if (m_pPrimaryWriteCache) - return *m_pPrimaryWriteCache; - else - return m_aPrimaryReadCache; - } - - else - { - //create copy of our readonly-cache, if write access is forced ... but - //not still possible! - if ( - (bWriteAccessRequested) && - (!m_pSecondaryWriteCache ) - ) - { - m_pSecondaryWriteCache = new AcceleratorCache(m_aSecondaryReadCache); - } - - // in case, we have a writeable cache, we use it for reading too! - // Otherwhise the API user cant find its own changes ... - if (m_pSecondaryWriteCache) - return *m_pSecondaryWriteCache; - else - return m_aSecondaryReadCache; - } - - // <- SAFE ---------------------------------- -} - -//----------------------------------------------- -::comphelper::Locale XCUBasedAcceleratorConfiguration::impl_ts_getLocale() const -{ - static ::rtl::OUString LOCALE_PACKAGE = ::rtl::OUString::createFromAscii("/org.openoffice.Setup"); - static ::rtl::OUString LOCALE_PATH = ::rtl::OUString::createFromAscii("L10N" ); - static ::rtl::OUString LOCALE_KEY = ::rtl::OUString::createFromAscii("ooLocale" ); - - // SAFE -> ---------------------------------- - ReadGuard aReadLock(m_aLock); - css::uno::Reference< css::lang::XMultiServiceFactory > xSMGR = m_xSMGR; - aReadLock.unlock(); - // <- SAFE ---------------------------------- - - css::uno::Reference< css::uno::XInterface > xCFG = fpc::ConfigurationHelper::openConfig(xSMGR, LOCALE_PACKAGE, LOCALE_PATH, fpc::ConfigurationHelper::E_READONLY); - css::uno::Reference< css::beans::XPropertySet > xProp (xCFG, css::uno::UNO_QUERY_THROW); - ::rtl::OUString sISOLocale; - xProp->getPropertyValue(LOCALE_KEY) >>= sISOLocale; - - if (!sISOLocale.getLength()) - return ::comphelper::Locale::EN_US(); - return ::comphelper::Locale(sISOLocale); -} - -} // namespace framework +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: acceleratorconfiguration.cxx,v $ + * $Revision: 1.7.204.12 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_framework.hxx" +#include + +//_______________________________________________ +// own includes +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include + +//_______________________________________________ +// interface includes +#include +#include +#include +#include +#include +#include +#include + +//_______________________________________________ +// other includes +#include + +#ifndef __FRAMEWORK_ACCELERATORS_KEYMAPPING_HXX_ +#include +#endif + +#ifndef _COM_SUN_STAR_CONTAINER_XNAMED_HPP_ +#include +#endif + +#ifndef _COM_SUN_STAR_CONTAINER_XNAMECONTAINER_HPP_ +#include +#endif + +#ifndef __COM_SUN_STAR_AWT_KEYEVENT_HPP_ +#include +#endif + +#ifndef __COM_SUN_STAR_AWT_KEYMODIFIER_HPP_ +#include +#endif + +#ifndef _COM_SUN_STAR_LANG_XSINGLESERVICEFACTORY_HPP_ +#include +#endif + +#ifndef _COM_SUN_STAR_UTIL_XCHANGESNOTIFIER_HPP_ +#include +#endif + +#ifndef _COMPHELPER_CONFIGURATIONHELPER_HXX_ +#include +#endif + +#ifndef UNOTOOLS_CONFIGPATHES_HXX_INCLUDED +#include +#endif + +#ifndef _RTL_LOGFILE_HXX_ +#include +#endif + +#include + +//_______________________________________________ +// const + +namespace framework +{ + +#ifdef fpc + #error "Who exports this define? I use it as namespace alias ..." +#else + namespace fpc = ::framework::pattern::configuration; +#endif + +//----------------------------------------------- +// XInterface, XTypeProvider +DEFINE_XINTERFACE_6(XMLBasedAcceleratorConfiguration , + OWeakObject , + DIRECT_INTERFACE(css::lang::XTypeProvider ), + DIRECT_INTERFACE(css::ui::XAcceleratorConfiguration ), + DIRECT_INTERFACE(css::form::XReset ), + DIRECT_INTERFACE(css::ui::XUIConfigurationPersistence), + DIRECT_INTERFACE(css::ui::XUIConfigurationStorage ), + DIRECT_INTERFACE(css::ui::XUIConfiguration )) + +DEFINE_XTYPEPROVIDER_6(XMLBasedAcceleratorConfiguration , + css::lang::XTypeProvider , + css::ui::XAcceleratorConfiguration , + css::form::XReset , + css::ui::XUIConfigurationPersistence, + css::ui::XUIConfigurationStorage , + css::ui::XUIConfiguration ) + +//----------------------------------------------- +XMLBasedAcceleratorConfiguration::XMLBasedAcceleratorConfiguration(const css::uno::Reference< css::lang::XMultiServiceFactory > xSMGR) + : ThreadHelpBase (&Application::GetSolarMutex()) + , m_xSMGR (xSMGR ) + , m_aPresetHandler(xSMGR ) + , m_pWriteCache (0 ) +{ +} + +//----------------------------------------------- +XMLBasedAcceleratorConfiguration::~XMLBasedAcceleratorConfiguration() +{ + LOG_ASSERT(!m_pWriteCache, "XMLBasedAcceleratorConfiguration::~XMLBasedAcceleratorConfiguration()\nChanges not flushed. Ignore it ...") +} + +//----------------------------------------------- +css::uno::Sequence< css::awt::KeyEvent > SAL_CALL XMLBasedAcceleratorConfiguration::getAllKeyEvents() + throw(css::uno::RuntimeException) +{ + // SAFE -> ---------------------------------- + ReadGuard aReadLock(m_aLock); + + AcceleratorCache& rCache = impl_getCFG(); + AcceleratorCache::TKeyList lKeys = rCache.getAllKeys(); + return lKeys.getAsConstList(); + + // <- SAFE ---------------------------------- +} + +//----------------------------------------------- +::rtl::OUString SAL_CALL XMLBasedAcceleratorConfiguration::getCommandByKeyEvent(const css::awt::KeyEvent& aKeyEvent) + throw(css::container::NoSuchElementException, + css::uno::RuntimeException ) +{ + // SAFE -> ---------------------------------- + ReadGuard aReadLock(m_aLock); + + AcceleratorCache& rCache = impl_getCFG(); + if (!rCache.hasKey(aKeyEvent)) + throw css::container::NoSuchElementException( + ::rtl::OUString(), + static_cast< ::cppu::OWeakObject* >(this)); + return rCache.getCommandByKey(aKeyEvent); + + // <- SAFE ---------------------------------- +} + +//----------------------------------------------- +void SAL_CALL XMLBasedAcceleratorConfiguration::setKeyEvent(const css::awt::KeyEvent& aKeyEvent, + const ::rtl::OUString& sCommand ) + throw(css::lang::IllegalArgumentException, + css::uno::RuntimeException ) +{ + if ( + (aKeyEvent.KeyCode == 0) && + (aKeyEvent.KeyChar == 0) && + (aKeyEvent.KeyFunc == 0) && + (aKeyEvent.Modifiers == 0) + ) + throw css::lang::IllegalArgumentException( + ::rtl::OUString::createFromAscii("Such key event seams not to be supported by any operating system."), + static_cast< ::cppu::OWeakObject* >(this), + 0); + + if (!sCommand.getLength()) + throw css::lang::IllegalArgumentException( + ::rtl::OUString::createFromAscii("Empty command strings are not allowed here."), + static_cast< ::cppu::OWeakObject* >(this), + 1); + + // SAFE -> ---------------------------------- + WriteGuard aWriteLock(m_aLock); + + AcceleratorCache& rCache = impl_getCFG(sal_True); // TRUE => force getting of a writeable cache! + rCache.setKeyCommandPair(aKeyEvent, sCommand); + + aWriteLock.unlock(); + // <- SAFE ---------------------------------- +} + +//----------------------------------------------- +void SAL_CALL XMLBasedAcceleratorConfiguration::removeKeyEvent(const css::awt::KeyEvent& aKeyEvent) +throw(css::container::NoSuchElementException, + css::uno::RuntimeException ) +{ + // SAFE -> ---------------------------------- + WriteGuard aWriteLock(m_aLock); + + AcceleratorCache& rCache = impl_getCFG(sal_True); // true => force using of a writeable cache + if (!rCache.hasKey(aKeyEvent)) + throw css::container::NoSuchElementException( + ::rtl::OUString(), + static_cast< ::cppu::OWeakObject* >(this)); + rCache.removeKey(aKeyEvent); + + // <- SAFE ---------------------------------- +} + +//----------------------------------------------- +css::uno::Sequence< css::awt::KeyEvent > SAL_CALL XMLBasedAcceleratorConfiguration::getKeyEventsByCommand(const ::rtl::OUString& sCommand) + throw(css::lang::IllegalArgumentException , + css::container::NoSuchElementException, + css::uno::RuntimeException ) +{ + if (!sCommand.getLength()) + throw css::lang::IllegalArgumentException( + ::rtl::OUString::createFromAscii("Empty command strings are not allowed here."), + static_cast< ::cppu::OWeakObject* >(this), + 1); + + // SAFE -> ---------------------------------- + ReadGuard aReadLock(m_aLock); + + AcceleratorCache& rCache = impl_getCFG(); + if (!rCache.hasCommand(sCommand)) + throw css::container::NoSuchElementException( + ::rtl::OUString(), + static_cast< ::cppu::OWeakObject* >(this)); + + AcceleratorCache::TKeyList lKeys = rCache.getKeysByCommand(sCommand); + return lKeys.getAsConstList(); + + // <- SAFE ---------------------------------- +} + +//----------------------------------------------- +css::uno::Sequence< css::uno::Any > SAL_CALL XMLBasedAcceleratorConfiguration::getPreferredKeyEventsForCommandList(const css::uno::Sequence< ::rtl::OUString >& lCommandList) + throw(css::lang::IllegalArgumentException , + css::uno::RuntimeException ) +{ + // SAFE -> ---------------------------------- + ReadGuard aReadLock(m_aLock); + + sal_Int32 i = 0; + sal_Int32 c = lCommandList.getLength(); + css::uno::Sequence< css::uno::Any > lPreferredOnes (c); // dont pack list! + AcceleratorCache& rCache = impl_getCFG(); + + for (i=0; i(this), + (sal_Int16)i); + + if (!rCache.hasCommand(rCommand)) + continue; + + AcceleratorCache::TKeyList lKeys = rCache.getKeysByCommand(rCommand); + if (lKeys.size()<1) + continue; + + css::uno::Any& rAny = lPreferredOnes[i]; + rAny <<= *(lKeys.begin()); + } + + aReadLock.unlock(); + // <- SAFE ---------------------------------- + + return lPreferredOnes; +} + +//----------------------------------------------- +void SAL_CALL XMLBasedAcceleratorConfiguration::removeCommandFromAllKeyEvents(const ::rtl::OUString& sCommand) + throw(css::lang::IllegalArgumentException , + css::container::NoSuchElementException, + css::uno::RuntimeException ) +{ + if (!sCommand.getLength()) + throw css::lang::IllegalArgumentException( + ::rtl::OUString::createFromAscii("Empty command strings are not allowed here."), + static_cast< ::cppu::OWeakObject* >(this), + 0); + + // SAFE -> ---------------------------------- + WriteGuard aWriteLock(m_aLock); + + AcceleratorCache& rCache = impl_getCFG(sal_True); // TRUE => force getting of a writeable cache! + if (!rCache.hasCommand(sCommand)) + throw css::container::NoSuchElementException( + ::rtl::OUString::createFromAscii("Command does not exists inside this container."), + static_cast< ::cppu::OWeakObject* >(this)); + rCache.removeCommand(sCommand); + + aWriteLock.unlock(); + // <- SAFE ---------------------------------- +} + +//----------------------------------------------- +void SAL_CALL XMLBasedAcceleratorConfiguration::reload() + throw(css::uno::Exception , + css::uno::RuntimeException) +{ + css::uno::Reference< css::io::XStream > xStreamNoLang; + + // SAFE -> ---------------------------------- + ReadGuard aReadLock(m_aLock); + css::uno::Reference< css::io::XStream > xStream = m_aPresetHandler.openTarget(PresetHandler::TARGET_CURRENT(), sal_True); // TRUE => open or create! + try + { + xStreamNoLang = m_aPresetHandler.openPreset(PresetHandler::PRESET_DEFAULT(), sal_True); + } + catch(const css::io::IOException&) {} // does not have to exist + aReadLock.unlock(); + // <- SAFE ---------------------------------- + + css::uno::Reference< css::io::XInputStream > xIn; + if (xStream.is()) + xIn = xStream->getInputStream(); + if (!xIn.is()) + throw css::io::IOException( + ::rtl::OUString::createFromAscii("Could not open accelerator configuration for reading."), + static_cast< ::cppu::OWeakObject* >(this)); + + // impl_ts_load() does not clear the cache + // SAFE -> ---------------------------------- + WriteGuard aWriteLock(m_aLock); + m_aReadCache = AcceleratorCache(); + aWriteLock.unlock(); + // <- SAFE ---------------------------------- + + impl_ts_load(xIn); + + // Load also the general language independent default accelerators + // (ignoring the already defined accelerators) + if (xStreamNoLang.is()) + { + xIn = xStreamNoLang->getInputStream(); + if (xIn.is()) + impl_ts_load(xIn); + } +} + +//----------------------------------------------- +void SAL_CALL XMLBasedAcceleratorConfiguration::store() + throw(css::uno::Exception , + css::uno::RuntimeException) +{ + // SAFE -> ---------------------------------- + ReadGuard aReadLock(m_aLock); + css::uno::Reference< css::io::XStream > xStream = m_aPresetHandler.openTarget(PresetHandler::TARGET_CURRENT(), sal_True); // TRUE => open or create! + aReadLock.unlock(); + // <- SAFE ---------------------------------- + + css::uno::Reference< css::io::XOutputStream > xOut; + if (xStream.is()) + xOut = xStream->getOutputStream(); + + if (!xOut.is()) + throw css::io::IOException( + ::rtl::OUString::createFromAscii("Could not open accelerator configuration for saving."), + static_cast< ::cppu::OWeakObject* >(this)); + + impl_ts_save(xOut); + + xOut.clear(); + xStream.clear(); + + m_aPresetHandler.commitUserChanges(); +} + +//----------------------------------------------- +void SAL_CALL XMLBasedAcceleratorConfiguration::storeToStorage(const css::uno::Reference< css::embed::XStorage >& xStorage) + throw(css::uno::Exception , + css::uno::RuntimeException) +{ + css::uno::Reference< css::io::XStream > xStream = StorageHolder::openSubStreamWithFallback( + xStorage, + PresetHandler::TARGET_CURRENT(), + css::embed::ElementModes::READWRITE, + sal_False); // False => no fallback from read/write to readonly! + css::uno::Reference< css::io::XOutputStream > xOut; + if (xStream.is()) + xOut = xStream->getOutputStream(); + + if (!xOut.is()) + throw css::io::IOException( + ::rtl::OUString::createFromAscii("Could not open accelerator configuration for saving."), + static_cast< ::cppu::OWeakObject* >(this)); + + impl_ts_save(xOut); + + // TODO inform listener about success, so it can flush the root and sub storage of this stream! +} + +//----------------------------------------------- +::sal_Bool SAL_CALL XMLBasedAcceleratorConfiguration::isModified() + throw(css::uno::RuntimeException) +{ + // SAFE -> ---------------------------------- + ReadGuard aReadLock(m_aLock); + return (m_pWriteCache != 0); + // <- SAFE ---------------------------------- +} + +//----------------------------------------------- +::sal_Bool SAL_CALL XMLBasedAcceleratorConfiguration::isReadOnly() + throw(css::uno::RuntimeException) +{ + // SAFE -> ---------------------------------- + ReadGuard aReadLock(m_aLock); + css::uno::Reference< css::io::XStream > xStream = m_aPresetHandler.openTarget(PresetHandler::TARGET_CURRENT(), sal_True); // TRUE => open or create! + aReadLock.unlock(); + // <- SAFE ---------------------------------- + + css::uno::Reference< css::io::XOutputStream > xOut; + if (xStream.is()) + xOut = xStream->getOutputStream(); + return !(xOut.is()); +} + +//----------------------------------------------- +void SAL_CALL XMLBasedAcceleratorConfiguration::setStorage(const css::uno::Reference< css::embed::XStorage >& /*xStorage*/) + throw(css::uno::RuntimeException) +{ + LOG_WARNING("XMLBasedAcceleratorConfiguration::setStorage()", "TODO implement this HACK .-)") +} + +//----------------------------------------------- +::sal_Bool SAL_CALL XMLBasedAcceleratorConfiguration::hasStorage() + throw(css::uno::RuntimeException) +{ + LOG_WARNING("XMLBasedAcceleratorConfiguration::hasStorage()", "TODO implement this HACK .-)") + return sal_False; +} + +//----------------------------------------------- +void SAL_CALL XMLBasedAcceleratorConfiguration::addConfigurationListener(const css::uno::Reference< css::ui::XUIConfigurationListener >& /*xListener*/) + throw(css::uno::RuntimeException) +{ + LOG_WARNING("XMLBasedAcceleratorConfiguration::addConfigurationListener()", "TODO implement me") +} + +//----------------------------------------------- +void SAL_CALL XMLBasedAcceleratorConfiguration::removeConfigurationListener(const css::uno::Reference< css::ui::XUIConfigurationListener >& /*xListener*/) + throw(css::uno::RuntimeException) +{ + LOG_WARNING("XMLBasedAcceleratorConfiguration::removeConfigurationListener()", "TODO implement me") +} + +//----------------------------------------------- +void SAL_CALL XMLBasedAcceleratorConfiguration::reset() +throw(css::uno::RuntimeException) +{ + // SAFE -> ---------------------------------- + WriteGuard aWriteLock(m_aLock); + m_aPresetHandler.copyPresetToTarget(PresetHandler::PRESET_DEFAULT(), PresetHandler::TARGET_CURRENT()); + aWriteLock.unlock(); + // <- SAFE ---------------------------------- + + reload(); +} + +//----------------------------------------------- +void SAL_CALL XMLBasedAcceleratorConfiguration::addResetListener(const css::uno::Reference< css::form::XResetListener >& /*xListener*/) + throw(css::uno::RuntimeException) +{ + LOG_WARNING("XMLBasedAcceleratorConfiguration::addResetListener()", "TODO implement me") +} + +//----------------------------------------------- +void SAL_CALL XMLBasedAcceleratorConfiguration::removeResetListener(const css::uno::Reference< css::form::XResetListener >& /*xListener*/) + throw(css::uno::RuntimeException) +{ + LOG_WARNING("XMLBasedAcceleratorConfiguration::removeResetListener()", "TODO implement me") +} + +//----------------------------------------------- +// IStorageListener +void XMLBasedAcceleratorConfiguration::changesOccured(const ::rtl::OUString& /*sPath*/) +{ + reload(); +} + +//----------------------------------------------- +void XMLBasedAcceleratorConfiguration::impl_ts_load(const css::uno::Reference< css::io::XInputStream >& xStream) +{ + // SAFE -> ---------------------------------- + WriteGuard aWriteLock(m_aLock); + + css::uno::Reference< css::lang::XMultiServiceFactory > xSMGR = m_xSMGR; + if (m_pWriteCache) + { + // be aware of reentrance problems - use temp variable for calling delete ... :-) + AcceleratorCache* pTemp = m_pWriteCache; + m_pWriteCache = 0; + delete pTemp; + } + + aWriteLock.unlock(); + // <- SAFE ---------------------------------- + + css::uno::Reference< css::io::XSeekable > xSeek(xStream, css::uno::UNO_QUERY); + if (xSeek.is()) + xSeek->seek(0); + + // add accelerators to the cache (the cache is not cleared) + // SAFE -> ---------------------------------- + aWriteLock.lock(); + + // create the parser queue + // Note: Use special filter object between parser and reader + // to get filtered xml with right namespaces ... + // Use further a temp cache for reading! + AcceleratorConfigurationReader* pReader = new AcceleratorConfigurationReader(m_aReadCache); + css::uno::Reference< css::xml::sax::XDocumentHandler > xReader (static_cast< ::cppu::OWeakObject* >(pReader), css::uno::UNO_QUERY_THROW); + SaxNamespaceFilter* pFilter = new SaxNamespaceFilter(xReader); + css::uno::Reference< css::xml::sax::XDocumentHandler > xFilter (static_cast< ::cppu::OWeakObject* >(pFilter), css::uno::UNO_QUERY_THROW); + + // connect parser, filter and stream + css::uno::Reference< css::xml::sax::XParser > xParser(xSMGR->createInstance(SERVICENAME_SAXPARSER), css::uno::UNO_QUERY_THROW); + xParser->setDocumentHandler(xFilter); + + css::xml::sax::InputSource aSource; + aSource.aInputStream = xStream; + + // TODO think about error handling + xParser->parseStream(aSource); + + aWriteLock.unlock(); + // <- SAFE ---------------------------------- +} + +//----------------------------------------------- +void XMLBasedAcceleratorConfiguration::impl_ts_save(const css::uno::Reference< css::io::XOutputStream >& xStream) +{ + // SAFE -> ---------------------------------- + ReadGuard aReadLock(m_aLock); + + AcceleratorCache aCache; + sal_Bool bChanged = (m_pWriteCache != 0); + if (bChanged) + aCache.takeOver(*m_pWriteCache); + else + aCache.takeOver(m_aReadCache); + css::uno::Reference< css::lang::XMultiServiceFactory > xSMGR = m_xSMGR; + + aReadLock.unlock(); + // <- SAFE ---------------------------------- + + css::uno::Reference< css::io::XTruncate > xClearable(xStream, css::uno::UNO_QUERY_THROW); + xClearable->truncate(); + + // TODO can be removed if seek(0) is done by truncate() automaticly! + css::uno::Reference< css::io::XSeekable > xSeek(xStream, css::uno::UNO_QUERY); + if (xSeek.is()) + xSeek->seek(0); + + // combine writer/cache/stream etcpp. + css::uno::Reference< css::xml::sax::XDocumentHandler > xWriter (xSMGR->createInstance(SERVICENAME_SAXWRITER), css::uno::UNO_QUERY_THROW); + css::uno::Reference< css::io::XActiveDataSource> xDataSource(xWriter , css::uno::UNO_QUERY_THROW); + xDataSource->setOutputStream(xStream); + + // write into the stream + AcceleratorConfigurationWriter aWriter(aCache, xWriter); + aWriter.flush(); + + // take over all changes into the original container + // SAFE -> ---------------------------------- + WriteGuard aWriteLock(m_aLock); + + // take over all changes into the readonly cache ... + // and forget the copy-on-write copied cache + if (bChanged) + { + m_aReadCache.takeOver(*m_pWriteCache); + // live with reentrance .-) + AcceleratorCache* pTemp = m_pWriteCache; + m_pWriteCache = 0; + delete pTemp; + } + + aWriteLock.unlock(); + // <- SAFE ---------------------------------- +} + +//----------------------------------------------- +AcceleratorCache& XMLBasedAcceleratorConfiguration::impl_getCFG(sal_Bool bWriteAccessRequested) +{ + // SAFE -> ---------------------------------- + WriteGuard aWriteLock(m_aLock); + + //create copy of our readonly-cache, if write access is forced ... but + //not still possible! + if ( + (bWriteAccessRequested) && + (!m_pWriteCache ) + ) + { + m_pWriteCache = new AcceleratorCache(m_aReadCache); + } + + // in case, we have a writeable cache, we use it for reading too! + // Otherwhise the API user cant find its own changes ... + if (m_pWriteCache) + return *m_pWriteCache; + else + return m_aReadCache; + // <- SAFE ---------------------------------- +} + +//----------------------------------------------- +::comphelper::Locale XMLBasedAcceleratorConfiguration::impl_ts_getLocale() const +{ + static ::rtl::OUString LOCALE_PACKAGE = ::rtl::OUString::createFromAscii("/org.openoffice.Setup"); + static ::rtl::OUString LOCALE_PATH = ::rtl::OUString::createFromAscii("L10N" ); + static ::rtl::OUString LOCALE_KEY = ::rtl::OUString::createFromAscii("ooLocale" ); + + // SAFE -> ---------------------------------- + ReadGuard aReadLock(m_aLock); + css::uno::Reference< css::lang::XMultiServiceFactory > xSMGR = m_xSMGR; + aReadLock.unlock(); + // <- SAFE ---------------------------------- + + css::uno::Reference< css::uno::XInterface > xCFG = fpc::ConfigurationHelper::openConfig(xSMGR, LOCALE_PACKAGE, LOCALE_PATH, fpc::ConfigurationHelper::E_READONLY); + css::uno::Reference< css::beans::XPropertySet > xProp (xCFG, css::uno::UNO_QUERY_THROW); + ::rtl::OUString sISOLocale; + xProp->getPropertyValue(LOCALE_KEY) >>= sISOLocale; + + if (!sISOLocale.getLength()) + return ::comphelper::Locale::EN_US(); + return ::comphelper::Locale(sISOLocale); +} + +/******************************************************************************* +* +* XCU based accelerator configuration +* +*******************************************************************************/ + +//----------------------------------------------- +// XInterface, XTypeProvider +DEFINE_XINTERFACE_7(XCUBasedAcceleratorConfiguration , + OWeakObject , + DIRECT_INTERFACE(css::lang::XTypeProvider ), + DIRECT_INTERFACE(css::ui::XAcceleratorConfiguration ), + DIRECT_INTERFACE(css::util::XChangesListener ), + DIRECT_INTERFACE(css::form::XReset ), + DIRECT_INTERFACE(css::ui::XUIConfigurationPersistence), + DIRECT_INTERFACE(css::ui::XUIConfigurationStorage ), + DIRECT_INTERFACE(css::ui::XUIConfiguration )) + + DEFINE_XTYPEPROVIDER_7(XCUBasedAcceleratorConfiguration , + css::lang::XTypeProvider , + css::ui::XAcceleratorConfiguration , + css::util::XChangesListener , + css::form::XReset , + css::ui::XUIConfigurationPersistence, + css::ui::XUIConfigurationStorage , + css::ui::XUIConfiguration ) + +//----------------------------------------------- +XCUBasedAcceleratorConfiguration::XCUBasedAcceleratorConfiguration(const css::uno::Reference< css::lang::XMultiServiceFactory > xSMGR) + : ThreadHelpBase (&Application::GetSolarMutex()) + , m_xSMGR (xSMGR ) + , m_pPrimaryWriteCache(0 ) + , m_pSecondaryWriteCache(0 ) +{ + m_xCfg = css::uno::Reference< css::container::XNameAccess > ( + ::comphelper::ConfigurationHelper::openConfig( m_xSMGR, CFG_ENTRY_ACCELERATORS, ::comphelper::ConfigurationHelper::E_ALL_LOCALES ), + css::uno::UNO_QUERY ); +} + +//----------------------------------------------- +XCUBasedAcceleratorConfiguration::~XCUBasedAcceleratorConfiguration() +{ +} + +//----------------------------------------------- +css::uno::Sequence< css::awt::KeyEvent > SAL_CALL XCUBasedAcceleratorConfiguration::getAllKeyEvents() + throw(css::uno::RuntimeException) +{ + // SAFE -> ---------------------------------- + ReadGuard aReadLock(m_aLock); + + AcceleratorCache::TKeyList lKeys = impl_getCFG(sal_True).getAllKeys(); //get keys from PrimaryKeys set + + AcceleratorCache::TKeyList lSecondaryKeys = impl_getCFG(sal_False).getAllKeys(); //get keys from SecondaryKeys set + AcceleratorCache::TKeyList::const_iterator pIt; + for ( pIt = lSecondaryKeys.begin(); pIt != lSecondaryKeys.end(); ++pIt ) + lKeys.push_back(*pIt); + + return lKeys.getAsConstList(); + + // <- SAFE ---------------------------------- +} + +//----------------------------------------------- +::rtl::OUString SAL_CALL XCUBasedAcceleratorConfiguration::getCommandByKeyEvent(const css::awt::KeyEvent& aKeyEvent) + throw(css::container::NoSuchElementException, + css::uno::RuntimeException ) +{ + // SAFE -> ---------------------------------- + ReadGuard aReadLock(m_aLock); + + AcceleratorCache& rPrimaryCache = impl_getCFG(sal_True ); + AcceleratorCache& rSecondaryCache = impl_getCFG(sal_False); + + if (!rPrimaryCache.hasKey(aKeyEvent) && !rSecondaryCache.hasKey(aKeyEvent)) + throw css::container::NoSuchElementException( + ::rtl::OUString(), + static_cast< ::cppu::OWeakObject* >(this)); + + if (rPrimaryCache.hasKey(aKeyEvent)) + return rPrimaryCache.getCommandByKey(aKeyEvent); + else + return rSecondaryCache.getCommandByKey(aKeyEvent); + + // <- SAFE ---------------------------------- +} + +//----------------------------------------------- +void SAL_CALL XCUBasedAcceleratorConfiguration::setKeyEvent(const css::awt::KeyEvent& aKeyEvent, + const ::rtl::OUString& sCommand ) + throw(css::lang::IllegalArgumentException, + css::uno::RuntimeException ) +{ + RTL_LOGFILE_PRODUCT_CONTEXT( aLog1, " start XCUBasedAcceleratorConfiguration::setKeyEvent" ); + + if ( + (aKeyEvent.KeyCode == 0) && + (aKeyEvent.KeyChar == 0) && + (aKeyEvent.KeyFunc == 0) && + (aKeyEvent.Modifiers == 0) + ) + throw css::lang::IllegalArgumentException( + ::rtl::OUString::createFromAscii("Such key event seams not to be supported by any operating system."), + static_cast< ::cppu::OWeakObject* >(this), + 0); + + if (!sCommand.getLength()) + throw css::lang::IllegalArgumentException( + ::rtl::OUString::createFromAscii("Empty command strings are not allowed here."), + static_cast< ::cppu::OWeakObject* >(this), + 1); + + // SAFE -> ---------------------------------- + WriteGuard aWriteLock(m_aLock); + + AcceleratorCache& rPrimaryCache = impl_getCFG(sal_True, sal_True ); // TRUE => force getting of a writeable cache! + AcceleratorCache& rSecondaryCache = impl_getCFG(sal_False, sal_True); // TRUE => force getting of a writeable cache! + + if ( rPrimaryCache.hasKey(aKeyEvent) ) + { + ::rtl::OUString sOriginalCommand = rPrimaryCache.getCommandByKey(aKeyEvent); + if ( sCommand != sOriginalCommand ) + { + if (rSecondaryCache.hasCommand(sOriginalCommand)) + { + AcceleratorCache::TKeyList lSecondaryKeys = rSecondaryCache.getKeysByCommand(sOriginalCommand); + rSecondaryCache.removeKey(lSecondaryKeys[0]); + rPrimaryCache.setKeyCommandPair(lSecondaryKeys[0], sOriginalCommand); + } + + if (rPrimaryCache.hasCommand(sCommand)) + { + AcceleratorCache::TKeyList lPrimaryKeys = rPrimaryCache.getKeysByCommand(sCommand); + rPrimaryCache.removeKey(lPrimaryKeys[0]); + rSecondaryCache.setKeyCommandPair(lPrimaryKeys[0], sCommand); + } + + rPrimaryCache.setKeyCommandPair(aKeyEvent, sCommand); + } + } + + else if ( rSecondaryCache.hasKey(aKeyEvent) ) + { + ::rtl::OUString sOriginalCommand = rSecondaryCache.getCommandByKey(aKeyEvent); + if (sCommand != sOriginalCommand) + { + if (rPrimaryCache.hasCommand(sCommand)) + { + AcceleratorCache::TKeyList lPrimaryKeys = rPrimaryCache.getKeysByCommand(sCommand); + rPrimaryCache.removeKey(lPrimaryKeys[0]); + rSecondaryCache.setKeyCommandPair(lPrimaryKeys[0], sCommand); + } + + rSecondaryCache.removeKey(aKeyEvent); + rPrimaryCache.setKeyCommandPair(aKeyEvent, sCommand); + } + } + + else + { + if (rPrimaryCache.hasCommand(sCommand)) + { + AcceleratorCache::TKeyList lPrimaryKeys = rPrimaryCache.getKeysByCommand(sCommand); + rPrimaryCache.removeKey(lPrimaryKeys[0]); + rSecondaryCache.setKeyCommandPair(lPrimaryKeys[0], sCommand); + } + + rPrimaryCache.setKeyCommandPair(aKeyEvent, sCommand); + } + + aWriteLock.unlock(); + // <- SAFE ---------------------------------- + + RTL_LOGFILE_PRODUCT_CONTEXT( aLog2, " end XCUBasedAcceleratorConfiguration::setKeyEvent" ); +} + +//----------------------------------------------- +void SAL_CALL XCUBasedAcceleratorConfiguration::removeKeyEvent(const css::awt::KeyEvent& aKeyEvent) + throw(css::container::NoSuchElementException, + css::uno::RuntimeException ) +{ + // SAFE -> ---------------------------------- + WriteGuard aWriteLock(m_aLock); + + AcceleratorCache& rPrimaryCache = impl_getCFG(sal_True, sal_True ); + AcceleratorCache& rSecondaryCache = impl_getCFG(sal_False, sal_True); + + if (!rPrimaryCache.hasKey(aKeyEvent) && !rSecondaryCache.hasKey(aKeyEvent)) + throw css::container::NoSuchElementException( + ::rtl::OUString(), + static_cast< ::cppu::OWeakObject* >(this)); + + if (rPrimaryCache.hasKey(aKeyEvent)) + { + ::rtl::OUString sDelCommand = rPrimaryCache.getCommandByKey(aKeyEvent); + if (sDelCommand.getLength() > 0) + { + ::rtl::OUString sOriginalCommand = rPrimaryCache.getCommandByKey(aKeyEvent); + if (rSecondaryCache.hasCommand(sOriginalCommand)) + { + AcceleratorCache::TKeyList lSecondaryKeys = rSecondaryCache.getKeysByCommand(sOriginalCommand); + rSecondaryCache.removeKey(lSecondaryKeys[0]); + rPrimaryCache.setKeyCommandPair(lSecondaryKeys[0], sOriginalCommand); + } + + rPrimaryCache.removeKey(aKeyEvent); + } + + } + else + { + ::rtl::OUString sDelCommand = rSecondaryCache.getCommandByKey(aKeyEvent); + if (sDelCommand.getLength() > 0) + rSecondaryCache.removeKey(aKeyEvent); + } + + // <- SAFE ---------------------------------- +} + +//----------------------------------------------- +css::uno::Sequence< css::awt::KeyEvent > SAL_CALL XCUBasedAcceleratorConfiguration::getKeyEventsByCommand(const ::rtl::OUString& sCommand) + throw(css::lang::IllegalArgumentException , + css::container::NoSuchElementException, + css::uno::RuntimeException ) +{ + if (!sCommand.getLength()) + throw css::lang::IllegalArgumentException( + ::rtl::OUString::createFromAscii("Empty command strings are not allowed here."), + static_cast< ::cppu::OWeakObject* >(this), + 1); + + // SAFE -> ---------------------------------- + ReadGuard aReadLock(m_aLock); + + AcceleratorCache& rPrimaryCache = impl_getCFG(sal_True ); + AcceleratorCache& rSecondaryCache = impl_getCFG(sal_False); + + if (!rPrimaryCache.hasCommand(sCommand) && !rSecondaryCache.hasCommand(sCommand)) + throw css::container::NoSuchElementException( + ::rtl::OUString(), + static_cast< ::cppu::OWeakObject* >(this)); + + AcceleratorCache::TKeyList lKeys = rPrimaryCache.getKeysByCommand(sCommand); + + AcceleratorCache::TKeyList lSecondaryKeys = rSecondaryCache.getKeysByCommand(sCommand); + AcceleratorCache::TKeyList::const_iterator pIt; + for (pIt = lSecondaryKeys.begin(); pIt != lSecondaryKeys.end(); ++pIt) + lKeys.push_back(*pIt); + + return lKeys.getAsConstList(); + + // <- SAFE ---------------------------------- +} + +//----------------------------------------------- +AcceleratorCache::TKeyList::const_iterator lcl_getPreferredKey(const AcceleratorCache::TKeyList& lKeys) +{ + AcceleratorCache::TKeyList::const_iterator pIt; + for ( pIt = lKeys.begin (); + pIt != lKeys.end (); + ++pIt ) + { + const css::awt::KeyEvent& rAWTKey = *pIt; + const KeyCode aVCLKey = ::svt::AcceleratorExecute::st_AWTKey2VCLKey(rAWTKey); + const String sName = aVCLKey.GetName(); + + if (sName.Len () > 0) + return pIt; + } + + return lKeys.end (); +} + +//----------------------------------------------- +css::uno::Sequence< css::uno::Any > SAL_CALL XCUBasedAcceleratorConfiguration::getPreferredKeyEventsForCommandList(const css::uno::Sequence< ::rtl::OUString >& lCommandList) + throw(css::lang::IllegalArgumentException , + css::uno::RuntimeException ) +{ + // SAFE -> ---------------------------------- + ReadGuard aReadLock(m_aLock); + + sal_Int32 i = 0; + sal_Int32 c = lCommandList.getLength(); + css::uno::Sequence< css::uno::Any > lPreferredOnes (c); // dont pack list! + AcceleratorCache& rCache = impl_getCFG(sal_True); + + for (i=0; i(this), + (sal_Int16)i); + + if (!rCache.hasCommand(rCommand)) + continue; + + AcceleratorCache::TKeyList lKeys = rCache.getKeysByCommand(rCommand); + if (lKeys.size()<1) + continue; + + AcceleratorCache::TKeyList::const_iterator pPreferredKey = lcl_getPreferredKey(lKeys); + if (pPreferredKey != lKeys.end ()) + { + css::uno::Any& rAny = lPreferredOnes[i]; + rAny <<= *(pPreferredKey); + } + } + + aReadLock.unlock(); + // <- SAFE ---------------------------------- + + return lPreferredOnes; +} + +//----------------------------------------------- +void SAL_CALL XCUBasedAcceleratorConfiguration::removeCommandFromAllKeyEvents(const ::rtl::OUString& sCommand) + throw(css::lang::IllegalArgumentException , + css::container::NoSuchElementException, + css::uno::RuntimeException ) +{ + if (!sCommand.getLength()) + throw css::lang::IllegalArgumentException( + ::rtl::OUString::createFromAscii("Empty command strings are not allowed here."), + static_cast< ::cppu::OWeakObject* >(this), + 0); + + // SAFE -> ---------------------------------- + WriteGuard aWriteLock(m_aLock); + + AcceleratorCache& rPrimaryCache = impl_getCFG(sal_True, sal_True ); + AcceleratorCache& rSecondaryCache = impl_getCFG(sal_False, sal_True); + + if (!rPrimaryCache.hasCommand(sCommand) && !rSecondaryCache.hasCommand(sCommand)) + throw css::container::NoSuchElementException( + ::rtl::OUString::createFromAscii("Command does not exists inside this container."), + static_cast< ::cppu::OWeakObject* >(this)); + + if (rPrimaryCache.hasCommand(sCommand)) + rPrimaryCache.removeCommand(sCommand); + if (rSecondaryCache.hasCommand(sCommand)) + rSecondaryCache.removeCommand(sCommand); + + aWriteLock.unlock(); + // <- SAFE ---------------------------------- +} + +//----------------------------------------------- +void SAL_CALL XCUBasedAcceleratorConfiguration::reload() + throw(css::uno::Exception , + css::uno::RuntimeException) +{ + RTL_LOGFILE_PRODUCT_CONTEXT( aLog1, " start XCUBasedAcceleratorConfiguration::reload()" ); + + // SAFE -> ---------------------------------- + WriteGuard aWriteLock(m_aLock); + + sal_Bool bPreferred; + css::uno::Reference< css::container::XNameAccess > xAccess; + + bPreferred = sal_True; + m_aPrimaryReadCache = AcceleratorCache(); + if (m_pPrimaryWriteCache) + { + // be aware of reentrance problems - use temp variable for calling delete ... :-) + AcceleratorCache* pTemp = m_pPrimaryWriteCache; + m_pPrimaryWriteCache = 0; + delete pTemp; + } + m_xCfg->getByName(CFG_ENTRY_PRIMARY) >>= xAccess; + impl_ts_load(bPreferred, xAccess); // load the preferred keys + + bPreferred = sal_False; + m_aSecondaryReadCache = AcceleratorCache(); + if (m_pSecondaryWriteCache) + { + // be aware of reentrance problems - use temp variable for calling delete ... :-) + AcceleratorCache* pTemp = m_pSecondaryWriteCache; + m_pSecondaryWriteCache = 0; + delete pTemp; + } + m_xCfg->getByName(CFG_ENTRY_SECONDARY) >>= xAccess; + impl_ts_load(bPreferred, xAccess); // load the secondary keys + + aWriteLock.unlock(); + // <- SAFE ---------------------------------- + + RTL_LOGFILE_PRODUCT_CONTEXT( aLog2, " end XCUBasedAcceleratorConfiguration::reload()" ); +} + +//----------------------------------------------- +void SAL_CALL XCUBasedAcceleratorConfiguration::store() + throw(css::uno::Exception , + css::uno::RuntimeException) +{ + RTL_LOGFILE_PRODUCT_CONTEXT( aLog1, " start XCUBasedAcceleratorConfiguration::store()" ); + + // SAFE -> ---------------------------------- + ReadGuard aReadLock(m_aLock); + + sal_Bool bPreferred; + css::uno::Reference< css::container::XNameAccess > xAccess; + + bPreferred = sal_True; + m_xCfg->getByName(CFG_ENTRY_PRIMARY) >>= xAccess; + impl_ts_save(bPreferred, xAccess); + + bPreferred = sal_False; + m_xCfg->getByName(CFG_ENTRY_SECONDARY) >>= xAccess; + impl_ts_save(bPreferred, xAccess); + + aReadLock.unlock(); + // <- SAFE ---------------------------------- + + RTL_LOGFILE_PRODUCT_CONTEXT( aLog2, " end XCUBasedAcceleratorConfiguration::store()" ); +} + +//----------------------------------------------- +void SAL_CALL XCUBasedAcceleratorConfiguration::storeToStorage(const css::uno::Reference< css::embed::XStorage >& /*xStorage*/) + throw(css::uno::Exception , + css::uno::RuntimeException) +{ + // todo implement me + // use m_aCache + old AcceleratorXMLWriter to store data directly on storage given as parameter ... +} + +//----------------------------------------------- +::sal_Bool SAL_CALL XCUBasedAcceleratorConfiguration::isModified() + throw(css::uno::RuntimeException) +{ + return sal_False; +} + +//----------------------------------------------- +::sal_Bool SAL_CALL XCUBasedAcceleratorConfiguration::isReadOnly() + throw(css::uno::RuntimeException) +{ + return sal_False; +} + +//----------------------------------------------- +void SAL_CALL XCUBasedAcceleratorConfiguration::setStorage(const css::uno::Reference< css::embed::XStorage >& /*xStorage*/) + throw(css::uno::RuntimeException) +{ + LOG_WARNING("XCUBasedAcceleratorConfiguration::setStorage()", "TODO implement this HACK .-)") +} + +//----------------------------------------------- +::sal_Bool SAL_CALL XCUBasedAcceleratorConfiguration::hasStorage() + throw(css::uno::RuntimeException) +{ + LOG_WARNING("XCUBasedAcceleratorConfiguration::hasStorage()", "TODO implement this HACK .-)") + return sal_False; +} + +//----------------------------------------------- +void SAL_CALL XCUBasedAcceleratorConfiguration::addConfigurationListener(const css::uno::Reference< css::ui::XUIConfigurationListener >& /*xListener*/) + throw(css::uno::RuntimeException) +{ + LOG_WARNING("XCUBasedAcceleratorConfiguration::addConfigurationListener()", "TODO implement me") +} + +//----------------------------------------------- +void SAL_CALL XCUBasedAcceleratorConfiguration::removeConfigurationListener(const css::uno::Reference< css::ui::XUIConfigurationListener >& /*xListener*/) + throw(css::uno::RuntimeException) +{ + LOG_WARNING("XCUBasedAcceleratorConfiguration::removeConfigurationListener()", "TODO implement me") +} + +//----------------------------------------------- +void SAL_CALL XCUBasedAcceleratorConfiguration::reset() + throw(css::uno::RuntimeException) +{ + css::uno::Reference< css::container::XNamed > xNamed(m_xCfg, css::uno::UNO_QUERY); + ::rtl::OUString sConfig = xNamed->getName(); + if ( sConfig.equalsAscii("Global") ) + { + m_xCfg = css::uno::Reference< css::container::XNameAccess > ( + ::comphelper::ConfigurationHelper::openConfig( m_xSMGR, CFG_ENTRY_GLOBAL, ::comphelper::ConfigurationHelper::E_ALL_LOCALES ), + css::uno::UNO_QUERY ); + XCUBasedAcceleratorConfiguration::reload(); + } + else if ( sConfig.equalsAscii("Modules") ) + { + m_xCfg = css::uno::Reference< css::container::XNameAccess > ( + ::comphelper::ConfigurationHelper::openConfig( m_xSMGR, CFG_ENTRY_MODULES, ::comphelper::ConfigurationHelper::E_ALL_LOCALES ), + css::uno::UNO_QUERY ); + XCUBasedAcceleratorConfiguration::reload(); + } +} + +//----------------------------------------------- +void SAL_CALL XCUBasedAcceleratorConfiguration::addResetListener(const css::uno::Reference< css::form::XResetListener >& /*xListener*/) + throw(css::uno::RuntimeException) +{ + LOG_WARNING("XCUBasedAcceleratorConfiguration::addResetListener()", "TODO implement me") +} + +//----------------------------------------------- +void SAL_CALL XCUBasedAcceleratorConfiguration::removeResetListener(const css::uno::Reference< css::form::XResetListener >& /*xListener*/) + throw(css::uno::RuntimeException) +{ + LOG_WARNING("XCUBasedAcceleratorConfiguration::removeResetListener()", "TODO implement me") +} + +//----------------------------------------------- +void SAL_CALL XCUBasedAcceleratorConfiguration::changesOccurred(const css::util::ChangesEvent& aEvent) + throw(css::uno::RuntimeException) +{ + RTL_LOGFILE_PRODUCT_CONTEXT( aLog1, " start XCUBasedAcceleratorConfiguration::changesOccurred()" ); + + css::uno::Reference< css::container::XHierarchicalNameAccess > xHAccess; + aEvent.Base >>= xHAccess; + if (! xHAccess.is ()) + return; + + const sal_Int32 c = aEvent.Changes.getLength(); + sal_Int32 i = 0; + + for (i=0; i']/Key['']/Command[]" will + // be interesting for use. Sometimes short path values are given also by the broadcaster ... but they must be ignored :-) + // So we try to split the path into 3 parts (module isnt important here, because we already know it ... because + // these instance is bound to a specific module configuration ... or it''s the global configuration where no module is given at all. + + ::rtl::OUString sOrgPath ; + ::rtl::OUString sPath ; + ::rtl::OUString sKey; + + aChange.Accessor >>= sOrgPath; + sPath = sOrgPath; + ::rtl::OUString sPrimarySecondary = ::utl::extractFirstFromConfigurationPath(sPath); + sPath = ::utl::dropPrefixFromConfigurationPath(sPath, sPrimarySecondary); + + ::rtl::OUString sGlobalModules = ::utl::extractFirstFromConfigurationPath(sPath); + sPath = ::utl::dropPrefixFromConfigurationPath(sPath, sGlobalModules); + + if ( sGlobalModules.equals(CFG_ENTRY_GLOBAL) ) + { + ::rtl::OUString sModule; + sKey = ::utl::extractFirstFromConfigurationPath(sPath); + reloadChanged(sPrimarySecondary, sGlobalModules, sModule, sKey); + } + else if ( sGlobalModules.equals(CFG_ENTRY_MODULES) ) + { + ::rtl::OUString sModule = ::utl::extractFirstFromConfigurationPath(sPath); + ::rtl::OUString sDropModule = ::rtl::OUString::createFromAscii("Module['") + sModule + ::rtl::OUString::createFromAscii("']"); + sPath = ::utl::dropPrefixFromConfigurationPath(sPath, sDropModule); + sKey = ::utl::extractFirstFromConfigurationPath(sPath); + reloadChanged(sPrimarySecondary, sGlobalModules, sModule, sKey); + } + } + + RTL_LOGFILE_PRODUCT_CONTEXT( aLog2, " end XCUBasedAcceleratorConfiguration::changesOccurred()" ); +} + +//----------------------------------------------- +void SAL_CALL XCUBasedAcceleratorConfiguration::disposing(const css::lang::EventObject& /*aSource*/) + throw(css::uno::RuntimeException) +{ +} + +//----------------------------------------------- +void XCUBasedAcceleratorConfiguration::impl_ts_load( sal_Bool bPreferred, const css::uno::Reference< css::container::XNameAccess >& xCfg ) +{ + AcceleratorCache aReadCache = AcceleratorCache(); + css::uno::Reference< css::container::XNameAccess > xAccess; + if (m_sGlobalOrModules.equalsAscii("Global")) + xCfg->getByName(CFG_ENTRY_GLOBAL) >>= xAccess; + else if (m_sGlobalOrModules.equalsAscii("Modules")) + { + css::uno::Reference< css::container::XNameAccess > xModules; + xCfg->getByName(CFG_ENTRY_MODULES) >>= xModules; + xModules->getByName(m_sModuleCFG) >>= xAccess; + } + + css::uno::Reference< css::container::XNameAccess > xKey; + css::uno::Reference< css::container::XNameAccess > xCommand; + if (xAccess.is()) + { + css::uno::Sequence< ::rtl::OUString > lKeys = xAccess->getElementNames(); + sal_Int32 nKeys = lKeys.getLength(); + for ( sal_Int32 i=0; igetByName(sKey) >>= xKey; + xKey->getByName(CFG_PROP_COMMAND) >>= xCommand; + + css::uno::Sequence< ::rtl::OUString > lLocales = xCommand->getElementNames(); + sal_Int32 nLocales = lLocales.getLength(); + ::std::vector< ::rtl::OUString > aLocales; + for ( sal_Int32 j=0; j::const_iterator pFound; + for ( pFound = aLocales.begin(); pFound != aLocales.end(); ++pFound ) + { + if ( *pFound == impl_ts_getLocale().toISO() ) + break; + } + + if ( pFound == aLocales.end() ) + { + ::rtl::OUString sDefaultLocale = ::rtl::OUString::createFromAscii("en-US"); + for ( pFound = aLocales.begin(); pFound != aLocales.end(); ++pFound ) + { + if ( *pFound == sDefaultLocale ) + break; + } + + if ( pFound == aLocales.end() ) + continue; + } + + ::rtl::OUString sLocale = *pFound; + ::rtl::OUString sCommand; + xCommand->getByName(sLocale) >>= sCommand; + if (sCommand.getLength()<1) + continue; + + KeyMapping aKeyMapping; + css::awt::KeyEvent aKeyEvent; + + sal_Int32 nIndex = 0; + ::rtl::OUString sKeyCommand = sKey.getToken(0, '_', nIndex); + ::rtl::OUString sPrefix = ::rtl::OUString::createFromAscii("KEY_"); + aKeyEvent.KeyCode = aKeyMapping.mapIdentifierToCode(sPrefix + sKeyCommand); + + css::uno::Sequence< ::rtl::OUString > sToken(4); + const sal_Int32 nToken = 4; + sal_Bool bValid = sal_True; + sal_Int32 k; + for (k=0; k& /*xCfg*/) +{ + if (bPreferred) + { + AcceleratorCache::TKeyList::const_iterator pIt; + AcceleratorCache::TKeyList lPrimaryReadKeys = m_aPrimaryReadCache.getAllKeys(); + AcceleratorCache::TKeyList lPrimaryWriteKeys = m_pPrimaryWriteCache->getAllKeys(); + + for ( pIt = lPrimaryReadKeys.begin(); pIt != lPrimaryReadKeys.end(); ++pIt ) + { + if (!m_pPrimaryWriteCache->hasKey(*pIt)) + removeKeyFromConfiguration(*pIt, sal_True); + } + + for ( pIt = lPrimaryWriteKeys.begin(); pIt != lPrimaryWriteKeys.end(); ++pIt ) + { + ::rtl::OUString sCommand = m_pPrimaryWriteCache->getCommandByKey(*pIt); + if (!m_aPrimaryReadCache.hasKey(*pIt)) + { + insertKeyToConfiguration(*pIt, sCommand, sal_True); + } + else + { + ::rtl::OUString sReadCommand = m_aPrimaryReadCache.getCommandByKey(*pIt); + if (sReadCommand != sCommand) + insertKeyToConfiguration(*pIt, sCommand, sal_True); + } + } + + // take over all changes into the original container + // SAFE -> ---------------------------------- + WriteGuard aWriteLock(m_aLock); + + if (m_pPrimaryWriteCache) + { + m_aPrimaryReadCache.takeOver(*m_pPrimaryWriteCache); + AcceleratorCache* pTemp = m_pPrimaryWriteCache; + m_pPrimaryWriteCache = 0; + delete pTemp; + } + + aWriteLock.unlock(); + // <- SAFE ---------------------------------- + } + + else + { + AcceleratorCache::TKeyList::const_iterator pIt; + AcceleratorCache::TKeyList lSecondaryReadKeys = m_aSecondaryReadCache.getAllKeys(); + AcceleratorCache::TKeyList lSecondaryWriteKeys = m_pSecondaryWriteCache->getAllKeys(); + + for ( pIt = lSecondaryReadKeys.begin(); pIt != lSecondaryReadKeys.end(); ++pIt) + { + if (!m_pSecondaryWriteCache->hasKey(*pIt)) + removeKeyFromConfiguration(*pIt, sal_False); + } + + + for ( pIt = lSecondaryWriteKeys.begin(); pIt != lSecondaryWriteKeys.end(); ++pIt ) + { + ::rtl::OUString sCommand = m_pSecondaryWriteCache->getCommandByKey(*pIt); + if (!m_aSecondaryReadCache.hasKey(*pIt)) + { + insertKeyToConfiguration(*pIt, sCommand, sal_False); + } + else + { + ::rtl::OUString sReadCommand = m_aSecondaryReadCache.getCommandByKey(*pIt); + if (sReadCommand != sCommand) + insertKeyToConfiguration(*pIt, sCommand, sal_False); + } + } + + // take over all changes into the original container + // SAFE -> ---------------------------------- + WriteGuard aWriteLock(m_aLock); + + if (m_pSecondaryWriteCache) + { + m_aSecondaryReadCache.takeOver(*m_pSecondaryWriteCache); + AcceleratorCache* pTemp = m_pSecondaryWriteCache; + m_pSecondaryWriteCache = 0; + delete pTemp; + } + + aWriteLock.unlock(); + // <- SAFE ---------------------------------- + } + + ::comphelper::ConfigurationHelper::flush(m_xCfg); +} + +//----------------------------------------------- +void XCUBasedAcceleratorConfiguration::insertKeyToConfiguration( const css::awt::KeyEvent& aKeyEvent, const ::rtl::OUString& sCommand, const sal_Bool bPreferred ) +{ + css::uno::Reference< css::container::XNameAccess > xAccess; + css::uno::Reference< css::container::XNameContainer > xContainer; + css::uno::Reference< css::lang::XSingleServiceFactory > xFac; + css::uno::Reference< css::uno::XInterface > xInst; + + if ( bPreferred ) + m_xCfg->getByName(CFG_ENTRY_PRIMARY) >>= xAccess; + else + m_xCfg->getByName(CFG_ENTRY_SECONDARY) >>= xAccess; + + if ( m_sGlobalOrModules.equals(CFG_ENTRY_GLOBAL) ) + xAccess->getByName(CFG_ENTRY_GLOBAL) >>= xContainer; + else if ( m_sGlobalOrModules.equals(CFG_ENTRY_MODULES) ) + { + css::uno::Reference< css::container::XNameContainer > xModules; + xAccess->getByName(CFG_ENTRY_MODULES) >>= xModules; + if ( !xModules->hasByName(m_sModuleCFG) ) + { + xFac = css::uno::Reference< css::lang::XSingleServiceFactory >(xModules, css::uno::UNO_QUERY); + xInst = xFac->createInstance(); + xModules->insertByName(m_sModuleCFG, css::uno::makeAny(xInst)); + } + xModules->getByName(m_sModuleCFG) >>= xContainer; + } + + KeyMapping aKeyMapping; + const sal_Int32 nBeginIndex = 4; // "KEY_" is the prefix of a identifier... + ::rtl::OUString sKey = (aKeyMapping.mapCodeToIdentifier(aKeyEvent.KeyCode)).copy(nBeginIndex); + + if ( (aKeyEvent.Modifiers & css::awt::KeyModifier::SHIFT) == css::awt::KeyModifier::SHIFT ) + sKey += ::rtl::OUString::createFromAscii("_SHIFT"); + if ( (aKeyEvent.Modifiers & css::awt::KeyModifier::MOD1 ) == css::awt::KeyModifier::MOD1 ) + sKey += ::rtl::OUString::createFromAscii("_MOD1"); + if ( (aKeyEvent.Modifiers & css::awt::KeyModifier::MOD2 ) == css::awt::KeyModifier::MOD2 ) + sKey += ::rtl::OUString::createFromAscii("_MOD2"); + + css::uno::Reference< css::container::XNameAccess > xKey; + css::uno::Reference< css::container::XNameContainer > xCommand; + if ( !xContainer->hasByName(sKey) ) + { + xFac = css::uno::Reference< css::lang::XSingleServiceFactory >(xContainer, css::uno::UNO_QUERY); + xInst = xFac->createInstance(); + xContainer->insertByName(sKey, css::uno::makeAny(xInst)); + } + xContainer->getByName(sKey) >>= xKey; + + xKey->getByName(CFG_PROP_COMMAND) >>= xCommand; + ::rtl::OUString sLocale = impl_ts_getLocale().toISO(); + if ( !xCommand->hasByName(sLocale) ) + xCommand->insertByName(sLocale, css::uno::makeAny(sCommand)); + else + xCommand->replaceByName(sLocale, css::uno::makeAny(sCommand)); +} + +//----------------------------------------------- +void XCUBasedAcceleratorConfiguration::removeKeyFromConfiguration( const css::awt::KeyEvent& aKeyEvent, const sal_Bool bPreferred ) +{ + css::uno::Reference< css::container::XNameAccess > xAccess; + css::uno::Reference< css::container::XNameContainer > xContainer; + + if ( bPreferred ) + m_xCfg->getByName(CFG_ENTRY_PRIMARY) >>= xAccess; + else + m_xCfg->getByName(CFG_ENTRY_SECONDARY) >>= xAccess; + + if ( m_sGlobalOrModules.equals(CFG_ENTRY_GLOBAL) ) + xAccess->getByName(CFG_ENTRY_GLOBAL) >>= xContainer; + else if ( m_sGlobalOrModules.equals(CFG_ENTRY_MODULES) ) + { + css::uno::Reference< css::container::XNameAccess > xModules; + xAccess->getByName(CFG_ENTRY_MODULES) >>= xModules; + if ( !xModules->hasByName(m_sModuleCFG) ) + return; + xModules->getByName(m_sModuleCFG) >>= xContainer; + } + + KeyMapping aKeyMapping; + const sal_Int32 nBeginIndex = 4; // "KEY_" is the prefix of a identifier... + ::rtl::OUString sKey = (aKeyMapping.mapCodeToIdentifier(aKeyEvent.KeyCode)).copy(nBeginIndex); + + if ( (aKeyEvent.Modifiers & css::awt::KeyModifier::SHIFT) == css::awt::KeyModifier::SHIFT ) + sKey += ::rtl::OUString::createFromAscii("_SHIFT"); + if ( (aKeyEvent.Modifiers & css::awt::KeyModifier::MOD1 ) == css::awt::KeyModifier::MOD1 ) + sKey += ::rtl::OUString::createFromAscii("_MOD1"); + if ( (aKeyEvent.Modifiers & css::awt::KeyModifier::MOD2 ) == css::awt::KeyModifier::MOD2 ) + sKey += ::rtl::OUString::createFromAscii("_MOD2"); + + xContainer->removeByName(sKey); +} + +//----------------------------------------------- +void XCUBasedAcceleratorConfiguration::reloadChanged( const ::rtl::OUString& sPrimarySecondary, const ::rtl::OUString& sGlobalModules, const ::rtl::OUString& sModule, const ::rtl::OUString& sKey ) +{ + css::uno::Reference< css::container::XNameAccess > xAccess; + css::uno::Reference< css::container::XNameContainer > xContainer; + + m_xCfg->getByName(sPrimarySecondary) >>= xAccess; + if ( sGlobalModules.equals(CFG_ENTRY_GLOBAL) ) + xAccess->getByName(CFG_ENTRY_GLOBAL) >>= xContainer; + else + { + css::uno::Reference< css::container::XNameAccess > xModules; + xAccess->getByName(CFG_ENTRY_MODULES) >>= xModules; + if ( !xModules->hasByName(sModule) ) + return; + xModules->getByName(sModule) >>= xContainer; + } + + KeyMapping aKeyMapping; + css::awt::KeyEvent aKeyEvent; + ::rtl::OUString sKeyIdentifier; + + sal_Int32 nIndex = 0; + sKeyIdentifier = sKey.getToken(0, '_', nIndex); + aKeyEvent.KeyCode = aKeyMapping.mapIdentifierToCode(::rtl::OUString::createFromAscii("KEY_")+sKeyIdentifier); + + css::uno::Sequence< ::rtl::OUString > sToken(3); + const sal_Int32 nToken = 3; + for (sal_Int32 i=0; i xKey; + css::uno::Reference< css::container::XNameAccess > xCommand; + ::rtl::OUString sCommand; + + if (xContainer->hasByName(sKey)) + { + ::rtl::OUString sLocale = impl_ts_getLocale().toISO(); + xContainer->getByName(sKey) >>= xKey; + xKey->getByName(CFG_PROP_COMMAND) >>= xCommand; + xCommand->getByName(sLocale) >>= sCommand; + } + + if (sPrimarySecondary.equals(CFG_ENTRY_PRIMARY)) + { + if (sCommand.getLength() ==0) + m_aPrimaryReadCache.removeKey(aKeyEvent); + else + m_aPrimaryReadCache.setKeyCommandPair(aKeyEvent, sCommand); + } + else if (sPrimarySecondary.equals(CFG_ENTRY_SECONDARY)) + { + if (sCommand.getLength() ==0) + m_aSecondaryReadCache.removeKey(aKeyEvent); + else + m_aSecondaryReadCache.setKeyCommandPair(aKeyEvent, sCommand); + } +} + +//----------------------------------------------- +AcceleratorCache& XCUBasedAcceleratorConfiguration::impl_getCFG(sal_Bool bPreferred, sal_Bool bWriteAccessRequested) +{ + // SAFE -> ---------------------------------- + WriteGuard aWriteLock(m_aLock); + + if (bPreferred) + { + //create copy of our readonly-cache, if write access is forced ... but + //not still possible! + if ( + (bWriteAccessRequested) && + (!m_pPrimaryWriteCache ) + ) + { + m_pPrimaryWriteCache = new AcceleratorCache(m_aPrimaryReadCache); + } + + // in case, we have a writeable cache, we use it for reading too! + // Otherwhise the API user cant find its own changes ... + if (m_pPrimaryWriteCache) + return *m_pPrimaryWriteCache; + else + return m_aPrimaryReadCache; + } + + else + { + //create copy of our readonly-cache, if write access is forced ... but + //not still possible! + if ( + (bWriteAccessRequested) && + (!m_pSecondaryWriteCache ) + ) + { + m_pSecondaryWriteCache = new AcceleratorCache(m_aSecondaryReadCache); + } + + // in case, we have a writeable cache, we use it for reading too! + // Otherwhise the API user cant find its own changes ... + if (m_pSecondaryWriteCache) + return *m_pSecondaryWriteCache; + else + return m_aSecondaryReadCache; + } + + // <- SAFE ---------------------------------- +} + +//----------------------------------------------- +::comphelper::Locale XCUBasedAcceleratorConfiguration::impl_ts_getLocale() const +{ + static ::rtl::OUString LOCALE_PACKAGE = ::rtl::OUString::createFromAscii("/org.openoffice.Setup"); + static ::rtl::OUString LOCALE_PATH = ::rtl::OUString::createFromAscii("L10N" ); + static ::rtl::OUString LOCALE_KEY = ::rtl::OUString::createFromAscii("ooLocale" ); + + // SAFE -> ---------------------------------- + ReadGuard aReadLock(m_aLock); + css::uno::Reference< css::lang::XMultiServiceFactory > xSMGR = m_xSMGR; + aReadLock.unlock(); + // <- SAFE ---------------------------------- + + css::uno::Reference< css::uno::XInterface > xCFG = fpc::ConfigurationHelper::openConfig(xSMGR, LOCALE_PACKAGE, LOCALE_PATH, fpc::ConfigurationHelper::E_READONLY); + css::uno::Reference< css::beans::XPropertySet > xProp (xCFG, css::uno::UNO_QUERY_THROW); + ::rtl::OUString sISOLocale; + xProp->getPropertyValue(LOCALE_KEY) >>= sISOLocale; + + if (!sISOLocale.getLength()) + return ::comphelper::Locale::EN_US(); + return ::comphelper::Locale(sISOLocale); +} + +} // namespace framework diff --git a/framework/source/dispatch/dispatchprovider.cxx b/framework/source/dispatch/dispatchprovider.cxx index 4c98599484..47f8ea64ac 100644 --- a/framework/source/dispatch/dispatchprovider.cxx +++ b/framework/source/dispatch/dispatchprovider.cxx @@ -47,7 +47,7 @@ #include #include #include -#include +#include #include #include #include @@ -224,24 +224,24 @@ css::uno::Sequence< css::uno::Reference< css::frame::XDispatch > > SAL_CALL Disp return lDispatcher; } -//_________________________________________________________________________________________________________________ - -::sal_Bool lcl_isCloseDispatch (const css::util::URL& aURL) -{ - return ( +//_________________________________________________________________________________________________________________ + +::sal_Bool lcl_isCloseDispatch (const css::util::URL& aURL) +{ + return ( (aURL.Complete.equals(CMD_UNO_CLOSEDOC )) || (aURL.Complete.equals(CMD_UNO_CLOSEWIN )) || - (aURL.Complete.equals(CMD_UNO_CLOSEFRAME)) + (aURL.Complete.equals(CMD_UNO_CLOSEFRAME)) ); -} - -//_________________________________________________________________________________________________________________ - -::sal_Bool lcl_isStartModuleDispatch (const css::util::URL& aURL) -{ - return (aURL.Complete.equals(CMD_UNO_SHOWSTARTMODULE)); -} - +} + +//_________________________________________________________________________________________________________________ + +::sal_Bool lcl_isStartModuleDispatch (const css::util::URL& aURL) +{ + return (aURL.Complete.equals(CMD_UNO_SHOWSTARTMODULE)); +} + //_________________________________________________________________________________________________________________ /** @@ -296,10 +296,10 @@ css::uno::Reference< css::frame::XDispatch > DispatchProvider::implts_queryDeskt if (sTargetFrameName==SPECIALTARGET_DEFAULT) { if (implts_isLoadableContent(aURL)) - xDispatcher = implts_getOrCreateDispatchHelper( E_DEFAULTDISPATCHER, xDesktop ); - - if (lcl_isStartModuleDispatch(aURL)) - xDispatcher = implts_getOrCreateDispatchHelper( E_STARTMODULEDISPATCHER, xDesktop ); + xDispatcher = implts_getOrCreateDispatchHelper( E_DEFAULTDISPATCHER, xDesktop ); + + if (lcl_isStartModuleDispatch(aURL)) + xDispatcher = implts_getOrCreateDispatchHelper( E_STARTMODULEDISPATCHER, xDesktop ); } //----------------------------------------------------------------------------------------------------- @@ -772,7 +772,7 @@ css::uno::Reference< css::frame::XDispatch > DispatchProvider::implts_getOrCreat CloseDispatcher* pDispatcher = new CloseDispatcher( xFactory, xOwner, sTarget ); xDispatchHelper = css::uno::Reference< css::frame::XDispatch >( static_cast< ::cppu::OWeakObject* >(pDispatcher), css::uno::UNO_QUERY ); } - break; + break; case E_STARTMODULEDISPATCHER : { diff --git a/framework/source/dispatch/startmoduledispatcher.cxx b/framework/source/dispatch/startmoduledispatcher.cxx index def4f785be..9bb52616e7 100644 --- a/framework/source/dispatch/startmoduledispatcher.cxx +++ b/framework/source/dispatch/startmoduledispatcher.cxx @@ -31,15 +31,15 @@ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_framework.hxx" -#include - +#include + //_______________________________________________ // my own includes #include #include #include -#include +#include #include #include #include @@ -95,8 +95,8 @@ StartModuleDispatcher::StartModuleDispatcher(const css::uno::Reference< css::lan const ::rtl::OUString& sTarget) : ThreadHelpBase (&Application::GetSolarMutex() ) , ::cppu::OWeakObject( ) - , m_xSMGR (xSMGR ) - , m_xOwner (xFrame ) + , m_xSMGR (xSMGR ) + , m_xOwner (xFrame ) , m_sDispatchTarget (sTarget ) , m_lStatusListener (m_aLock.getShareableOslMutex()) { @@ -120,18 +120,18 @@ void SAL_CALL StartModuleDispatcher::dispatchWithNotification(const css::util::U const css::uno::Sequence< css::beans::PropertyValue >& /*lArguments*/, const css::uno::Reference< css::frame::XDispatchResultListener >& xListener ) throw(css::uno::RuntimeException) -{ - ::sal_Int16 nResult = css::frame::DispatchResultState::DONTKNOW; - if (aURL.Complete.equals (CMD_UNO_SHOWSTARTMODULE)) - { - nResult = css::frame::DispatchResultState::FAILURE; - if (implts_isBackingModePossible ()) - { - if (implts_establishBackingMode ()) +{ + ::sal_Int16 nResult = css::frame::DispatchResultState::DONTKNOW; + if (aURL.Complete.equals (CMD_UNO_SHOWSTARTMODULE)) + { + nResult = css::frame::DispatchResultState::FAILURE; + if (implts_isBackingModePossible ()) + { + if (implts_establishBackingMode ()) nResult = css::frame::DispatchResultState::SUCCESS; - } - } - + } + } + implts_notifyResultListener(xListener, nResult, css::uno::Any()); } @@ -163,39 +163,39 @@ void SAL_CALL StartModuleDispatcher::removeStatusListener(const css::uno::Refere { } -//----------------------------------------------- -::sal_Bool StartModuleDispatcher::implts_isBackingModePossible () -{ - if ( ! SvtModuleOptions().IsModuleInstalled(SvtModuleOptions::E_SSTARTMODULE)) - return sal_False; - +//----------------------------------------------- +::sal_Bool StartModuleDispatcher::implts_isBackingModePossible () +{ + if ( ! SvtModuleOptions().IsModuleInstalled(SvtModuleOptions::E_SSTARTMODULE)) + return sal_False; + // SAFE -> ---------------------------------- ReadGuard aReadLock(m_aLock); css::uno::Reference< css::lang::XMultiServiceFactory > xSMGR = m_xSMGR; aReadLock.unlock(); // <- SAFE ---------------------------------- - - css::uno::Reference< css::frame::XFramesSupplier > xDesktop( - xSMGR->createInstance(SERVICENAME_DESKTOP), css::uno::UNO_QUERY); - - FrameListAnalyzer aCheck( - xDesktop, - css::uno::Reference< css::frame::XFrame >(), - FrameListAnalyzer::E_HELP | FrameListAnalyzer::E_BACKINGCOMPONENT); - - ::sal_Bool bIsPossible = sal_False; - ::sal_Int32 nVisibleFrames = aCheck.m_lOtherVisibleFrames.getLength (); - - if ( - ( ! aCheck.m_xBackingComponent.is ()) && - ( nVisibleFrames < 1 ) - ) - { - bIsPossible = sal_True; - } - + + css::uno::Reference< css::frame::XFramesSupplier > xDesktop( + xSMGR->createInstance(SERVICENAME_DESKTOP), css::uno::UNO_QUERY); + + FrameListAnalyzer aCheck( + xDesktop, + css::uno::Reference< css::frame::XFrame >(), + FrameListAnalyzer::E_HELP | FrameListAnalyzer::E_BACKINGCOMPONENT); + + ::sal_Bool bIsPossible = sal_False; + ::sal_Int32 nVisibleFrames = aCheck.m_lOtherVisibleFrames.getLength (); + + if ( + ( ! aCheck.m_xBackingComponent.is ()) && + ( nVisibleFrames < 1 ) + ) + { + bIsPossible = sal_True; + } + return bIsPossible; -} +} //----------------------------------------------- ::sal_Bool StartModuleDispatcher::implts_establishBackingMode() @@ -205,16 +205,16 @@ void SAL_CALL StartModuleDispatcher::removeStatusListener(const css::uno::Refere css::uno::Reference< css::lang::XMultiServiceFactory > xSMGR = m_xSMGR; aReadLock.unlock(); // <- SAFE ---------------------------------- - - css::uno::Reference< css::frame::XFrame > xDesktop (xSMGR->createInstance(SERVICENAME_DESKTOP), css::uno::UNO_QUERY); + + css::uno::Reference< css::frame::XFrame > xDesktop (xSMGR->createInstance(SERVICENAME_DESKTOP), css::uno::UNO_QUERY); css::uno::Reference< css::frame::XFrame > xFrame = xDesktop->findFrame (SPECIALTARGET_BLANK, 0); - css::uno::Reference< css::awt::XWindow > xContainerWindow = xFrame->getContainerWindow (); + css::uno::Reference< css::awt::XWindow > xContainerWindow = xFrame->getContainerWindow (); css::uno::Sequence< css::uno::Any > lArgs(1); - lArgs[0] <<= xContainerWindow; + lArgs[0] <<= xContainerWindow; - css::uno::Reference< css::frame::XController > xStartModule( - xSMGR->createInstanceWithArguments(SERVICENAME_STARTMODULE, lArgs), + css::uno::Reference< css::frame::XController > xStartModule( + xSMGR->createInstanceWithArguments(SERVICENAME_STARTMODULE, lArgs), css::uno::UNO_QUERY_THROW); css::uno::Reference< css::awt::XWindow > xComponentWindow(xStartModule, css::uno::UNO_QUERY); @@ -239,6 +239,6 @@ void StartModuleDispatcher::implts_notifyResultListener(const css::uno::Referenc aResult); xListener->dispatchFinished(aEvent); -} +} } // namespace framework diff --git a/framework/source/services/tabwindowservice.cxx b/framework/source/services/tabwindowservice.cxx index 6c78600aa9..9aca21109e 100644 --- a/framework/source/services/tabwindowservice.cxx +++ b/framework/source/services/tabwindowservice.cxx @@ -100,7 +100,7 @@ DEFINE_XSERVICEINFO_MULTISERVICE ( TabWindowService , DEFINE_INIT_SERVICE ( TabWindowService, { - impl_initializePropInfo(); + impl_initializePropInfo(); m_aTransactionManager.setWorkingMode( E_WORK ); } ) @@ -141,7 +141,7 @@ TabWindowService::TabWindowService( const css::uno::Reference< css::lang::XMulti // destructor //***************************************************************************************************************** TabWindowService::~TabWindowService() -{ +{ } //***************************************************************************************************************** @@ -454,9 +454,9 @@ FwkTabWindow* TabWindowService::mem_TabWin () FwkTabWindow* pWin = NULL; if ( ! m_xTabWin.is ()) - { - Window* pFakeParent = dynamic_cast< Window* >(Application::GetDefaultDevice ()); - + { + Window* pFakeParent = dynamic_cast< Window* >(Application::GetDefaultDevice ()); + m_pTabWin = new FwkTabWindow (pFakeParent); m_xTabWin = VCLUnoHelper::GetInterface (m_pTabWin); diff --git a/framework/source/uifactory/windowcontentfactorymanager.cxx b/framework/source/uifactory/windowcontentfactorymanager.cxx index 9bf91be17a..38cc2b191f 100644 --- a/framework/source/uifactory/windowcontentfactorymanager.cxx +++ b/framework/source/uifactory/windowcontentfactorymanager.cxx @@ -1,550 +1,550 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: uielementfactorymanager.cxx,v $ - * $Revision: 1.10.12.1 $ - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_framework.hxx" - -//_________________________________________________________________________________________________________________ -// my own includes -//_________________________________________________________________________________________________________________ -#include -#include -#include "services.h" - -//_________________________________________________________________________________________________________________ -// interface includes -//_________________________________________________________________________________________________________________ -#include -#include -#include -#include -#include -#include -#include -#include -#include - -//_________________________________________________________________________________________________________________ -// includes of other projects -//_________________________________________________________________________________________________________________ -#include -#include -#include -#include - -//_________________________________________________________________________________________________________________ -// Defines -//_________________________________________________________________________________________________________________ -// - -using namespace ::com::sun::star; - -//_________________________________________________________________________________________________________________ -// Namespace -//_________________________________________________________________________________________________________________ -// - -namespace framework -{ - -// global function needed by both implementations -static rtl::OUString getHashKeyFromStrings( const rtl::OUString& aType, const rtl::OUString& aName, const rtl::OUString& aModuleName ) -{ - rtl::OUStringBuffer aKey( aType ); - aKey.appendAscii( "^" ); - aKey.append( aName ); - aKey.appendAscii( "^" ); - aKey.append( aModuleName ); - return aKey.makeStringAndClear(); -} - - -//***************************************************************************************************************** -// Configuration access class for UIElementFactoryManager implementation -//***************************************************************************************************************** - -class ConfigurationAccess_WindowContentFactoryManager : // interfaces - public lang::XTypeProvider , - public container::XContainerListener , - // baseclasses - // Order is neccessary for right initialization! - private ThreadHelpBase , - public ::cppu::OWeakObject -{ - public: - FWK_DECLARE_XINTERFACE - FWK_DECLARE_XTYPEPROVIDER - - ConfigurationAccess_WindowContentFactoryManager( uno::Reference< lang::XMultiServiceFactory >& rServiceManager ); - virtual ~ConfigurationAccess_WindowContentFactoryManager(); - - void readConfigurationData(); - - rtl::OUString getFactorySpecifierFromTypeNameModule( const rtl::OUString& rType, const rtl::OUString& rName, const rtl::OUString& rModule ); - - // container.XContainerListener - virtual void SAL_CALL elementInserted( const container::ContainerEvent& aEvent ) throw(uno::RuntimeException); - virtual void SAL_CALL elementRemoved ( const container::ContainerEvent& aEvent ) throw(uno::RuntimeException); - virtual void SAL_CALL elementReplaced( const container::ContainerEvent& aEvent ) throw(uno::RuntimeException); - - // lang.XEventListener - virtual void SAL_CALL disposing( const lang::EventObject& aEvent ) throw(uno::RuntimeException); - - private: - class FactoryMap : public std::hash_map< rtl::OUString, - rtl::OUString, - OUStringHashCode, - ::std::equal_to< ::rtl::OUString > > - { - inline void free() - { - FactoryMap().swap( *this ); - } - }; - - sal_Bool impl_getElementProps( const uno::Any& rElement, rtl::OUString& rType, rtl::OUString& rName, rtl::OUString& rModule, rtl::OUString& rServiceSpecifier ) const; - - rtl::OUString m_aPropType; - rtl::OUString m_aPropName; - rtl::OUString m_aPropModule; - rtl::OUString m_aPropFactory; - FactoryMap m_aFactoryMap; - uno::Reference< lang::XMultiServiceFactory > m_xServiceManager; - uno::Reference< lang::XMultiServiceFactory > m_xConfigProvider; - uno::Reference< container::XNameAccess > m_xConfigAccess; - bool m_bConfigAccessInitialized; - bool m_bConfigDirty; -}; - -//***************************************************************************************************************** -// XInterface, XTypeProvider -//***************************************************************************************************************** -DEFINE_XINTERFACE_3 ( ConfigurationAccess_WindowContentFactoryManager , - OWeakObject , - DIRECT_INTERFACE ( lang::XTypeProvider ), - DIRECT_INTERFACE ( container::XContainerListener ), - DERIVED_INTERFACE( lang::XEventListener, XContainerListener ) - ) - -DEFINE_XTYPEPROVIDER_3 ( ConfigurationAccess_WindowContentFactoryManager , - lang::XTypeProvider , - container::XContainerListener , - lang::XEventListener - ) - -ConfigurationAccess_WindowContentFactoryManager::ConfigurationAccess_WindowContentFactoryManager( uno::Reference< lang::XMultiServiceFactory >& rServiceManager ) : - ThreadHelpBase(), - m_aPropType( RTL_CONSTASCII_USTRINGPARAM( "Type" )), - m_aPropName( RTL_CONSTASCII_USTRINGPARAM( "Name" )), - m_aPropModule( RTL_CONSTASCII_USTRINGPARAM( "Module" )), - m_aPropFactory( RTL_CONSTASCII_USTRINGPARAM( "FactoryImplementation" )), - m_xServiceManager( rServiceManager ), - m_bConfigAccessInitialized( false ), - m_bConfigDirty( true ) -{ - m_xConfigProvider = uno::Reference< lang::XMultiServiceFactory >( rServiceManager->createInstance( - rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( - "com.sun.star.configuration.ConfigurationProvider" ))), - uno::UNO_QUERY ); -} - -ConfigurationAccess_WindowContentFactoryManager::~ConfigurationAccess_WindowContentFactoryManager() -{ - // SAFE - ResetableGuard aLock( m_aLock ); - - uno::Reference< container::XContainer > xContainer( m_xConfigAccess, uno::UNO_QUERY ); - if ( xContainer.is() ) - xContainer->removeContainerListener( this ); -} - -rtl::OUString ConfigurationAccess_WindowContentFactoryManager::getFactorySpecifierFromTypeNameModule( const rtl::OUString& rType, const rtl::OUString& rName, const rtl::OUString& rModule ) -{ - // SAFE - ResetableGuard aLock( m_aLock ); - - // Make sure that we read the configuration data at least once. - // May be more dependent on the dirty flag! - readConfigurationData(); - - FactoryMap::const_iterator pIter = - m_aFactoryMap.find( getHashKeyFromStrings( rType, rName, rModule )); - if ( pIter != m_aFactoryMap.end() ) - return pIter->second; - else - { - pIter = m_aFactoryMap.find( getHashKeyFromStrings( rType, rName, rtl::OUString() )); - if ( pIter != m_aFactoryMap.end() ) - return pIter->second; - else - { - // Support factories which uses a defined prefix for their element names. - sal_Int32 nIndex = rName.indexOf( '_' ); - if ( nIndex > 0 ) - { - rtl::OUString aName = rName.copy( 0, nIndex ); - pIter = m_aFactoryMap.find( getHashKeyFromStrings( rType, aName, rtl::OUString() )); - if ( pIter != m_aFactoryMap.end() ) - return pIter->second; - } - - pIter = m_aFactoryMap.find( getHashKeyFromStrings( rType, rtl::OUString(), rtl::OUString() )); - if ( pIter != m_aFactoryMap.end() ) - return pIter->second; - } - } - - return rtl::OUString(); -} - -// container.XContainerListener -void SAL_CALL ConfigurationAccess_WindowContentFactoryManager::elementInserted( const container::ContainerEvent& ) throw(uno::RuntimeException) -{ - // SAFE - ResetableGuard aLock( m_aLock ); - m_bConfigDirty = true; -} - -void SAL_CALL ConfigurationAccess_WindowContentFactoryManager::elementRemoved ( const container::ContainerEvent& ) throw(uno::RuntimeException) -{ - // SAFE - ResetableGuard aLock( m_aLock ); - m_bConfigDirty = true; -} - -void SAL_CALL ConfigurationAccess_WindowContentFactoryManager::elementReplaced( const container::ContainerEvent& ) throw(uno::RuntimeException) -{ - // SAFE - ResetableGuard aLock( m_aLock ); - m_bConfigDirty = true; -} - -// lang.XEventListener -void SAL_CALL ConfigurationAccess_WindowContentFactoryManager::disposing( const lang::EventObject& ) throw(uno::RuntimeException) -{ - // SAFE - // remove our reference to the config access - ResetableGuard aLock( m_aLock ); - m_xConfigAccess.clear(); -} - -void ConfigurationAccess_WindowContentFactoryManager::readConfigurationData() -{ - // SAFE - ResetableGuard aLock( m_aLock ); - - bool bConfigAccessInitialized(m_bConfigAccessInitialized); - if ( !m_bConfigAccessInitialized ) - { - uno::Sequence< uno::Any > aArgs( 1 ); - beans::PropertyValue aPropValue; - - aPropValue.Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "nodepath" )); - aPropValue.Value <<= rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "/org.openoffice.Office.UI.WindowContentFactories/Registered/ContentFactories" )); - aArgs[0] <<= aPropValue; - - try - { - m_xConfigAccess = uno::Reference< container::XNameAccess >( m_xConfigProvider->createInstanceWithArguments( - rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( - "com.sun.star.configuration.ConfigurationAccess" )), - aArgs ), - uno::UNO_QUERY ); - } - catch ( lang::WrappedTargetException& ) - { - } - - m_bConfigAccessInitialized = sal_True; - } - - if ( m_xConfigAccess.is() && m_bConfigDirty ) - { - uno::Sequence< rtl::OUString > aUIElementFactories = m_xConfigAccess->getElementNames(); - - uno::Any a; - rtl::OUString aType; - rtl::OUString aName; - rtl::OUString aModule; - rtl::OUString aService; - rtl::OUString aHashKey; - - uno::Reference< beans::XPropertySet > xPropertySet; - - m_aFactoryMap.clear(); - for ( sal_Int32 i = 0; i < aUIElementFactories.getLength(); i++ ) - { - if ( impl_getElementProps( m_xConfigAccess->getByName( aUIElementFactories[i] ), aType, aName, aModule, aService )) - { - // Create hash key from type, name and module as they are together a primary key to - // the UNO service that implements the user interface element factory. - aHashKey = getHashKeyFromStrings( aType, aName, aModule ); - m_aFactoryMap.insert( FactoryMap::value_type( aHashKey, aService )); - } - } - - uno::Reference< container::XContainer > xContainer( m_xConfigAccess, uno::UNO_QUERY ); - m_bConfigDirty = false; - - aLock.unlock(); - // UNSAFE - - if ( xContainer.is() && !bConfigAccessInitialized) - xContainer->addContainerListener( this ); - } -} - -sal_Bool ConfigurationAccess_WindowContentFactoryManager::impl_getElementProps( const uno::Any& aElement, rtl::OUString& rType, rtl::OUString& rName, rtl::OUString& rModule, rtl::OUString& rServiceSpecifier ) const -{ - uno::Reference< beans::XPropertySet > xPropertySet; - uno::Reference< container::XNameAccess > xNameAccess; - aElement >>= xPropertySet; - aElement >>= xNameAccess; - - if ( xPropertySet.is() ) - { - try - { - xPropertySet->getPropertyValue( m_aPropType ) >>= rType; - xPropertySet->getPropertyValue( m_aPropName ) >>= rName; - xPropertySet->getPropertyValue( m_aPropModule ) >>= rModule; - xPropertySet->getPropertyValue( m_aPropFactory ) >>= rServiceSpecifier; - } - catch ( beans::UnknownPropertyException& ) - { - return sal_False; - } - catch ( lang::WrappedTargetException& ) - { - return sal_False; - } - } - - return sal_True; -} - -//***************************************************************************************************************** -// XInterface, XTypeProvider, XServiceInfo -//***************************************************************************************************************** -DEFINE_XINTERFACE_3 ( WindowContentFactoryManager , - OWeakObject , - DIRECT_INTERFACE( lang::XTypeProvider ), - DIRECT_INTERFACE( lang::XServiceInfo ), - DIRECT_INTERFACE( lang::XSingleComponentFactory ) - ) - -DEFINE_XTYPEPROVIDER_3 ( WindowContentFactoryManager , - lang::XTypeProvider , - lang::XServiceInfo , - lang::XSingleComponentFactory - ) - -DEFINE_XSERVICEINFO_ONEINSTANCESERVICE ( WindowContentFactoryManager , - ::cppu::OWeakObject , - SERVICENAME_WINDOWCONTENTFACTORYMANAGER , - IMPLEMENTATIONNAME_WINDOWCONTENTFACTORYMANAGER - ) - -DEFINE_INIT_SERVICE ( WindowContentFactoryManager, {} ) - -WindowContentFactoryManager::WindowContentFactoryManager( const uno::Reference< lang::XMultiServiceFactory >& xServiceManager ) : - ThreadHelpBase( &Application::GetSolarMutex() ), - m_bConfigRead( sal_False ), - m_xServiceManager( xServiceManager ) -{ - m_pConfigAccess = new ConfigurationAccess_WindowContentFactoryManager( m_xServiceManager ); - m_pConfigAccess->acquire(); - m_xModuleManager = uno::Reference< frame::XModuleManager >( m_xServiceManager->createInstance( SERVICENAME_MODULEMANAGER ), uno::UNO_QUERY ); -} - -WindowContentFactoryManager::~WindowContentFactoryManager() -{ - ResetableGuard aLock( m_aLock ); - - // reduce reference count - m_pConfigAccess->release(); -} - -void WindowContentFactoryManager::RetrieveTypeNameFromResourceURL( const rtl::OUString& aResourceURL, rtl::OUString& aType, rtl::OUString& aName ) -{ - const sal_Int32 RESOURCEURL_PREFIX_SIZE = 17; - const char RESOURCEURL_PREFIX[] = "private:resource/"; - - if (( aResourceURL.indexOf( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( RESOURCEURL_PREFIX ))) == 0 ) && - ( aResourceURL.getLength() > RESOURCEURL_PREFIX_SIZE )) - { - rtl::OUString aTmpStr( aResourceURL.copy( RESOURCEURL_PREFIX_SIZE )); - sal_Int32 nToken = 0; - sal_Int32 nPart = 0; - do - { - ::rtl::OUString sToken = aTmpStr.getToken( 0, '/', nToken); - if ( sToken.getLength() ) - { - if ( nPart == 0 ) - aType = sToken; - else if ( nPart == 1 ) - aName = sToken; - else - break; - nPart++; - } - } - while( nToken >=0 ); - } -} - -// XSingleComponentFactory -uno::Reference< uno::XInterface > SAL_CALL WindowContentFactoryManager::createInstanceWithContext( - const uno::Reference< uno::XComponentContext >& /*xContext*/ ) -throw (uno::Exception, uno::RuntimeException) -{ -/* - // Currently this method cannot be implemented for generic use. There is no way for external - code to get a handle to the dialog model. - - uno::Reference< lang::XMultiServiceFactory > xServiceManager( xContext->getServiceManager(), uno::UNO_QUERY ); - - const ::rtl::OUString sToolkitService(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.Toolkit")); - uno::Reference< awt::XToolkit > xToolkit( xServiceManager->createInstance( sToolkitService ), uno::UNO_QUERY_THROW ); - - const ::rtl::OUString sDialogModelService(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.UnoControlDialogModel")); - uno::Reference< awt::XControlModel > xDialogModel( xServiceManager->createInstance( sDialogModelService ), uno::UNO_QUERY_THROW ); - - const ::rtl::OUString sDecoration(RTL_CONSTASCII_USTRINGPARAM("Decoration")); - uno::Reference< beans::XPropertySet > xPropSet( xDialogModel, uno::UNO_QUERY_THROW ); - xPropSet->setPropertyValue( sDecoration, uno::makeAny(false)); - - const ::rtl::OUString sDialogService(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.UnoControlDialog")); - uno::Reference< awt::XControl > xDialogControl( xServiceManager->createInstance( sDialogService ), uno::UNO_QUERY_THROW ); - - xDialogControl->setModel( xDialogModel ); - - uno::Reference< awt::XWindowPeer > xWindowParentPeer( xToolkit->getDesktopWindow(), uno::UNO_QUERY ); - xDialogControl->createPeer( xToolkit, xWindowParentPeer ); - uno::Reference< uno::XInterface > xWindow( xDialogControl->getPeer(), uno::UNO_QUERY ); -*/ - uno::Reference< uno::XInterface > xWindow; - return xWindow; -} - -uno::Reference< uno::XInterface > SAL_CALL WindowContentFactoryManager::createInstanceWithArgumentsAndContext( - const uno::Sequence< uno::Any >& Arguments, const uno::Reference< uno::XComponentContext >& Context ) -throw (uno::Exception, uno::RuntimeException) -{ - uno::Reference< uno::XInterface > xWindow; - uno::Reference< frame::XFrame > xFrame; - ::rtl::OUString aResourceURL; - - for (sal_Int32 i=0; i < Arguments.getLength(); i++ ) - { - beans::PropertyValue aPropValue; - if ( Arguments[i] >>= aPropValue ) - { - if ( aPropValue.Name.equalsAscii( "Frame" )) - aPropValue.Value >>= xFrame; - else if ( aPropValue.Name.equalsAscii( "ResourceURL" )) - aPropValue.Value >>= aResourceURL; - } - } - - uno::Reference< frame::XModuleManager > xModuleManager; - // SAFE - { - ResetableGuard aLock( m_aLock ); - xModuleManager = m_xModuleManager; - } - // UNSAFE - - // Determine the module identifier - ::rtl::OUString aType; - ::rtl::OUString aName; - ::rtl::OUString aModuleId; - try - { - if ( xFrame.is() && xModuleManager.is() ) - aModuleId = xModuleManager->identify( uno::Reference< uno::XInterface >( xFrame, uno::UNO_QUERY ) ); - } - catch ( frame::UnknownModuleException& ) - { - } - - RetrieveTypeNameFromResourceURL( aResourceURL, aType, aName ); - if ( aType.getLength() > 0 && - aName.getLength() > 0 && - aModuleId.getLength() > 0 ) - { - ::rtl::OUString aImplementationName; - uno::Reference< uno::XInterface > xHolder( static_cast(this), uno::UNO_QUERY ); - - // Detetmine the implementation name of the window content factory dependent on the - // module identifier, user interface element type and name - // SAFE - ResetableGuard aLock( m_aLock ); - aImplementationName = m_pConfigAccess->getFactorySpecifierFromTypeNameModule( aType, aName, aModuleId ); - if ( aImplementationName.getLength() > 0 ) - { - aLock.unlock(); - // UNSAFE - - uno::Reference< lang::XMultiServiceFactory > xServiceManager( Context->getServiceManager(), uno::UNO_QUERY ); - if ( xServiceManager.is() ) - { - uno::Reference< lang::XSingleComponentFactory > xFactory( - xServiceManager->createInstance( aImplementationName ), uno::UNO_QUERY ); - if ( xFactory.is() ) - { - // Be careful: We call external code. Therefore here we have to catch all exceptions - try - { - xWindow = xFactory->createInstanceWithArgumentsAndContext( Arguments, Context ); - } - catch ( uno::RuntimeException& ) - { - } - catch ( uno::Exception& ) - { - } - } - } - } - } - - // UNSAFE - if ( !xWindow.is()) - { - // Fallback: Use internal factory code to create a toolkit dialog as a content window - xWindow = createInstanceWithContext(Context); - } - - return xWindow; -} - -} // namespace framework +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: uielementfactorymanager.cxx,v $ + * $Revision: 1.10.12.1 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_framework.hxx" + +//_________________________________________________________________________________________________________________ +// my own includes +//_________________________________________________________________________________________________________________ +#include +#include +#include "services.h" + +//_________________________________________________________________________________________________________________ +// interface includes +//_________________________________________________________________________________________________________________ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//_________________________________________________________________________________________________________________ +// includes of other projects +//_________________________________________________________________________________________________________________ +#include +#include +#include +#include + +//_________________________________________________________________________________________________________________ +// Defines +//_________________________________________________________________________________________________________________ +// + +using namespace ::com::sun::star; + +//_________________________________________________________________________________________________________________ +// Namespace +//_________________________________________________________________________________________________________________ +// + +namespace framework +{ + +// global function needed by both implementations +static rtl::OUString getHashKeyFromStrings( const rtl::OUString& aType, const rtl::OUString& aName, const rtl::OUString& aModuleName ) +{ + rtl::OUStringBuffer aKey( aType ); + aKey.appendAscii( "^" ); + aKey.append( aName ); + aKey.appendAscii( "^" ); + aKey.append( aModuleName ); + return aKey.makeStringAndClear(); +} + + +//***************************************************************************************************************** +// Configuration access class for UIElementFactoryManager implementation +//***************************************************************************************************************** + +class ConfigurationAccess_WindowContentFactoryManager : // interfaces + public lang::XTypeProvider , + public container::XContainerListener , + // baseclasses + // Order is neccessary for right initialization! + private ThreadHelpBase , + public ::cppu::OWeakObject +{ + public: + FWK_DECLARE_XINTERFACE + FWK_DECLARE_XTYPEPROVIDER + + ConfigurationAccess_WindowContentFactoryManager( uno::Reference< lang::XMultiServiceFactory >& rServiceManager ); + virtual ~ConfigurationAccess_WindowContentFactoryManager(); + + void readConfigurationData(); + + rtl::OUString getFactorySpecifierFromTypeNameModule( const rtl::OUString& rType, const rtl::OUString& rName, const rtl::OUString& rModule ); + + // container.XContainerListener + virtual void SAL_CALL elementInserted( const container::ContainerEvent& aEvent ) throw(uno::RuntimeException); + virtual void SAL_CALL elementRemoved ( const container::ContainerEvent& aEvent ) throw(uno::RuntimeException); + virtual void SAL_CALL elementReplaced( const container::ContainerEvent& aEvent ) throw(uno::RuntimeException); + + // lang.XEventListener + virtual void SAL_CALL disposing( const lang::EventObject& aEvent ) throw(uno::RuntimeException); + + private: + class FactoryMap : public std::hash_map< rtl::OUString, + rtl::OUString, + OUStringHashCode, + ::std::equal_to< ::rtl::OUString > > + { + inline void free() + { + FactoryMap().swap( *this ); + } + }; + + sal_Bool impl_getElementProps( const uno::Any& rElement, rtl::OUString& rType, rtl::OUString& rName, rtl::OUString& rModule, rtl::OUString& rServiceSpecifier ) const; + + rtl::OUString m_aPropType; + rtl::OUString m_aPropName; + rtl::OUString m_aPropModule; + rtl::OUString m_aPropFactory; + FactoryMap m_aFactoryMap; + uno::Reference< lang::XMultiServiceFactory > m_xServiceManager; + uno::Reference< lang::XMultiServiceFactory > m_xConfigProvider; + uno::Reference< container::XNameAccess > m_xConfigAccess; + bool m_bConfigAccessInitialized; + bool m_bConfigDirty; +}; + +//***************************************************************************************************************** +// XInterface, XTypeProvider +//***************************************************************************************************************** +DEFINE_XINTERFACE_3 ( ConfigurationAccess_WindowContentFactoryManager , + OWeakObject , + DIRECT_INTERFACE ( lang::XTypeProvider ), + DIRECT_INTERFACE ( container::XContainerListener ), + DERIVED_INTERFACE( lang::XEventListener, XContainerListener ) + ) + +DEFINE_XTYPEPROVIDER_3 ( ConfigurationAccess_WindowContentFactoryManager , + lang::XTypeProvider , + container::XContainerListener , + lang::XEventListener + ) + +ConfigurationAccess_WindowContentFactoryManager::ConfigurationAccess_WindowContentFactoryManager( uno::Reference< lang::XMultiServiceFactory >& rServiceManager ) : + ThreadHelpBase(), + m_aPropType( RTL_CONSTASCII_USTRINGPARAM( "Type" )), + m_aPropName( RTL_CONSTASCII_USTRINGPARAM( "Name" )), + m_aPropModule( RTL_CONSTASCII_USTRINGPARAM( "Module" )), + m_aPropFactory( RTL_CONSTASCII_USTRINGPARAM( "FactoryImplementation" )), + m_xServiceManager( rServiceManager ), + m_bConfigAccessInitialized( false ), + m_bConfigDirty( true ) +{ + m_xConfigProvider = uno::Reference< lang::XMultiServiceFactory >( rServiceManager->createInstance( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( + "com.sun.star.configuration.ConfigurationProvider" ))), + uno::UNO_QUERY ); +} + +ConfigurationAccess_WindowContentFactoryManager::~ConfigurationAccess_WindowContentFactoryManager() +{ + // SAFE + ResetableGuard aLock( m_aLock ); + + uno::Reference< container::XContainer > xContainer( m_xConfigAccess, uno::UNO_QUERY ); + if ( xContainer.is() ) + xContainer->removeContainerListener( this ); +} + +rtl::OUString ConfigurationAccess_WindowContentFactoryManager::getFactorySpecifierFromTypeNameModule( const rtl::OUString& rType, const rtl::OUString& rName, const rtl::OUString& rModule ) +{ + // SAFE + ResetableGuard aLock( m_aLock ); + + // Make sure that we read the configuration data at least once. + // May be more dependent on the dirty flag! + readConfigurationData(); + + FactoryMap::const_iterator pIter = + m_aFactoryMap.find( getHashKeyFromStrings( rType, rName, rModule )); + if ( pIter != m_aFactoryMap.end() ) + return pIter->second; + else + { + pIter = m_aFactoryMap.find( getHashKeyFromStrings( rType, rName, rtl::OUString() )); + if ( pIter != m_aFactoryMap.end() ) + return pIter->second; + else + { + // Support factories which uses a defined prefix for their element names. + sal_Int32 nIndex = rName.indexOf( '_' ); + if ( nIndex > 0 ) + { + rtl::OUString aName = rName.copy( 0, nIndex ); + pIter = m_aFactoryMap.find( getHashKeyFromStrings( rType, aName, rtl::OUString() )); + if ( pIter != m_aFactoryMap.end() ) + return pIter->second; + } + + pIter = m_aFactoryMap.find( getHashKeyFromStrings( rType, rtl::OUString(), rtl::OUString() )); + if ( pIter != m_aFactoryMap.end() ) + return pIter->second; + } + } + + return rtl::OUString(); +} + +// container.XContainerListener +void SAL_CALL ConfigurationAccess_WindowContentFactoryManager::elementInserted( const container::ContainerEvent& ) throw(uno::RuntimeException) +{ + // SAFE + ResetableGuard aLock( m_aLock ); + m_bConfigDirty = true; +} + +void SAL_CALL ConfigurationAccess_WindowContentFactoryManager::elementRemoved ( const container::ContainerEvent& ) throw(uno::RuntimeException) +{ + // SAFE + ResetableGuard aLock( m_aLock ); + m_bConfigDirty = true; +} + +void SAL_CALL ConfigurationAccess_WindowContentFactoryManager::elementReplaced( const container::ContainerEvent& ) throw(uno::RuntimeException) +{ + // SAFE + ResetableGuard aLock( m_aLock ); + m_bConfigDirty = true; +} + +// lang.XEventListener +void SAL_CALL ConfigurationAccess_WindowContentFactoryManager::disposing( const lang::EventObject& ) throw(uno::RuntimeException) +{ + // SAFE + // remove our reference to the config access + ResetableGuard aLock( m_aLock ); + m_xConfigAccess.clear(); +} + +void ConfigurationAccess_WindowContentFactoryManager::readConfigurationData() +{ + // SAFE + ResetableGuard aLock( m_aLock ); + + bool bConfigAccessInitialized(m_bConfigAccessInitialized); + if ( !m_bConfigAccessInitialized ) + { + uno::Sequence< uno::Any > aArgs( 1 ); + beans::PropertyValue aPropValue; + + aPropValue.Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "nodepath" )); + aPropValue.Value <<= rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "/org.openoffice.Office.UI.WindowContentFactories/Registered/ContentFactories" )); + aArgs[0] <<= aPropValue; + + try + { + m_xConfigAccess = uno::Reference< container::XNameAccess >( m_xConfigProvider->createInstanceWithArguments( + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( + "com.sun.star.configuration.ConfigurationAccess" )), + aArgs ), + uno::UNO_QUERY ); + } + catch ( lang::WrappedTargetException& ) + { + } + + m_bConfigAccessInitialized = sal_True; + } + + if ( m_xConfigAccess.is() && m_bConfigDirty ) + { + uno::Sequence< rtl::OUString > aUIElementFactories = m_xConfigAccess->getElementNames(); + + uno::Any a; + rtl::OUString aType; + rtl::OUString aName; + rtl::OUString aModule; + rtl::OUString aService; + rtl::OUString aHashKey; + + uno::Reference< beans::XPropertySet > xPropertySet; + + m_aFactoryMap.clear(); + for ( sal_Int32 i = 0; i < aUIElementFactories.getLength(); i++ ) + { + if ( impl_getElementProps( m_xConfigAccess->getByName( aUIElementFactories[i] ), aType, aName, aModule, aService )) + { + // Create hash key from type, name and module as they are together a primary key to + // the UNO service that implements the user interface element factory. + aHashKey = getHashKeyFromStrings( aType, aName, aModule ); + m_aFactoryMap.insert( FactoryMap::value_type( aHashKey, aService )); + } + } + + uno::Reference< container::XContainer > xContainer( m_xConfigAccess, uno::UNO_QUERY ); + m_bConfigDirty = false; + + aLock.unlock(); + // UNSAFE + + if ( xContainer.is() && !bConfigAccessInitialized) + xContainer->addContainerListener( this ); + } +} + +sal_Bool ConfigurationAccess_WindowContentFactoryManager::impl_getElementProps( const uno::Any& aElement, rtl::OUString& rType, rtl::OUString& rName, rtl::OUString& rModule, rtl::OUString& rServiceSpecifier ) const +{ + uno::Reference< beans::XPropertySet > xPropertySet; + uno::Reference< container::XNameAccess > xNameAccess; + aElement >>= xPropertySet; + aElement >>= xNameAccess; + + if ( xPropertySet.is() ) + { + try + { + xPropertySet->getPropertyValue( m_aPropType ) >>= rType; + xPropertySet->getPropertyValue( m_aPropName ) >>= rName; + xPropertySet->getPropertyValue( m_aPropModule ) >>= rModule; + xPropertySet->getPropertyValue( m_aPropFactory ) >>= rServiceSpecifier; + } + catch ( beans::UnknownPropertyException& ) + { + return sal_False; + } + catch ( lang::WrappedTargetException& ) + { + return sal_False; + } + } + + return sal_True; +} + +//***************************************************************************************************************** +// XInterface, XTypeProvider, XServiceInfo +//***************************************************************************************************************** +DEFINE_XINTERFACE_3 ( WindowContentFactoryManager , + OWeakObject , + DIRECT_INTERFACE( lang::XTypeProvider ), + DIRECT_INTERFACE( lang::XServiceInfo ), + DIRECT_INTERFACE( lang::XSingleComponentFactory ) + ) + +DEFINE_XTYPEPROVIDER_3 ( WindowContentFactoryManager , + lang::XTypeProvider , + lang::XServiceInfo , + lang::XSingleComponentFactory + ) + +DEFINE_XSERVICEINFO_ONEINSTANCESERVICE ( WindowContentFactoryManager , + ::cppu::OWeakObject , + SERVICENAME_WINDOWCONTENTFACTORYMANAGER , + IMPLEMENTATIONNAME_WINDOWCONTENTFACTORYMANAGER + ) + +DEFINE_INIT_SERVICE ( WindowContentFactoryManager, {} ) + +WindowContentFactoryManager::WindowContentFactoryManager( const uno::Reference< lang::XMultiServiceFactory >& xServiceManager ) : + ThreadHelpBase( &Application::GetSolarMutex() ), + m_bConfigRead( sal_False ), + m_xServiceManager( xServiceManager ) +{ + m_pConfigAccess = new ConfigurationAccess_WindowContentFactoryManager( m_xServiceManager ); + m_pConfigAccess->acquire(); + m_xModuleManager = uno::Reference< frame::XModuleManager >( m_xServiceManager->createInstance( SERVICENAME_MODULEMANAGER ), uno::UNO_QUERY ); +} + +WindowContentFactoryManager::~WindowContentFactoryManager() +{ + ResetableGuard aLock( m_aLock ); + + // reduce reference count + m_pConfigAccess->release(); +} + +void WindowContentFactoryManager::RetrieveTypeNameFromResourceURL( const rtl::OUString& aResourceURL, rtl::OUString& aType, rtl::OUString& aName ) +{ + const sal_Int32 RESOURCEURL_PREFIX_SIZE = 17; + const char RESOURCEURL_PREFIX[] = "private:resource/"; + + if (( aResourceURL.indexOf( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( RESOURCEURL_PREFIX ))) == 0 ) && + ( aResourceURL.getLength() > RESOURCEURL_PREFIX_SIZE )) + { + rtl::OUString aTmpStr( aResourceURL.copy( RESOURCEURL_PREFIX_SIZE )); + sal_Int32 nToken = 0; + sal_Int32 nPart = 0; + do + { + ::rtl::OUString sToken = aTmpStr.getToken( 0, '/', nToken); + if ( sToken.getLength() ) + { + if ( nPart == 0 ) + aType = sToken; + else if ( nPart == 1 ) + aName = sToken; + else + break; + nPart++; + } + } + while( nToken >=0 ); + } +} + +// XSingleComponentFactory +uno::Reference< uno::XInterface > SAL_CALL WindowContentFactoryManager::createInstanceWithContext( + const uno::Reference< uno::XComponentContext >& /*xContext*/ ) +throw (uno::Exception, uno::RuntimeException) +{ +/* + // Currently this method cannot be implemented for generic use. There is no way for external + code to get a handle to the dialog model. + + uno::Reference< lang::XMultiServiceFactory > xServiceManager( xContext->getServiceManager(), uno::UNO_QUERY ); + + const ::rtl::OUString sToolkitService(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.Toolkit")); + uno::Reference< awt::XToolkit > xToolkit( xServiceManager->createInstance( sToolkitService ), uno::UNO_QUERY_THROW ); + + const ::rtl::OUString sDialogModelService(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.UnoControlDialogModel")); + uno::Reference< awt::XControlModel > xDialogModel( xServiceManager->createInstance( sDialogModelService ), uno::UNO_QUERY_THROW ); + + const ::rtl::OUString sDecoration(RTL_CONSTASCII_USTRINGPARAM("Decoration")); + uno::Reference< beans::XPropertySet > xPropSet( xDialogModel, uno::UNO_QUERY_THROW ); + xPropSet->setPropertyValue( sDecoration, uno::makeAny(false)); + + const ::rtl::OUString sDialogService(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.UnoControlDialog")); + uno::Reference< awt::XControl > xDialogControl( xServiceManager->createInstance( sDialogService ), uno::UNO_QUERY_THROW ); + + xDialogControl->setModel( xDialogModel ); + + uno::Reference< awt::XWindowPeer > xWindowParentPeer( xToolkit->getDesktopWindow(), uno::UNO_QUERY ); + xDialogControl->createPeer( xToolkit, xWindowParentPeer ); + uno::Reference< uno::XInterface > xWindow( xDialogControl->getPeer(), uno::UNO_QUERY ); +*/ + uno::Reference< uno::XInterface > xWindow; + return xWindow; +} + +uno::Reference< uno::XInterface > SAL_CALL WindowContentFactoryManager::createInstanceWithArgumentsAndContext( + const uno::Sequence< uno::Any >& Arguments, const uno::Reference< uno::XComponentContext >& Context ) +throw (uno::Exception, uno::RuntimeException) +{ + uno::Reference< uno::XInterface > xWindow; + uno::Reference< frame::XFrame > xFrame; + ::rtl::OUString aResourceURL; + + for (sal_Int32 i=0; i < Arguments.getLength(); i++ ) + { + beans::PropertyValue aPropValue; + if ( Arguments[i] >>= aPropValue ) + { + if ( aPropValue.Name.equalsAscii( "Frame" )) + aPropValue.Value >>= xFrame; + else if ( aPropValue.Name.equalsAscii( "ResourceURL" )) + aPropValue.Value >>= aResourceURL; + } + } + + uno::Reference< frame::XModuleManager > xModuleManager; + // SAFE + { + ResetableGuard aLock( m_aLock ); + xModuleManager = m_xModuleManager; + } + // UNSAFE + + // Determine the module identifier + ::rtl::OUString aType; + ::rtl::OUString aName; + ::rtl::OUString aModuleId; + try + { + if ( xFrame.is() && xModuleManager.is() ) + aModuleId = xModuleManager->identify( uno::Reference< uno::XInterface >( xFrame, uno::UNO_QUERY ) ); + } + catch ( frame::UnknownModuleException& ) + { + } + + RetrieveTypeNameFromResourceURL( aResourceURL, aType, aName ); + if ( aType.getLength() > 0 && + aName.getLength() > 0 && + aModuleId.getLength() > 0 ) + { + ::rtl::OUString aImplementationName; + uno::Reference< uno::XInterface > xHolder( static_cast(this), uno::UNO_QUERY ); + + // Detetmine the implementation name of the window content factory dependent on the + // module identifier, user interface element type and name + // SAFE + ResetableGuard aLock( m_aLock ); + aImplementationName = m_pConfigAccess->getFactorySpecifierFromTypeNameModule( aType, aName, aModuleId ); + if ( aImplementationName.getLength() > 0 ) + { + aLock.unlock(); + // UNSAFE + + uno::Reference< lang::XMultiServiceFactory > xServiceManager( Context->getServiceManager(), uno::UNO_QUERY ); + if ( xServiceManager.is() ) + { + uno::Reference< lang::XSingleComponentFactory > xFactory( + xServiceManager->createInstance( aImplementationName ), uno::UNO_QUERY ); + if ( xFactory.is() ) + { + // Be careful: We call external code. Therefore here we have to catch all exceptions + try + { + xWindow = xFactory->createInstanceWithArgumentsAndContext( Arguments, Context ); + } + catch ( uno::RuntimeException& ) + { + } + catch ( uno::Exception& ) + { + } + } + } + } + } + + // UNSAFE + if ( !xWindow.is()) + { + // Fallback: Use internal factory code to create a toolkit dialog as a content window + xWindow = createInstanceWithContext(Context); + } + + return xWindow; +} + +} // namespace framework diff --git a/ucb/source/ucp/file/shell.cxx b/ucb/source/ucp/file/shell.cxx index e071eac1a0..b40cd27b04 100644 --- a/ucb/source/ucp/file/shell.cxx +++ b/ucb/source/ucp/file/shell.cxx @@ -2297,9 +2297,9 @@ shell::commit( const shell::ContentMap::iterator& it, sal_Bool isDirectory,isFile,isVolume,isRemoveable,isRemote,isFloppy,isCompactDisc; - sal_Int64 dirSize = 0; - - if( aFileStatus.isValid( FileStatusMask_FileSize ) ) + sal_Int64 dirSize = 0; + + if( aFileStatus.isValid( FileStatusMask_FileSize ) ) dirSize = aFileStatus.getFileSize(); if( aFileStatus.isValid( FileStatusMask_Type ) ) @@ -2320,7 +2320,7 @@ shell::commit( const shell::ContentMap::iterator& it, isFile = osl::FileStatus::Regular == aFileStatus2.getFileType(); - if( aFileStatus2.isValid( FileStatusMask_FileSize ) ) + if( aFileStatus2.isValid( FileStatusMask_FileSize ) ) dirSize = aFileStatus2.getFileSize(); } else @@ -2403,7 +2403,7 @@ shell::commit( const shell::ContentMap::iterator& it, it1 = properties.find( MyProperty( Size ) ); if( it1 != properties.end() ) { - aAny <<= dirSize; + aAny <<= dirSize; it1->setValue( aAny ); } diff --git a/xmlhelp/source/com/sun/star/help/HelpLinker.cxx b/xmlhelp/source/com/sun/star/help/HelpLinker.cxx index 541522e4dd..52c9a3441a 100644 --- a/xmlhelp/source/com/sun/star/help/HelpLinker.cxx +++ b/xmlhelp/source/com/sun/star/help/HelpLinker.cxx @@ -345,7 +345,7 @@ void HelpLinker::initIndexerPreProcessor() */ void HelpLinker::link() throw( HelpProcessingException ) { - bool bIndexForExtension = true; + bool bIndexForExtension = true; if( bExtensionMode ) { @@ -845,34 +845,34 @@ void HelpLinker::main(std::vector &args, std::string* pExtensionPat aStrStream << "no index caption stylesheet given" << std::endl; throw HelpProcessingException( HELPPROCESSING_GENERAL_ERROR, aStrStream.str() ); } - else if ( bExtensionMode ) - { - rtl::OUString aIdxCaptionPathFileURL( aOfficeHelpPath ); - aIdxCaptionPathFileURL += rtl::OUString::createFromAscii( "/idxcaption.xsl" ); - + else if ( bExtensionMode ) + { + rtl::OUString aIdxCaptionPathFileURL( aOfficeHelpPath ); + aIdxCaptionPathFileURL += rtl::OUString::createFromAscii( "/idxcaption.xsl" ); + rtl::OString aOStr_IdxCaptionPathFileURL( rtl::OUStringToOString ( aIdxCaptionPathFileURL, fs::getThreadTextEncoding() ) ); std::string aStdStr_IdxCaptionPathFileURL( aOStr_IdxCaptionPathFileURL.getStr() ); - - idxCaptionStylesheet = fs::path( aStdStr_IdxCaptionPathFileURL ); - } + + idxCaptionStylesheet = fs::path( aStdStr_IdxCaptionPathFileURL ); + } if (!bExtensionMode && idxContentStylesheet.empty()) { std::stringstream aStrStream; aStrStream << "no index content stylesheet given" << std::endl; throw HelpProcessingException( HELPPROCESSING_GENERAL_ERROR, aStrStream.str() ); } - else if ( bExtensionMode ) - { - rtl::OUString aIdxContentPathFileURL( aOfficeHelpPath ); - aIdxContentPathFileURL += rtl::OUString::createFromAscii( "/idxcontent.xsl" ); - + else if ( bExtensionMode ) + { + rtl::OUString aIdxContentPathFileURL( aOfficeHelpPath ); + aIdxContentPathFileURL += rtl::OUString::createFromAscii( "/idxcontent.xsl" ); + rtl::OString aOStr_IdxContentPathFileURL( rtl::OUStringToOString ( aIdxContentPathFileURL, fs::getThreadTextEncoding() ) ); std::string aStdStr_IdxContentPathFileURL( aOStr_IdxContentPathFileURL.getStr() ); - - idxContentStylesheet = fs::path( aStdStr_IdxContentPathFileURL ); - } + + idxContentStylesheet = fs::path( aStdStr_IdxContentPathFileURL ); + } if (!bExtensionMode && embeddStylesheet.empty()) { std::stringstream aStrStream; diff --git a/xmlhelp/source/cxxhelp/inc/qe/DocGenerator.hxx b/xmlhelp/source/cxxhelp/inc/qe/DocGenerator.hxx index 66f7fc9271..46ca7405b8 100644 --- a/xmlhelp/source/cxxhelp/inc/qe/DocGenerator.hxx +++ b/xmlhelp/source/cxxhelp/inc/qe/DocGenerator.hxx @@ -1,107 +1,107 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: DocGenerator.hxx,v $ - * $Revision: 1.3 $ - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * - * for a copy of the LGPLv3 License. - * - ************************************************************************/ -#ifndef _XMLSEARCH_QE_DOCGENERATOR_HXX_ -#define _XMLSEARCH_QE_DOCGENERATOR_HXX_ - -#include -#ifndef _RTL_USTRING_HXX__ -#include -#endif -#include -#include -#include - - -namespace xmlsearch { - - namespace qe { - - - class Query; - - - class NonnegativeIntegerGenerator - { - public: - - static const sal_Int32 END; - - virtual ~NonnegativeIntegerGenerator() { }; - virtual sal_Int32 first() throw( xmlsearch::excep::XmlSearchException ) = 0; - virtual sal_Int32 next() throw( xmlsearch::excep::XmlSearchException ) = 0; - }; - - - class RoleFiller - { - public: - - static RoleFiller* STOP() { return &roleFiller_; } - - RoleFiller(); - - ~RoleFiller(); - - void acquire() { ++m_nRefcount; } - void release() { if( ! --m_nRefcount ) delete this; } - - private: - - static RoleFiller roleFiller_; - - sal_uInt32 m_nRefcount; - sal_uInt8 fixedRole_; - sal_Int16 filled_; - sal_Int32 begin_,end_,parentContext_,limit_; - - RoleFiller* next_; - std::vector< RoleFiller* > fillers_; - }; - - - class GeneratorHeap - { - public: - - GeneratorHeap() - : heapSize_( 0 ), - free_( 0 ) - { } - private: - - sal_Int32 heapSize_,free_; - }; - - - - } -} - -#endif +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: DocGenerator.hxx,v $ + * $Revision: 1.3 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ +#ifndef _XMLSEARCH_QE_DOCGENERATOR_HXX_ +#define _XMLSEARCH_QE_DOCGENERATOR_HXX_ + +#include +#ifndef _RTL_USTRING_HXX__ +#include +#endif +#include +#include +#include + + +namespace xmlsearch { + + namespace qe { + + + class Query; + + + class NonnegativeIntegerGenerator + { + public: + + static const sal_Int32 END; + + virtual ~NonnegativeIntegerGenerator() { }; + virtual sal_Int32 first() throw( xmlsearch::excep::XmlSearchException ) = 0; + virtual sal_Int32 next() throw( xmlsearch::excep::XmlSearchException ) = 0; + }; + + + class RoleFiller + { + public: + + static RoleFiller* STOP() { return &roleFiller_; } + + RoleFiller(); + + ~RoleFiller(); + + void acquire() { ++m_nRefcount; } + void release() { if( ! --m_nRefcount ) delete this; } + + private: + + static RoleFiller roleFiller_; + + sal_uInt32 m_nRefcount; + sal_uInt8 fixedRole_; + sal_Int16 filled_; + sal_Int32 begin_,end_,parentContext_,limit_; + + RoleFiller* next_; + std::vector< RoleFiller* > fillers_; + }; + + + class GeneratorHeap + { + public: + + GeneratorHeap() + : heapSize_( 0 ), + free_( 0 ) + { } + private: + + sal_Int32 heapSize_,free_; + }; + + + + } +} + +#endif diff --git a/xmlhelp/source/cxxhelp/inc/qe/Query.hxx b/xmlhelp/source/cxxhelp/inc/qe/Query.hxx index 336bc96282..cc72e77f71 100644 --- a/xmlhelp/source/cxxhelp/inc/qe/Query.hxx +++ b/xmlhelp/source/cxxhelp/inc/qe/Query.hxx @@ -1,178 +1,178 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: Query.hxx,v $ - * $Revision: 1.4 $ - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * - * for a copy of the LGPLv3 License. - * - ************************************************************************/ -#ifndef _XMLSEARCH_QE_QUERY_HXX_ -#define _XMLSEARCH_QE_QUERY_HXX_ - -#include -#include -#include -#include - - -namespace xmlsearch { - - namespace qe { - - class Search; - class RoleFiller; - - class QueryHit - { - public: - - QueryHit( sal_Int32 nColumns,double penalty,sal_Int32 doc,sal_Int32 begin,sal_Int32 end ) - : doc_( doc ), - begin_( begin ), - end_( end ), - matchesL_( 2*nColumns ), - matches_( new sal_Int32[ 2*nColumns ] ), - penalty_( penalty ) - { - rtl_zeroMemory( matches_,sizeof( sal_Int32 ) * matchesL_ ); - } - - ~QueryHit() { delete[] matches_; } - - sal_Int32 getDocument() const { return doc_; } - - sal_Int32 countOfMatches() const { return matchesL_; } - - sal_Int32 getBegin() const { return begin_; } - - sal_Int32 getEnd() const { return end_; } - - double getPenalty() const { return penalty_; } - - bool betterThan( const QueryHit* o ) - { - if( penalty_ != o->penalty_ ) - return penalty_ < o->penalty_; - else if( begin_ != o->begin_ ) - return begin_ < o->begin_; - else if( end_ != o->end_ ) - return end_ < o->end_; - else - return false; - } - - bool worseThan( const QueryHit* o ) - { - if( penalty_ != o->penalty_ ) - return penalty_ > o->penalty_; - else if( begin_ != o->begin_ ) - return begin_ > o->begin_; - else if( end_ != o->end_ ) - return end_ > o->end_; - else - return false; - } - - bool worseThan( double penalty,sal_Int32 begin,sal_Int32 end ) - { - if( penalty_ != penalty ) - return penalty_ > penalty; - else if( begin_ != begin ) - return begin_ > begin; - else if( end_ != end ) - return end_ > end; - else - return false; - } - - bool compareTo( const QueryHit* o ) const - { - if( penalty_ != o->penalty_ ) - return penalty_ < o->penalty_; - else if( begin_ != o->begin_ ) - return begin_ < o->begin_; - else if( end_ != o->end_ ) - return end_ < o->end_; - else - return false; - } - - - private: - - sal_Int32 doc_,begin_,end_; - - sal_Int32 matchesL_; - sal_Int32 *matches_; // ...concept, word number, ... - - double penalty_; - - }; // end class QueryHit - - - - class QueryHitData - { - public: - - QueryHitData( double penalty,const rtl::OUString& document,sal_Int32 termsL, rtl::OUString* terms ) - : penalty_( penalty ), - document_( document ), - termsL_( termsL ), - terms_( terms ) { } - - ~QueryHitData() { delete[] terms_; } - - rtl::OUString getDocument() const { return document_; } - - double getPenalty() const { return penalty_; } - - - private: - - double penalty_; - - const rtl::OUString document_; - - sal_Int32 termsL_; - rtl::OUString* terms_; - - }; // end class QueryHitData - - - class PrefixTranslator - { - public: - - static PrefixTranslator* makePrefixTranslator( const rtl::OUString*,sal_Int32 ) - { - return 0; - } - }; - } - -} - - -#endif +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: Query.hxx,v $ + * $Revision: 1.4 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ +#ifndef _XMLSEARCH_QE_QUERY_HXX_ +#define _XMLSEARCH_QE_QUERY_HXX_ + +#include +#include +#include +#include + + +namespace xmlsearch { + + namespace qe { + + class Search; + class RoleFiller; + + class QueryHit + { + public: + + QueryHit( sal_Int32 nColumns,double penalty,sal_Int32 doc,sal_Int32 begin,sal_Int32 end ) + : doc_( doc ), + begin_( begin ), + end_( end ), + matchesL_( 2*nColumns ), + matches_( new sal_Int32[ 2*nColumns ] ), + penalty_( penalty ) + { + rtl_zeroMemory( matches_,sizeof( sal_Int32 ) * matchesL_ ); + } + + ~QueryHit() { delete[] matches_; } + + sal_Int32 getDocument() const { return doc_; } + + sal_Int32 countOfMatches() const { return matchesL_; } + + sal_Int32 getBegin() const { return begin_; } + + sal_Int32 getEnd() const { return end_; } + + double getPenalty() const { return penalty_; } + + bool betterThan( const QueryHit* o ) + { + if( penalty_ != o->penalty_ ) + return penalty_ < o->penalty_; + else if( begin_ != o->begin_ ) + return begin_ < o->begin_; + else if( end_ != o->end_ ) + return end_ < o->end_; + else + return false; + } + + bool worseThan( const QueryHit* o ) + { + if( penalty_ != o->penalty_ ) + return penalty_ > o->penalty_; + else if( begin_ != o->begin_ ) + return begin_ > o->begin_; + else if( end_ != o->end_ ) + return end_ > o->end_; + else + return false; + } + + bool worseThan( double penalty,sal_Int32 begin,sal_Int32 end ) + { + if( penalty_ != penalty ) + return penalty_ > penalty; + else if( begin_ != begin ) + return begin_ > begin; + else if( end_ != end ) + return end_ > end; + else + return false; + } + + bool compareTo( const QueryHit* o ) const + { + if( penalty_ != o->penalty_ ) + return penalty_ < o->penalty_; + else if( begin_ != o->begin_ ) + return begin_ < o->begin_; + else if( end_ != o->end_ ) + return end_ < o->end_; + else + return false; + } + + + private: + + sal_Int32 doc_,begin_,end_; + + sal_Int32 matchesL_; + sal_Int32 *matches_; // ...concept, word number, ... + + double penalty_; + + }; // end class QueryHit + + + + class QueryHitData + { + public: + + QueryHitData( double penalty,const rtl::OUString& document,sal_Int32 termsL, rtl::OUString* terms ) + : penalty_( penalty ), + document_( document ), + termsL_( termsL ), + terms_( terms ) { } + + ~QueryHitData() { delete[] terms_; } + + rtl::OUString getDocument() const { return document_; } + + double getPenalty() const { return penalty_; } + + + private: + + double penalty_; + + const rtl::OUString document_; + + sal_Int32 termsL_; + rtl::OUString* terms_; + + }; // end class QueryHitData + + + class PrefixTranslator + { + public: + + static PrefixTranslator* makePrefixTranslator( const rtl::OUString*,sal_Int32 ) + { + return 0; + } + }; + } + +} + + +#endif diff --git a/xmlhelp/source/cxxhelp/provider/resultsetforquery.cxx b/xmlhelp/source/cxxhelp/provider/resultsetforquery.cxx index 0035c4fdf9..8239c1179b 100644 --- a/xmlhelp/source/cxxhelp/provider/resultsetforquery.cxx +++ b/xmlhelp/source/cxxhelp/provider/resultsetforquery.cxx @@ -46,8 +46,8 @@ #define INCLUDED_STL_SET #endif -#include -#include +#include +#include #include "resultsetforquery.hxx" #include "databases.hxx" @@ -159,8 +159,8 @@ ResultSetForQuery::ResultSetForQuery( const uno::Reference< lang::XMultiServiceF try { vector< vector* > aQueryListResultVectorVector; - set< rtl::OUString > aSet,aCurrent,aResultSet; - + set< rtl::OUString > aSet,aCurrent,aResultSet; + int nQueryListSize = queryList.size(); if( nQueryListSize > 1 ) hitCount = 2000; @@ -179,25 +179,25 @@ ResultSetForQuery::ResultSetForQuery( const uno::Reference< lang::XMultiServiceF } pQueryResultVector->reserve( hitCount ); - int nParamCount = bCaptionsOnly ? 7 : 6; - Sequence aParamsSeq( nParamCount ); - - aParamsSeq[0] = uno::makeAny( rtl::OUString::createFromAscii( "-lang" ) ); - aParamsSeq[1] = uno::makeAny( m_aURLParameter.get_language() ); - - aParamsSeq[2] = uno::makeAny( rtl::OUString::createFromAscii( "-index" ) ); - rtl::OUString aSystemPath; - osl::FileBase::getSystemPathFromFileURL( idxDir, aSystemPath ); - aParamsSeq[3] = uno::makeAny( aSystemPath ); - - aParamsSeq[4] = uno::makeAny( rtl::OUString::createFromAscii( "-query" ) ); - - const std::vector< rtl::OUString >& aListItem = queryList[i]; - ::rtl::OUString aNewQueryStr = aListItem[0]; - aParamsSeq[5] = uno::makeAny( aNewQueryStr ); - - if( bCaptionsOnly ) - aParamsSeq[6] = uno::makeAny( rtl::OUString::createFromAscii( "-caption" ) ); + int nParamCount = bCaptionsOnly ? 7 : 6; + Sequence aParamsSeq( nParamCount ); + + aParamsSeq[0] = uno::makeAny( rtl::OUString::createFromAscii( "-lang" ) ); + aParamsSeq[1] = uno::makeAny( m_aURLParameter.get_language() ); + + aParamsSeq[2] = uno::makeAny( rtl::OUString::createFromAscii( "-index" ) ); + rtl::OUString aSystemPath; + osl::FileBase::getSystemPathFromFileURL( idxDir, aSystemPath ); + aParamsSeq[3] = uno::makeAny( aSystemPath ); + + aParamsSeq[4] = uno::makeAny( rtl::OUString::createFromAscii( "-query" ) ); + + const std::vector< rtl::OUString >& aListItem = queryList[i]; + ::rtl::OUString aNewQueryStr = aListItem[0]; + aParamsSeq[5] = uno::makeAny( aNewQueryStr ); + + if( bCaptionsOnly ) + aParamsSeq[6] = uno::makeAny( rtl::OUString::createFromAscii( "-caption" ) ); Sequence< sal_Int16 > aOutParamIndex; Sequence< uno::Any > aOutParam; @@ -246,22 +246,22 @@ ResultSetForQuery::ResultSetForQuery( const uno::Reference< lang::XMultiServiceF } } - // intersect + // intersect if( nQueryListSize > 1 ) { - if( i == 0 ) - { - aResultSet = aSet; - } - else - { - aCurrent = aResultSet; - aResultSet.clear(); - set_intersection( aSet.begin(),aSet.end(), - aCurrent.begin(),aCurrent.end(), - inserter(aResultSet,aResultSet.begin())); - } - } + if( i == 0 ) + { + aResultSet = aSet; + } + else + { + aCurrent = aResultSet; + aResultSet.clear(); + set_intersection( aSet.begin(),aSet.end(), + aCurrent.begin(),aCurrent.end(), + inserter(aResultSet,aResultSet.begin())); + } + } } // Combine results in aIndexFolderResultVector diff --git a/xmlhelp/source/cxxhelp/provider/urlparameter.cxx b/xmlhelp/source/cxxhelp/provider/urlparameter.cxx index 4fac24adfd..113267dc04 100644 --- a/xmlhelp/source/cxxhelp/provider/urlparameter.cxx +++ b/xmlhelp/source/cxxhelp/provider/urlparameter.cxx @@ -996,7 +996,7 @@ InputStreamTransformer::InputStreamTransformer( URLParameter* urlParam, ::rtl::OUString aExtensionPath; rtl::OUString aJar = urlParam->get_jar(); - bool bAddExtensionPath = false; + bool bAddExtensionPath = false; sal_Int32 nQuestionMark1 = aJar.indexOf( sal_Unicode('?') ); sal_Int32 nQuestionMark2 = aJar.lastIndexOf( sal_Unicode('?') ); if( nQuestionMark1 != -1 && nQuestionMark2 != -1 && nQuestionMark1 != nQuestionMark2 ) diff --git a/xmlhelp/source/cxxhelp/qe/DocGenerator.cxx b/xmlhelp/source/cxxhelp/qe/DocGenerator.cxx index 0e8413ea2d..fd6c468fba 100644 --- a/xmlhelp/source/cxxhelp/qe/DocGenerator.cxx +++ b/xmlhelp/source/cxxhelp/qe/DocGenerator.cxx @@ -1,64 +1,64 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: DocGenerator.cxx,v $ - * $Revision: 1.10 $ - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_xmlhelp.hxx" -#include -#include - - -using namespace xmlsearch; -using namespace xmlsearch::qe; - - -const sal_Int32 NonnegativeIntegerGenerator::END = -1; - - -RoleFiller RoleFiller::roleFiller_; - - -RoleFiller::RoleFiller() - : m_nRefcount( 0 ), - fixedRole_( 0 ), - filled_( 0 ), - begin_( 0 ), - end_( 0 ), - parentContext_( 0 ), - limit_( 0 ), - next_( 0 ), - fillers_( 0 ) -{ -} - - -RoleFiller::~RoleFiller() -{ - -} +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: DocGenerator.cxx,v $ + * $Revision: 1.10 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_xmlhelp.hxx" +#include +#include + + +using namespace xmlsearch; +using namespace xmlsearch::qe; + + +const sal_Int32 NonnegativeIntegerGenerator::END = -1; + + +RoleFiller RoleFiller::roleFiller_; + + +RoleFiller::RoleFiller() + : m_nRefcount( 0 ), + fixedRole_( 0 ), + filled_( 0 ), + begin_( 0 ), + end_( 0 ), + parentContext_( 0 ), + limit_( 0 ), + next_( 0 ), + fillers_( 0 ) +{ +} + + +RoleFiller::~RoleFiller() +{ + +} diff --git a/xmlhelp/source/cxxhelp/util/Decompressor.cxx b/xmlhelp/source/cxxhelp/util/Decompressor.cxx index 972ebfe8c9..6d8acbd0d3 100644 --- a/xmlhelp/source/cxxhelp/util/Decompressor.cxx +++ b/xmlhelp/source/cxxhelp/util/Decompressor.cxx @@ -46,7 +46,7 @@ inline sal_Int32 getInteger_( const sal_Int8* v ) | v[2]&0xFF ) << 8 ) | v[3]&0xFF; } - + sal_Int32 StreamDecompressor::getNextByte() { sal_Int8 a[4]; -- cgit v1.2.3