Kaydet (Commit) d2f9e1a1 authored tarafından Tor Lillqvist's avatar Tor Lillqvist

More --disable-database-connectivity work

Bypass various database field and mail-merge functionality in the case
of !HAVE_FEATURE_DBCONNECTIVITY.

Now TiledLibreOffice builds and runs.

Change-Id: I9aa167413f426fe28d44dd063dc661f468ddc847
üst 739a5bcd
......@@ -17,6 +17,8 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#include <config_features.h>
#include <doc.hxx>
#include <DocumentSettingManager.hxx>
#include <UndoManager.hxx>
......@@ -318,7 +320,9 @@ void SwDoc::ChgDBData(const SwDBData& rNewData)
maDBData = rNewData;
SetModified();
}
#if HAVE_FEATURE_DBCONNECTIVITY
GetSysFldType(RES_DBNAMEFLD)->UpdateFlds();
#endif
}
bool SwDoc::SplitNode( const SwPosition &rPos, bool bChkTableStart )
......@@ -686,7 +690,7 @@ SwFlyFrmFmt* SwDoc::InsertOLE(const SwPaM &rRg, const OUString& rObjName,
SwFieldType *SwDoc::GetSysFldType( const sal_uInt16 eWhich ) const
{
for( sal_uInt16 i = 0; i < INIT_FLDTYPES; ++i )
if( eWhich == (*mpFldTypes)[i]->Which() )
if( (*mpFldTypes)[i] && eWhich == (*mpFldTypes)[i]->Which() )
return (*mpFldTypes)[i];
return 0;
}
......
......@@ -95,7 +95,8 @@ SwFieldType* SwDoc::InsertFldType(const SwFieldType &rFldTyp)
const ::utl::TransliterationWrapper& rSCmp = GetAppCmpStrIgnore();
OUString sFldNm( rFldTyp.GetName() );
for( ; i < nSize; ++i )
if( nFldWhich == (*mpFldTypes)[i]->Which() &&
if( (*mpFldTypes)[i] &&
nFldWhich == (*mpFldTypes)[i]->Which() &&
rSCmp.isEqual( sFldNm, (*mpFldTypes)[i]->GetName() ))
return (*mpFldTypes)[i];
}
......@@ -103,13 +104,15 @@ SwFieldType* SwDoc::InsertFldType(const SwFieldType &rFldTyp)
case RES_AUTHORITY:
for( ; i < nSize; ++i )
if( nFldWhich == (*mpFldTypes)[i]->Which() )
if( (*mpFldTypes)[i] &&
nFldWhich == (*mpFldTypes)[i]->Which() )
return (*mpFldTypes)[i];
break;
default:
for( i = 0; i < nSize; ++i )
if( nFldWhich == (*mpFldTypes)[i]->Which() )
if( (*mpFldTypes)[i] &&
nFldWhich == (*mpFldTypes)[i]->Which() )
return (*mpFldTypes)[i];
}
......@@ -164,7 +167,8 @@ void SwDoc::InsDeletedFldType( SwFieldType& rFldTyp )
SwFieldType* pFnd;
for( ; i < nSize; ++i )
if( nFldWhich == (pFnd = (*mpFldTypes)[i])->Which() &&
if( (*mpFldTypes)[i] &&
nFldWhich == (pFnd = (*mpFldTypes)[i])->Which() &&
rSCmp.isEqual( rFldNm, pFnd->GetName() ) )
{
// find new name
......@@ -172,7 +176,8 @@ void SwDoc::InsDeletedFldType( SwFieldType& rFldTyp )
do {
OUString sSrch = rFldNm + OUString::number( nNum );
for( i = INIT_FLDTYPES; i < nSize; ++i )
if( nFldWhich == (pFnd = (*mpFldTypes)[i])->Which() &&
if( (*mpFldTypes)[i] &&
nFldWhich == (pFnd = (*mpFldTypes)[i])->Which() &&
rSCmp.isEqual( sSrch, pFnd->GetName() ) )
break;
......@@ -210,7 +215,7 @@ void SwDoc::RemoveFldType(sal_uInt16 nFld)
* Dependent fields present -> ErrRaise
*/
sal_uInt16 nSize = mpFldTypes->size();
if(nFld < nSize)
if(nFld < nSize && (*mpFldTypes)[nFld])
{
SwFieldType* pTmp = (*mpFldTypes)[nFld];
......@@ -283,6 +288,9 @@ SwFieldType* SwDoc::GetFldType(
SwFieldType* pRet = 0;
for( ; i < nSize; ++i )
{
if( !(*mpFldTypes)[i] )
continue;
SwFieldType* pFldType = (*mpFldTypes)[i];
OUString aFldName( pFldType->GetName() );
......@@ -307,6 +315,9 @@ void SwDoc::UpdateFlds( SfxPoolItem *pNewHt, bool bCloseDB )
for( sal_uInt16 i=0; i < mpFldTypes->size(); ++i)
{
if( !(*mpFldTypes)[i] )
continue;
switch( (*mpFldTypes)[i]->Which() )
{
// Update table fields second to last
......@@ -364,13 +375,15 @@ void SwDoc::UpdateUsrFlds()
SwCalc* pCalc = 0;
const SwFieldType* pFldType;
for( sal_uInt16 i = INIT_FLDTYPES; i < mpFldTypes->size(); ++i )
if( RES_USERFLD == ( pFldType = (*mpFldTypes)[i] )->Which() )
{
if( (*mpFldTypes)[i] &&
RES_USERFLD == ( pFldType = (*mpFldTypes)[i] )->Which() )
{
if( !pCalc )
pCalc = new SwCalc( *this );
((SwUserFieldType*)pFldType)->GetValue( *pCalc );
}
}
if( pCalc )
{
delete pCalc;
......@@ -383,8 +396,11 @@ void SwDoc::UpdateRefFlds( SfxPoolItem* pHt )
{
SwFieldType* pFldType;
for( sal_uInt16 i = 0; i < mpFldTypes->size(); ++i )
if( RES_GETREFFLD == ( pFldType = (*mpFldTypes)[i] )->Which() )
{
if( (*mpFldTypes)[i] &&
RES_GETREFFLD == ( pFldType = (*mpFldTypes)[i] )->Which() )
pFldType->ModifyNotification( 0, pHt );
}
}
/// @note For simplicity assume that all field types have updatable contents so
......@@ -393,6 +409,9 @@ bool SwDoc::containsUpdatableFields()
{
for (sal_uInt16 i = 0; i < mpFldTypes->size(); ++i)
{
if( !(*mpFldTypes)[i] )
continue;
SwFieldType* pFldType = (*mpFldTypes)[i];
SwIterator<SwFmtFld,SwFieldType> aIter(*pFldType);
if (aIter.First())
......@@ -410,7 +429,8 @@ void SwDoc::UpdateTblFlds( SfxPoolItem* pHt )
for (sal_uInt16 i = 0; i < mpFldTypes->size(); ++i)
{
if( RES_TABLEFLD == ( pFldType = (*mpFldTypes)[i] )->Which() )
if( (*mpFldTypes)[i] &&
RES_TABLEFLD == ( pFldType = (*mpFldTypes)[i] )->Which() )
{
SwTableFmlUpdate* pUpdtFld = 0;
if( pHt && RES_TABLEFML_UPDATE == pHt->Which() )
......@@ -659,6 +679,9 @@ void SwDoc::UpdatePageFlds( SfxPoolItem* pMsgHnt )
{
SwFieldType* pFldType;
for( sal_uInt16 i = 0; i < INIT_FLDTYPES; ++i )
{
if( !(*mpFldTypes)[i] )
continue;
switch( ( pFldType = (*mpFldTypes)[ i ] )->Which() )
{
case RES_PAGENUMBERFLD:
......@@ -671,6 +694,7 @@ void SwDoc::UpdatePageFlds( SfxPoolItem* pMsgHnt )
pFldType->ModifyNotification( 0, 0 );
break;
}
}
SetNewFldLst(true);
}
......@@ -678,8 +702,12 @@ void SwDoc::UpdatePageFlds( SfxPoolItem* pMsgHnt )
void SwDoc::GCFieldTypes()
{
for( sal_uInt16 n = mpFldTypes->size(); n > INIT_FLDTYPES; )
if( !(*mpFldTypes)[ --n ]->GetDepends() )
{
if( !(*mpFldTypes)[--n] )
continue;
if( !(*mpFldTypes)[n]->GetDepends() )
RemoveFldType( n );
}
}
void SwDoc::LockExpFlds()
......@@ -1252,7 +1280,11 @@ void SwDoc::UpdateExpFlds( SwTxtFld* pUpdtFld, bool bUpdRefFlds )
const SwFieldType* pFldType;
// process separately:
for( n = mpFldTypes->size(); n; )
switch( ( pFldType = (*mpFldTypes)[ --n ] )->Which() )
{
if( !(*mpFldTypes)[--n] )
continue;
switch( ( pFldType = (*mpFldTypes)[n] )->Which() )
{
case RES_USERFLD:
{
......@@ -1274,6 +1306,7 @@ void SwDoc::UpdateExpFlds( SwTxtFld* pUpdtFld, bool bUpdRefFlds )
((SwSetExpFieldType*)pFldType)->SetOutlineChgNd( 0 );
break;
}
}
}
// The array is filled with all fields; start calculation.
......@@ -1596,7 +1629,11 @@ void SwDoc::_InitFieldTypes() // is being called by the CTOR
mpFldTypes->push_back( new SwPageNumberFieldType );
mpFldTypes->push_back( new SwAuthorFieldType );
mpFldTypes->push_back( new SwFileNameFieldType(this) );
#if HAVE_FEATURE_DBCONNECTIVITY
mpFldTypes->push_back( new SwDBNameFieldType(this) );
#else
mpFldTypes->push_back( NULL );
#endif
mpFldTypes->push_back( new SwGetExpFieldType(this) );
mpFldTypes->push_back( new SwGetRefFieldType( this ) );
mpFldTypes->push_back( new SwHiddenTxtFieldType );
......@@ -1611,6 +1648,10 @@ void SwDoc::_InitFieldTypes() // is being called by the CTOR
mpFldTypes->push_back( new SwDBNextSetFieldType );
mpFldTypes->push_back( new SwDBNumSetFieldType );
mpFldTypes->push_back( new SwDBSetNumberFieldType );
#else
mpFldTypes->push_back( NULL );
mpFldTypes->push_back( NULL );
mpFldTypes->push_back( NULL );
#endif
mpFldTypes->push_back( new SwTemplNameFieldType(this) );
mpFldTypes->push_back( new SwTemplNameFieldType(this) );
......@@ -1657,6 +1698,9 @@ const SwDBData& SwDoc::GetDBDesc()
const sal_uInt16 nSize = mpFldTypes->size();
for(sal_uInt16 i = 0; i < nSize && maDBData.sDataSource.isEmpty(); ++i)
{
if( !(*mpFldTypes)[i] )
continue;
SwFieldType& rFldType = *((*mpFldTypes)[i]);
sal_uInt16 nWhich = rFldType.Which();
if(IsUsed(rFldType))
......@@ -1923,8 +1967,8 @@ void SwDoc::ChangeDBFields( const std::vector<OUString>& rOldNames,
switch( pFld->GetTyp()->Which() )
{
case RES_DBFLD:
#if HAVE_FEATURE_DBCONNECTIVITY
case RES_DBFLD:
if( IsNameInArray( rOldNames, lcl_DBDataToString(((SwDBField*)pFld)->GetDBData())))
{
SwDBFieldType* pOldTyp = (SwDBFieldType*)pFld->GetTyp();
......@@ -1940,7 +1984,6 @@ void SwDoc::ChangeDBFields( const std::vector<OUString>& rOldNames,
bExpand = true;
}
#endif
break;
case RES_DBSETNUMBERFLD:
......@@ -1961,6 +2004,7 @@ void SwDoc::ChangeDBFields( const std::vector<OUString>& rOldNames,
((SwDBNameInfField*)pFld)->SetDBData(aNewDBData);
bExpand = true;
}
#endif
// no break;
case RES_HIDDENTXTFLD:
case RES_HIDDENPARAFLD:
......@@ -2203,7 +2247,7 @@ void SwDoc::ChangeAuthorityData( const SwAuthEntry* pNewData )
for( sal_uInt16 i = INIT_FLDTYPES; i < nSize; ++i )
{
SwFieldType* pFldType = (*mpFldTypes)[i];
if( RES_AUTHORITY == pFldType->Which() )
if( pFldType && RES_AUTHORITY == pFldType->Which() )
{
SwAuthorityFieldType* pAuthType = (SwAuthorityFieldType*)pFldType;
pAuthType->ChangeEntryContent(pNewData);
......@@ -2691,6 +2735,7 @@ bool SwDoc::UpdateFld(SwTxtFld * pDstTxtFld, SwField & rSrcFld,
ModifyNotification( 0, pDstFmtFld );
break;
#if HAVE_FEATURE_DBCONNECTIVITY
case RES_DBNAMEFLD:
case RES_DBNEXTSETFLD:
case RES_DBNUMSETFLD:
......@@ -2701,7 +2746,6 @@ bool SwDoc::UpdateFld(SwTxtFld * pDstTxtFld, SwField & rSrcFld,
break;
case RES_DBFLD:
#if HAVE_FEATURE_DBCONNECTIVITY
{
// JP 10.02.96: call ChgValue, so that the style change sets the
// ContentString correctly
......
......@@ -17,6 +17,8 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#include <config_features.h>
#include "SwXFilterOptions.hxx"
#include "unofreg.hxx"
#include <sal/types.h>
......@@ -204,6 +206,7 @@ SAL_DLLPUBLIC_EXPORT void * SAL_CALL sw_component_getFactory(
SwXModule_createInstance,
SwXModule_getSupportedServiceNames() );
}
#if HAVE_FEATURE_DBCONNECTIVITY
else if( SwXMailMerge_getImplementationName().equalsAsciiL(
pImplName, nImplNameLen ) )
{
......@@ -212,6 +215,7 @@ SAL_DLLPUBLIC_EXPORT void * SAL_CALL sw_component_getFactory(
SwXMailMerge_createInstance,
SwXMailMerge_getSupportedServiceNames() );
}
#endif
else if( SwXFilterOptions::getImplementationName_Static().equalsAsciiL(
pImplName, nImplNameLen ) )
{
......
......@@ -2774,6 +2774,9 @@ uno::Sequence< OUString > SwXTextFieldMasters::getElementNames(void)
std::vector<OUString> aFldNames;
for( size_t i = 0; i < nCount; ++i )
{
if (!(*pFldTypes)[i])
continue;
SwFieldType& rFldType = *((*pFldTypes)[i]);
OUString sFldName;
......@@ -2979,6 +2982,8 @@ SwXFieldEnumeration::SwXFieldEnumeration(SwDoc & rDoc)
sal_uInt16 nCount = pFldTypes->size();
for(sal_uInt16 nType = 0; nType < nCount; ++nType)
{
if( !(*pFldTypes)[nType] )
continue;
const SwFieldType *pCurType = (*pFldTypes)[nType];
SwIterator<SwFmtFld,SwFieldType> aIter( *pCurType );
const SwFmtFld* pCurFldFmt = aIter.First();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment