2000-12-15 11:12:42 +00:00
|
|
|
/*************************************************************************
|
|
|
|
*
|
2008-04-10 15:14:58 +00:00
|
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
2000-12-15 11:12:42 +00:00
|
|
|
*
|
2008-04-10 15:14:58 +00:00
|
|
|
* Copyright 2008 by Sun Microsystems, Inc.
|
2000-12-15 11:12:42 +00:00
|
|
|
*
|
2008-04-10 15:14:58 +00:00
|
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
2000-12-15 11:12:42 +00:00
|
|
|
*
|
2008-04-10 15:14:58 +00:00
|
|
|
* $RCSfile: unocrsrhelper.cxx,v $
|
2008-04-18 12:17:18 +00:00
|
|
|
*
|
2008-07-21 11:54:10 +00:00
|
|
|
* $Revision: 1.35 $
|
2000-12-15 11:12:42 +00:00
|
|
|
*
|
2008-04-10 15:14:58 +00:00
|
|
|
* This file is part of OpenOffice.org.
|
2000-12-15 11:12:42 +00:00
|
|
|
*
|
2008-04-10 15:14:58 +00:00
|
|
|
* 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.
|
2000-12-15 11:12:42 +00:00
|
|
|
*
|
2008-04-10 15:14:58 +00:00
|
|
|
* 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).
|
2000-12-15 11:12:42 +00:00
|
|
|
*
|
2008-04-10 15:14:58 +00:00
|
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
|
|
* version 3 along with OpenOffice.org. If not, see
|
|
|
|
* <http://www.openoffice.org/license.html>
|
|
|
|
* for a copy of the LGPLv3 License.
|
2000-12-15 11:12:42 +00:00
|
|
|
*
|
|
|
|
************************************************************************/
|
|
|
|
|
2006-09-16 20:55:59 +00:00
|
|
|
// MARKER(update_precomp.py): autogen include statement, do not remove
|
|
|
|
#include "precompiled_sw.hxx"
|
|
|
|
|
2000-12-15 11:12:42 +00:00
|
|
|
|
|
|
|
#include <cmdid.h>
|
|
|
|
#include <unocrsrhelper.hxx>
|
|
|
|
#include <unoobj.hxx>
|
|
|
|
#include <unostyle.hxx>
|
|
|
|
#include <unoidx.hxx>
|
|
|
|
#include <unofield.hxx>
|
|
|
|
#include <unotbl.hxx>
|
|
|
|
#include <unosett.hxx>
|
|
|
|
#include <unoframe.hxx>
|
2004-08-11 14:41:58 +00:00
|
|
|
#include <doc.hxx>
|
2008-04-18 12:17:18 +00:00
|
|
|
#include <IDocumentRedlineAccess.hxx>
|
2000-12-15 11:12:42 +00:00
|
|
|
#include <fmtftn.hxx>
|
|
|
|
#include <fmtpdsc.hxx>
|
|
|
|
#include <charfmt.hxx>
|
|
|
|
#include <pagedesc.hxx>
|
|
|
|
#include <docstyle.hxx>
|
|
|
|
#include <ndtxt.hxx>
|
|
|
|
#include <txtrfmrk.hxx>
|
|
|
|
#include <fmtfld.hxx>
|
|
|
|
#include <docsh.hxx>
|
|
|
|
#include <section.hxx>
|
|
|
|
#include <shellio.hxx>
|
|
|
|
#include <edimp.hxx>
|
|
|
|
#include <swundo.hxx>
|
|
|
|
#include <cntfrm.hxx>
|
|
|
|
#include <pagefrm.hxx>
|
|
|
|
#include <svtools/eitem.hxx>
|
|
|
|
#include <tools/urlobj.hxx>
|
|
|
|
#include <docary.hxx>
|
|
|
|
#include <swtable.hxx>
|
|
|
|
#include <tox.hxx>
|
2003-03-27 14:45:43 +00:00
|
|
|
#include <fchrfmt.hxx>
|
2000-12-15 11:12:42 +00:00
|
|
|
#include <svx/flstitem.hxx>
|
|
|
|
#include <vcl/metric.hxx>
|
|
|
|
#include <svtools/ctrltool.hxx>
|
2003-03-27 14:45:43 +00:00
|
|
|
#define _SVSTDARR_USHORTS
|
|
|
|
#define _SVSTDARR_USHORTSSORT
|
|
|
|
#include <svtools/svstdarr.hxx>
|
2000-12-15 11:12:42 +00:00
|
|
|
#include <sfx2/docfilt.hxx>
|
|
|
|
#include <sfx2/docfile.hxx>
|
|
|
|
#include <sfx2/fcontnr.hxx>
|
|
|
|
#include <svtools/stritem.hxx>
|
|
|
|
#include <com/sun/star/beans/PropertyState.hpp>
|
2001-07-19 15:32:24 +00:00
|
|
|
#include <SwStyleNameMapper.hxx>
|
2008-04-18 12:17:18 +00:00
|
|
|
#include <redline.hxx>
|
2008-03-05 16:11:31 +00:00
|
|
|
#include <numrule.hxx>
|
2008-01-29 08:23:14 +00:00
|
|
|
#include <comphelper/storagehelper.hxx>
|
|
|
|
#include <comphelper/mediadescriptor.hxx>
|
2008-04-18 12:17:18 +00:00
|
|
|
#include <comphelper/sequenceashashmap.hxx>
|
2008-01-29 08:23:14 +00:00
|
|
|
#include <com/sun/star/embed/ElementModes.hpp>
|
|
|
|
#include <com/sun/star/embed/XStorage.hpp>
|
2008-12-11 09:52:14 +00:00
|
|
|
// --> OD 2008-11-26 #158694#
|
|
|
|
#include <SwNodeNum.hxx>
|
|
|
|
// <--
|
2000-12-15 11:12:42 +00:00
|
|
|
|
2007-06-05 16:32:14 +00:00
|
|
|
using namespace ::com::sun::star;
|
2000-12-15 11:12:42 +00:00
|
|
|
using namespace ::com::sun::star::uno;
|
|
|
|
using namespace ::com::sun::star::beans;
|
|
|
|
using namespace ::com::sun::star::text;
|
|
|
|
using namespace ::com::sun::star::table;
|
|
|
|
using namespace ::com::sun::star::container;
|
|
|
|
using namespace ::com::sun::star::lang;
|
2008-03-12 11:27:55 +00:00
|
|
|
using ::rtl::OUString;
|
2000-12-15 11:12:42 +00:00
|
|
|
|
|
|
|
|
|
|
|
namespace SwUnoCursorHelper
|
|
|
|
{
|
|
|
|
/* -----------------16.09.98 12:27-------------------
|
|
|
|
* Lesen spezieller Properties am Cursor
|
|
|
|
* --------------------------------------------------*/
|
|
|
|
sal_Bool getCrsrPropertyValue(const SfxItemPropertyMap* pMap
|
|
|
|
, SwPaM& rPam
|
2001-06-07 07:01:20 +00:00
|
|
|
, Any *pAny
|
2001-05-09 08:28:33 +00:00
|
|
|
, PropertyState& eState
|
|
|
|
, const SwTxtNode* pNode )
|
2000-12-15 11:12:42 +00:00
|
|
|
{
|
2001-06-07 07:01:20 +00:00
|
|
|
PropertyState eNewState = PropertyState_DIRECT_VALUE;
|
2000-12-15 11:12:42 +00:00
|
|
|
// PropertyState_DEFAULT_VALUE
|
|
|
|
// PropertyState_AMBIGUOUS_VALUE
|
|
|
|
sal_Bool bDone = sal_True;
|
|
|
|
switch(pMap->nWID)
|
|
|
|
{
|
2008-12-11 09:52:14 +00:00
|
|
|
// --> OD 2008-11-26 #158694#
|
|
|
|
case FN_UNO_PARA_CONT_PREV_SUBTREE:
|
|
|
|
if (pAny)
|
|
|
|
{
|
|
|
|
const SwTxtNode * pTmpNode = pNode;
|
|
|
|
|
|
|
|
if (!pTmpNode)
|
|
|
|
pTmpNode = rPam.GetNode()->GetTxtNode();
|
|
|
|
|
|
|
|
bool bRet = false;
|
|
|
|
|
|
|
|
if ( pTmpNode &&
|
|
|
|
pTmpNode->GetNum() &&
|
|
|
|
pTmpNode->GetNum()->IsContinueingPreviousSubTree() )
|
|
|
|
{
|
|
|
|
bRet = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
*pAny <<= bRet;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case FN_UNO_PARA_NUM_STRING:
|
|
|
|
if (pAny)
|
|
|
|
{
|
|
|
|
const SwTxtNode * pTmpNode = pNode;
|
|
|
|
|
|
|
|
if (!pTmpNode)
|
|
|
|
pTmpNode = rPam.GetNode()->GetTxtNode();
|
|
|
|
|
|
|
|
String sRet;
|
|
|
|
if ( pTmpNode && pTmpNode->GetNum() )
|
|
|
|
{
|
|
|
|
sRet = pTmpNode->GetNumString();
|
|
|
|
}
|
|
|
|
|
|
|
|
*pAny <<= OUString(sRet);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
// <--
|
2000-12-15 11:12:42 +00:00
|
|
|
case FN_UNO_PARA_CHAPTER_NUMBERING_LEVEL:
|
2004-11-26 12:26:36 +00:00
|
|
|
if (pAny)
|
|
|
|
{
|
|
|
|
const SwTxtNode * pTmpNode = pNode;
|
|
|
|
|
|
|
|
if (!pTmpNode)
|
|
|
|
pTmpNode = rPam.GetNode()->GetTxtNode();
|
|
|
|
|
|
|
|
sal_Int8 nRet = -1;
|
|
|
|
if (pTmpNode && pTmpNode->GetOutlineLevel() != NO_NUMBERING)
|
2007-09-27 08:35:26 +00:00
|
|
|
nRet = sal::static_int_cast< sal_Int8 >(pTmpNode->GetOutlineLevel());
|
2004-11-26 12:26:36 +00:00
|
|
|
|
|
|
|
*pAny <<= nRet;
|
|
|
|
}
|
2000-12-15 11:12:42 +00:00
|
|
|
break;
|
|
|
|
case FN_UNO_PARA_CONDITIONAL_STYLE_NAME:
|
|
|
|
case FN_UNO_PARA_STYLE :
|
|
|
|
{
|
2001-05-09 08:28:33 +00:00
|
|
|
SwFmtColl* pFmt = 0;
|
|
|
|
if(pNode)
|
|
|
|
pFmt = FN_UNO_PARA_CONDITIONAL_STYLE_NAME == pMap->nWID
|
|
|
|
? pNode->GetFmtColl() : &pNode->GetAnyFmtColl();
|
|
|
|
else
|
|
|
|
pFmt = SwXTextCursor::GetCurTxtFmtColl(rPam, FN_UNO_PARA_CONDITIONAL_STYLE_NAME == pMap->nWID);
|
2000-12-15 11:12:42 +00:00
|
|
|
if(pFmt)
|
2001-06-07 07:01:20 +00:00
|
|
|
{
|
|
|
|
if( pAny )
|
|
|
|
{
|
2001-08-16 11:33:56 +00:00
|
|
|
String sVal;
|
2007-09-27 08:35:26 +00:00
|
|
|
SwStyleNameMapper::FillProgName(pFmt->GetName(), sVal, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL, sal_True );
|
2001-06-07 07:01:20 +00:00
|
|
|
*pAny <<= OUString(sVal);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
eNewState = PropertyState_AMBIGUOUS_VALUE;
|
2000-12-15 11:12:42 +00:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
case FN_UNO_PAGE_STYLE :
|
|
|
|
{
|
2001-10-09 13:56:23 +00:00
|
|
|
String sVal;
|
|
|
|
GetCurPageStyle(rPam, sVal);
|
2001-06-07 07:01:20 +00:00
|
|
|
if( pAny )
|
|
|
|
*pAny <<= OUString(sVal);
|
2000-12-15 11:12:42 +00:00
|
|
|
if(!sVal.Len())
|
2001-06-07 07:01:20 +00:00
|
|
|
eNewState = PropertyState_AMBIGUOUS_VALUE;
|
2000-12-15 11:12:42 +00:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
case FN_UNO_NUM_START_VALUE :
|
2001-06-07 07:01:20 +00:00
|
|
|
if( pAny )
|
|
|
|
{
|
|
|
|
sal_Int16 nValue = IsNodeNumStart(rPam, eNewState);
|
|
|
|
*pAny <<= nValue;
|
|
|
|
}
|
2000-12-15 11:12:42 +00:00
|
|
|
break;
|
|
|
|
case FN_UNO_NUM_LEVEL :
|
|
|
|
case FN_UNO_IS_NUMBER :
|
2008-07-21 11:54:10 +00:00
|
|
|
// --> OD 2008-07-14 #i91601#
|
|
|
|
case FN_UNO_LIST_ID:
|
|
|
|
// <--
|
2000-12-15 11:12:42 +00:00
|
|
|
case FN_NUMBER_NEWSTART:
|
|
|
|
{
|
|
|
|
const SwTxtNode* pTxtNd = rPam.GetNode()->GetTxtNode();
|
2006-11-01 14:13:29 +00:00
|
|
|
// --> OD 2006-10-19 #134160# - make code robust:
|
|
|
|
// consider case that PaM doesn't denote a text node
|
|
|
|
const SwNumRule* pRule = pTxtNd ? pTxtNd->GetNumRule() : 0;
|
|
|
|
// <--
|
2000-12-15 11:12:42 +00:00
|
|
|
// hier wird Multiselektion nicht beruecksichtigt
|
2005-11-08 16:24:07 +00:00
|
|
|
if( pRule )
|
2000-12-15 11:12:42 +00:00
|
|
|
{
|
2001-06-07 07:01:20 +00:00
|
|
|
if( pAny )
|
2000-12-15 11:12:42 +00:00
|
|
|
{
|
2001-06-07 07:01:20 +00:00
|
|
|
if(pMap->nWID == FN_UNO_NUM_LEVEL)
|
2008-06-13 09:30:48 +00:00
|
|
|
*pAny <<= (sal_Int16)(pTxtNd->GetActualListLevel());
|
2001-06-07 07:01:20 +00:00
|
|
|
else if(pMap->nWID == FN_UNO_IS_NUMBER)
|
|
|
|
{
|
2008-06-13 09:30:48 +00:00
|
|
|
BOOL bIsNumber = pTxtNd->IsCountedInList();
|
2001-06-07 07:01:20 +00:00
|
|
|
pAny->setValue(&bIsNumber, ::getBooleanCppuType());
|
|
|
|
}
|
2008-07-21 11:54:10 +00:00
|
|
|
// --> OD 2008-07-14 #i91601#
|
|
|
|
else if ( pMap->nWID == FN_UNO_LIST_ID )
|
|
|
|
{
|
|
|
|
const String sListId = pTxtNd->GetListId();
|
|
|
|
*pAny <<= OUString(sListId);
|
|
|
|
}
|
|
|
|
// <--
|
2001-06-07 07:01:20 +00:00
|
|
|
else /*if(pMap->nWID == UNO_NAME_PARA_IS_NUMBERING_RESTART)*/
|
|
|
|
{
|
2008-06-13 09:30:48 +00:00
|
|
|
BOOL bIsRestart = pTxtNd->IsListRestart();
|
2001-06-07 07:01:20 +00:00
|
|
|
pAny->setValue(&bIsRestart, ::getBooleanCppuType());
|
|
|
|
}
|
2000-12-15 11:12:42 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
2004-11-09 12:51:12 +00:00
|
|
|
{
|
2001-06-07 07:01:20 +00:00
|
|
|
eNewState = PropertyState_DEFAULT_VALUE;
|
2004-11-09 12:51:12 +00:00
|
|
|
|
2004-12-07 09:43:19 +00:00
|
|
|
if( pAny )
|
|
|
|
{
|
|
|
|
// #i30838# set default values for default properties
|
|
|
|
if(pMap->nWID == FN_UNO_NUM_LEVEL)
|
|
|
|
*pAny <<= static_cast<sal_Int16>( 0 );
|
|
|
|
else if(pMap->nWID == FN_UNO_IS_NUMBER)
|
|
|
|
*pAny <<= false;
|
2008-07-21 11:54:10 +00:00
|
|
|
// --> OD 2008-07-14 #i91601#
|
|
|
|
else if ( pMap->nWID == FN_UNO_LIST_ID )
|
|
|
|
{
|
|
|
|
*pAny <<= OUString();
|
|
|
|
}
|
|
|
|
// <--
|
2004-12-07 09:43:19 +00:00
|
|
|
else /*if(pMap->nWID == UNO_NAME_PARA_IS_NUMBERING_RESTART)*/
|
|
|
|
*pAny <<= false;
|
|
|
|
}
|
2004-11-09 12:51:12 +00:00
|
|
|
}
|
2000-12-15 11:12:42 +00:00
|
|
|
//PROPERTY_MAYBEVOID!
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case FN_UNO_NUM_RULES :
|
2001-06-07 07:01:20 +00:00
|
|
|
if( pAny )
|
2001-10-09 13:56:23 +00:00
|
|
|
getNumberingProperty(rPam, eNewState, pAny);
|
2000-12-15 11:12:42 +00:00
|
|
|
else
|
2001-06-07 07:01:20 +00:00
|
|
|
{
|
|
|
|
if( !rPam.GetDoc()->GetCurrNumRule( *rPam.GetPoint() ) )
|
|
|
|
eNewState = PropertyState_DEFAULT_VALUE;
|
|
|
|
}
|
|
|
|
break;
|
2000-12-15 11:12:42 +00:00
|
|
|
case FN_UNO_DOCUMENT_INDEX_MARK:
|
|
|
|
{
|
|
|
|
SwTxtAttr* pTxtAttr = rPam.GetNode()->GetTxtNode()->GetTxtAttr(
|
|
|
|
rPam.GetPoint()->nContent, RES_TXTATR_TOXMARK);
|
|
|
|
if(pTxtAttr)
|
|
|
|
{
|
2001-06-07 07:01:20 +00:00
|
|
|
if( pAny )
|
|
|
|
{
|
|
|
|
const SwTOXMark& rMark = pTxtAttr->GetTOXMark();
|
2007-06-05 16:32:14 +00:00
|
|
|
uno::Reference< XDocumentIndexMark > xRef = SwXDocumentIndexMark::GetObject(
|
2001-06-07 07:01:20 +00:00
|
|
|
(SwTOXType*)rMark.GetTOXType(), &rMark, rPam.GetDoc());
|
2007-06-05 16:32:14 +00:00
|
|
|
pAny->setValue(&xRef, ::getCppuType((uno::Reference<XDocumentIndex>*)0));
|
2001-06-07 07:01:20 +00:00
|
|
|
}
|
2000-12-15 11:12:42 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
//auch hier - nicht zu unterscheiden
|
2001-06-07 07:01:20 +00:00
|
|
|
eNewState = PropertyState_DEFAULT_VALUE;
|
2000-12-15 11:12:42 +00:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
case FN_UNO_DOCUMENT_INDEX:
|
|
|
|
{
|
|
|
|
const SwTOXBase* pBase = rPam.GetDoc()->GetCurTOX(
|
|
|
|
*rPam.Start() );
|
|
|
|
if( pBase )
|
|
|
|
{
|
2001-06-07 07:01:20 +00:00
|
|
|
if( pAny )
|
|
|
|
{
|
2007-06-05 16:32:14 +00:00
|
|
|
uno::Reference< XDocumentIndex > aRef =
|
2001-06-07 07:01:20 +00:00
|
|
|
SwXDocumentIndexes::GetObject((SwTOXBaseSection*)pBase);
|
2007-06-05 16:32:14 +00:00
|
|
|
pAny->setValue(&aRef, ::getCppuType((uno::Reference<XDocumentIndex>*)0));
|
2001-06-07 07:01:20 +00:00
|
|
|
}
|
2000-12-15 11:12:42 +00:00
|
|
|
}
|
|
|
|
else
|
2001-06-07 07:01:20 +00:00
|
|
|
eNewState = PropertyState_DEFAULT_VALUE;
|
2000-12-15 11:12:42 +00:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
case FN_UNO_TEXT_FIELD:
|
|
|
|
{
|
|
|
|
const SwPosition *pPos = rPam.Start();
|
|
|
|
const SwTxtNode *pTxtNd =
|
|
|
|
rPam.GetDoc()->GetNodes()[pPos->nNode.GetIndex()]->GetTxtNode();
|
|
|
|
SwTxtAttr* pTxtAttr =
|
|
|
|
pTxtNd ? pTxtNd->GetTxtAttr(pPos->nContent, RES_TXTATR_FIELD)
|
|
|
|
: 0;
|
|
|
|
if(pTxtAttr)
|
|
|
|
{
|
2001-06-07 07:01:20 +00:00
|
|
|
if( pAny )
|
2000-12-15 11:12:42 +00:00
|
|
|
{
|
2001-06-07 07:01:20 +00:00
|
|
|
const SwFmtFld& rFld = pTxtAttr->GetFld();
|
|
|
|
SwClientIter aIter(*rFld.GetFld()->GetTyp());
|
|
|
|
SwXTextField* pFld = 0;
|
|
|
|
SwXTextField* pTemp = (SwXTextField*)aIter.First(TYPE(SwXTextField));
|
|
|
|
while(pTemp && !pFld)
|
|
|
|
{
|
|
|
|
if(pTemp->GetFldFmt() == &rFld)
|
|
|
|
pFld = pTemp;
|
|
|
|
pTemp = (SwXTextField*)aIter.Next();
|
|
|
|
}
|
|
|
|
if(!pFld)
|
|
|
|
pFld = new SwXTextField( rFld, rPam.GetDoc());
|
2007-06-05 16:32:14 +00:00
|
|
|
uno::Reference< XTextField > xRet = pFld;
|
|
|
|
pAny->setValue(&xRet, ::getCppuType((uno::Reference<XTextField>*)0));
|
2000-12-15 11:12:42 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
2001-06-07 07:01:20 +00:00
|
|
|
eNewState = PropertyState_DEFAULT_VALUE;
|
2000-12-15 11:12:42 +00:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
/* laesst sich nicht feststellen
|
|
|
|
* case FN_UNO_BOOKMARK:
|
|
|
|
{
|
|
|
|
if()
|
|
|
|
{
|
2007-06-05 16:32:14 +00:00
|
|
|
uno::Reference< XBookmark > xBkm = SwXBookmarks::GetObject(rBkm);
|
2000-12-15 11:12:42 +00:00
|
|
|
rAny.set(&xBkm, ::getCppuType((const XBookmark*)0)());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;*/
|
|
|
|
case FN_UNO_TEXT_TABLE:
|
|
|
|
case FN_UNO_CELL:
|
|
|
|
{
|
2006-08-14 15:53:40 +00:00
|
|
|
SwStartNode* pSttNode = rPam.GetNode()->StartOfSectionNode();
|
2000-12-15 11:12:42 +00:00
|
|
|
SwStartNodeType eType = pSttNode->GetStartNodeType();
|
|
|
|
if(SwTableBoxStartNode == eType)
|
|
|
|
{
|
2001-06-07 07:01:20 +00:00
|
|
|
if( pAny )
|
2000-12-15 11:12:42 +00:00
|
|
|
{
|
2001-06-07 07:01:20 +00:00
|
|
|
const SwTableNode* pTblNode = pSttNode->FindTableNode();
|
|
|
|
SwFrmFmt* pTableFmt = (SwFrmFmt*)pTblNode->GetTable().GetFrmFmt();
|
2007-09-27 08:35:26 +00:00
|
|
|
//SwTable& rTable = ((SwTableNode*)pSttNode)->GetTable();
|
2001-06-07 07:01:20 +00:00
|
|
|
if(FN_UNO_TEXT_TABLE == pMap->nWID)
|
|
|
|
{
|
2007-06-05 16:32:14 +00:00
|
|
|
uno::Reference< XTextTable > xTable = SwXTextTables::GetObject(*pTableFmt);
|
|
|
|
pAny->setValue(&xTable, ::getCppuType((uno::Reference<XTextTable>*)0));
|
2001-06-07 07:01:20 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
SwTableBox* pBox = pSttNode->GetTblBox();
|
2007-06-05 16:32:14 +00:00
|
|
|
uno::Reference< XCell > xCell = SwXCell::CreateXCell(pTableFmt, pBox);
|
|
|
|
pAny->setValue(&xCell, ::getCppuType((uno::Reference<XCell>*)0));
|
2001-06-07 07:01:20 +00:00
|
|
|
}
|
2000-12-15 11:12:42 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
2001-06-07 07:01:20 +00:00
|
|
|
eNewState = PropertyState_DEFAULT_VALUE;
|
2000-12-15 11:12:42 +00:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
case FN_UNO_TEXT_FRAME:
|
|
|
|
{
|
2006-08-14 15:53:40 +00:00
|
|
|
SwStartNode* pSttNode = rPam.GetNode()->StartOfSectionNode();
|
2000-12-15 11:12:42 +00:00
|
|
|
SwStartNodeType eType = pSttNode->GetStartNodeType();
|
|
|
|
|
|
|
|
SwFrmFmt* pFmt;
|
|
|
|
if(eType == SwFlyStartNode && 0 != (pFmt = pSttNode->GetFlyFmt()))
|
|
|
|
{
|
2001-06-07 07:01:20 +00:00
|
|
|
if( pAny )
|
|
|
|
{
|
2007-06-05 16:32:14 +00:00
|
|
|
uno::Reference< XTextFrame > xFrm = (SwXTextFrame*) SwXFrames::GetObject(*pFmt, FLYCNTTYPE_FRM);
|
|
|
|
pAny->setValue(&xFrm, ::getCppuType((uno::Reference<XTextFrame>*)0));
|
2001-06-07 07:01:20 +00:00
|
|
|
}
|
2000-12-15 11:12:42 +00:00
|
|
|
}
|
|
|
|
else
|
2001-06-07 07:01:20 +00:00
|
|
|
eNewState = PropertyState_DEFAULT_VALUE;
|
2000-12-15 11:12:42 +00:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
case FN_UNO_TEXT_SECTION:
|
|
|
|
{
|
|
|
|
SwSection* pSect = rPam.GetDoc()->GetCurrSection(*rPam.GetPoint());
|
|
|
|
if(pSect)
|
|
|
|
{
|
2001-06-07 07:01:20 +00:00
|
|
|
if( pAny )
|
|
|
|
{
|
2007-06-05 16:32:14 +00:00
|
|
|
uno::Reference< XTextSection > xSect = SwXTextSections::GetObject( *pSect->GetFmt() );
|
|
|
|
pAny->setValue(&xSect, ::getCppuType((uno::Reference<XTextSection>*)0) );
|
2001-06-07 07:01:20 +00:00
|
|
|
}
|
2000-12-15 11:12:42 +00:00
|
|
|
}
|
|
|
|
else
|
2001-06-07 07:01:20 +00:00
|
|
|
eNewState = PropertyState_DEFAULT_VALUE;
|
2000-12-15 11:12:42 +00:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
case FN_UNO_ENDNOTE:
|
|
|
|
case FN_UNO_FOOTNOTE:
|
|
|
|
{
|
|
|
|
SwTxtAttr* pTxtAttr = rPam.GetNode()->GetTxtNode()->
|
|
|
|
GetTxtAttr(rPam.GetPoint()->nContent, RES_TXTATR_FTN);
|
|
|
|
if(pTxtAttr)
|
|
|
|
{
|
|
|
|
const SwFmtFtn& rFtn = pTxtAttr->GetFtn();
|
|
|
|
if(rFtn.IsEndNote() == (FN_UNO_ENDNOTE == pMap->nWID))
|
|
|
|
{
|
2001-06-07 07:01:20 +00:00
|
|
|
if( pAny )
|
|
|
|
{
|
2007-06-05 16:32:14 +00:00
|
|
|
uno::Reference< XFootnote > xFoot = new SwXFootnote(rPam.GetDoc(), rFtn);
|
|
|
|
pAny->setValue(&xFoot, ::getCppuType((uno::Reference<XFootnote>*)0));
|
2001-06-07 07:01:20 +00:00
|
|
|
}
|
2000-12-15 11:12:42 +00:00
|
|
|
}
|
|
|
|
else
|
2001-06-07 07:01:20 +00:00
|
|
|
eNewState = PropertyState_DEFAULT_VALUE;
|
2000-12-15 11:12:42 +00:00
|
|
|
}
|
|
|
|
else
|
2001-06-07 07:01:20 +00:00
|
|
|
eNewState = PropertyState_DEFAULT_VALUE;
|
2000-12-15 11:12:42 +00:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
case FN_UNO_REFERENCE_MARK:
|
|
|
|
{
|
|
|
|
SwTxtAttr* pTxtAttr = rPam.GetNode()->GetTxtNode()->
|
|
|
|
GetTxtAttr(rPam.GetPoint()->nContent, RES_TXTATR_REFMARK);
|
|
|
|
if(pTxtAttr)
|
|
|
|
{
|
2001-06-07 07:01:20 +00:00
|
|
|
if( pAny )
|
|
|
|
{
|
|
|
|
const SwFmtRefMark& rRef = pTxtAttr->GetRefMark();
|
2007-06-05 16:32:14 +00:00
|
|
|
uno::Reference< XTextContent > xRef = SwXReferenceMarks::GetObject( rPam.GetDoc(), &rRef );
|
|
|
|
pAny->setValue(&xRef, ::getCppuType((uno::Reference<XTextContent>*)0));
|
2001-06-07 07:01:20 +00:00
|
|
|
}
|
2000-12-15 11:12:42 +00:00
|
|
|
}
|
|
|
|
else
|
2001-06-07 07:01:20 +00:00
|
|
|
eNewState = PropertyState_DEFAULT_VALUE;
|
2000-12-15 11:12:42 +00:00
|
|
|
}
|
|
|
|
break;
|
2003-03-27 14:45:43 +00:00
|
|
|
case FN_UNO_CHARFMT_SEQUENCE:
|
|
|
|
{
|
|
|
|
|
|
|
|
SwTxtNode* pTxtNode;
|
|
|
|
if((pTxtNode = (SwTxtNode*)rPam.GetNode( TRUE )) == rPam.GetNode(FALSE) &&
|
|
|
|
pTxtNode->GetpSwpHints())
|
|
|
|
{
|
|
|
|
USHORT nPaMStart = rPam.GetPoint()->nContent.GetIndex();
|
|
|
|
USHORT nPaMEnd = rPam.GetMark() ? rPam.GetMark()->nContent.GetIndex() : nPaMStart;
|
|
|
|
if(nPaMStart > nPaMEnd)
|
|
|
|
{
|
|
|
|
USHORT nTmp = nPaMStart;
|
|
|
|
nPaMStart = nPaMEnd;
|
|
|
|
nPaMEnd = nTmp;
|
|
|
|
}
|
|
|
|
Sequence< ::rtl::OUString> aCharStyles;
|
|
|
|
SwpHints* pHints = pTxtNode->GetpSwpHints();
|
|
|
|
for(USHORT nAttr = 0; nAttr < pHints->GetStartCount(); nAttr++ )
|
|
|
|
{
|
|
|
|
SwTxtAttr* pAttr = pHints->GetStart( nAttr );
|
|
|
|
if(pAttr->Which() != RES_TXTATR_CHARFMT)
|
|
|
|
continue;
|
|
|
|
USHORT nAttrStart = *pAttr->GetStart();
|
|
|
|
USHORT nAttrEnd = *pAttr->GetEnd();
|
|
|
|
//check if the attribute touches the selection
|
2006-12-01 14:51:23 +00:00
|
|
|
if( ( nAttrEnd > nPaMStart && nAttrStart < nPaMEnd ) ||
|
|
|
|
( !nAttrStart && !nAttrEnd && !nPaMStart && !nPaMEnd ) )
|
2003-03-27 14:45:43 +00:00
|
|
|
{
|
|
|
|
//check for overlapping
|
|
|
|
if(nAttrStart > nPaMStart ||
|
|
|
|
nAttrEnd < nPaMEnd)
|
|
|
|
{
|
|
|
|
aCharStyles.realloc(0);
|
|
|
|
eNewState = PropertyState_AMBIGUOUS_VALUE;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
//now the attribute should start before or at the selection
|
|
|
|
//and it should end at the end of the selection or behind
|
|
|
|
DBG_ASSERT(nAttrStart <= nPaMStart && nAttrEnd >=nPaMEnd,
|
|
|
|
"attribute overlaps or is outside");
|
|
|
|
//now the name of the style has to be added to the sequence
|
|
|
|
aCharStyles.realloc(aCharStyles.getLength() + 1);
|
|
|
|
DBG_ASSERT(pAttr->GetCharFmt().GetCharFmt(), "no character format set");
|
|
|
|
aCharStyles.getArray()[aCharStyles.getLength() - 1] =
|
|
|
|
SwStyleNameMapper::GetProgName(
|
2007-09-27 08:35:26 +00:00
|
|
|
pAttr->GetCharFmt().GetCharFmt()->GetName(), nsSwGetPoolIdFromName::GET_POOLID_CHRFMT);
|
2003-03-27 14:45:43 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
if(aCharStyles.getLength())
|
|
|
|
eNewState = PropertyState_DIRECT_VALUE;
|
|
|
|
if(pAny)
|
|
|
|
(*pAny) <<= aCharStyles;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
eNewState = PropertyState_DEFAULT_VALUE;
|
|
|
|
}
|
|
|
|
break;
|
2000-12-15 11:12:42 +00:00
|
|
|
case RES_TXTATR_CHARFMT:
|
|
|
|
// kein break hier!
|
|
|
|
default: bDone = sal_False;
|
|
|
|
}
|
2001-06-07 07:01:20 +00:00
|
|
|
if( bDone )
|
|
|
|
eState = eNewState;
|
2000-12-15 11:12:42 +00:00
|
|
|
return bDone;
|
|
|
|
};
|
|
|
|
/* -----------------30.06.98 10:30-------------------
|
|
|
|
*
|
|
|
|
* --------------------------------------------------*/
|
|
|
|
sal_Int16 IsNodeNumStart(SwPaM& rPam, PropertyState& eState)
|
|
|
|
{
|
|
|
|
const SwTxtNode* pTxtNd = rPam.GetNode()->GetTxtNode();
|
2008-06-13 09:30:48 +00:00
|
|
|
// --> OD 2008-02-28 #refactorlists#
|
|
|
|
// correction: check, if restart value is set at the text node and use
|
|
|
|
// new method <SwTxtNode::GetAttrListRestartValue()> to retrieve the value
|
|
|
|
if ( pTxtNd && pTxtNd->GetNumRule() && pTxtNd->IsListRestart() &&
|
|
|
|
pTxtNd->HasAttrListRestartValue() )
|
2000-12-15 11:12:42 +00:00
|
|
|
{
|
|
|
|
eState = PropertyState_DIRECT_VALUE;
|
2008-06-13 09:30:48 +00:00
|
|
|
sal_Int16 nTmp = sal::static_int_cast< sal_Int16 >(pTxtNd->GetAttrListRestartValue());
|
2007-09-27 08:35:26 +00:00
|
|
|
return nTmp;
|
2000-12-15 11:12:42 +00:00
|
|
|
}
|
2008-06-13 09:30:48 +00:00
|
|
|
// <--
|
2000-12-15 11:12:42 +00:00
|
|
|
eState = PropertyState_DEFAULT_VALUE;
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* -----------------25.05.98 11:41-------------------
|
|
|
|
*
|
|
|
|
* --------------------------------------------------*/
|
|
|
|
void setNumberingProperty(const Any& rValue, SwPaM& rPam)
|
|
|
|
{
|
2007-06-05 16:32:14 +00:00
|
|
|
uno::Reference<XIndexReplace> xIndexReplace;
|
2001-10-22 13:05:42 +00:00
|
|
|
if(rValue >>= xIndexReplace)
|
2000-12-15 11:12:42 +00:00
|
|
|
{
|
|
|
|
SwXNumberingRules* pSwNum = 0;
|
|
|
|
|
2007-06-05 16:32:14 +00:00
|
|
|
uno::Reference<XUnoTunnel> xNumTunnel(xIndexReplace, UNO_QUERY);
|
2000-12-15 11:12:42 +00:00
|
|
|
if(xNumTunnel.is())
|
|
|
|
{
|
2007-09-27 08:35:26 +00:00
|
|
|
pSwNum = reinterpret_cast< SwXNumberingRules * >(
|
|
|
|
sal::static_int_cast< sal_IntPtr >( xNumTunnel->getSomething( SwXNumberingRules::getUnoTunnelId() )));
|
2000-12-15 11:12:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if(pSwNum)
|
|
|
|
{
|
|
|
|
if(pSwNum->GetNumRule())
|
|
|
|
{
|
|
|
|
SwDoc* pDoc = rPam.GetDoc();
|
|
|
|
SwNumRule aRule(*pSwNum->GetNumRule());
|
|
|
|
const String* pNewCharStyles = pSwNum->GetNewCharStyleNames();
|
|
|
|
const String* pBulletFontNames = pSwNum->GetBulletFontNames();
|
|
|
|
for(sal_uInt16 i = 0; i < MAXLEVEL; i++)
|
|
|
|
{
|
|
|
|
SwNumFmt aFmt(aRule.Get( i ));
|
|
|
|
if( pNewCharStyles[i].Len() &&
|
|
|
|
pNewCharStyles[i] != SwXNumberingRules::GetInvalidStyle() &&
|
|
|
|
(!aFmt.GetCharFmt() || pNewCharStyles[i] != aFmt.GetCharFmt()->GetName()))
|
|
|
|
{
|
|
|
|
if(!pNewCharStyles[i].Len())
|
|
|
|
aFmt.SetCharFmt(0);
|
|
|
|
else
|
|
|
|
{
|
|
|
|
|
2004-08-02 13:17:35 +00:00
|
|
|
// CharStyle besorgen und an der Rule setzen
|
2000-12-15 11:12:42 +00:00
|
|
|
sal_uInt16 nChCount = pDoc->GetCharFmts()->Count();
|
|
|
|
SwCharFmt* pCharFmt = 0;
|
2004-08-02 13:17:35 +00:00
|
|
|
for(sal_uInt16 nCharFmt = 0; nCharFmt < nChCount; nCharFmt++)
|
2000-12-15 11:12:42 +00:00
|
|
|
{
|
2004-08-02 13:17:35 +00:00
|
|
|
SwCharFmt& rChFmt = *((*(pDoc->GetCharFmts()))[nCharFmt]);;
|
2000-12-15 11:12:42 +00:00
|
|
|
if(rChFmt.GetName() == pNewCharStyles[i])
|
|
|
|
{
|
|
|
|
pCharFmt = &rChFmt;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if(!pCharFmt)
|
|
|
|
{
|
|
|
|
SfxStyleSheetBasePool* pPool = pDoc->GetDocShell()->GetStyleSheetPool();
|
|
|
|
SfxStyleSheetBase* pBase;
|
|
|
|
pBase = pPool->Find(pNewCharStyles[i], SFX_STYLE_FAMILY_CHAR);
|
|
|
|
// soll das wirklich erzeugt werden?
|
|
|
|
if(!pBase)
|
|
|
|
pBase = &pPool->Make(pNewCharStyles[i], SFX_STYLE_FAMILY_PAGE);
|
|
|
|
pCharFmt = ((SwDocStyleSheet*)pBase)->GetCharFmt();
|
|
|
|
}
|
|
|
|
if(pCharFmt)
|
|
|
|
aFmt.SetCharFmt(pCharFmt);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//jetzt nochmal fuer Fonts
|
|
|
|
if(pBulletFontNames[i] != SwXNumberingRules::GetInvalidStyle() &&
|
|
|
|
((pBulletFontNames[i].Len() && !aFmt.GetBulletFont()) ||
|
|
|
|
pBulletFontNames[i].Len() &&
|
|
|
|
aFmt.GetBulletFont()->GetName() != pBulletFontNames[i] ))
|
|
|
|
{
|
|
|
|
const SvxFontListItem* pFontListItem =
|
|
|
|
(const SvxFontListItem* )pDoc->GetDocShell()
|
|
|
|
->GetItem( SID_ATTR_CHAR_FONTLIST );
|
|
|
|
const FontList* pList = pFontListItem->GetFontList();
|
|
|
|
|
|
|
|
FontInfo aInfo = pList->Get(
|
|
|
|
pBulletFontNames[i],WEIGHT_NORMAL, ITALIC_NONE);
|
|
|
|
Font aFont(aInfo);
|
|
|
|
aFmt.SetBulletFont(&aFont);
|
|
|
|
}
|
|
|
|
aRule.Set( i, aFmt );
|
|
|
|
}
|
2002-11-05 07:42:07 +00:00
|
|
|
UnoActionContext aAction(pDoc);
|
|
|
|
|
|
|
|
if( rPam.GetNext() != &rPam ) // Mehrfachselektion ?
|
|
|
|
{
|
2006-08-14 15:53:40 +00:00
|
|
|
pDoc->StartUndo( UNDO_START, NULL );
|
2002-11-05 07:42:07 +00:00
|
|
|
SwPamRanges aRangeArr( rPam );
|
|
|
|
SwPaM aPam( *rPam.GetPoint() );
|
|
|
|
for( sal_uInt16 n = 0; n < aRangeArr.Count(); ++n )
|
2008-06-13 09:30:48 +00:00
|
|
|
{
|
|
|
|
// --> OD 2008-03-17 #refactorlists#
|
|
|
|
// no start of a new list
|
|
|
|
pDoc->SetNumRule( aRangeArr.SetPam( n, aPam ), aRule, false );
|
|
|
|
// <--
|
|
|
|
}
|
2006-08-14 15:53:40 +00:00
|
|
|
pDoc->EndUndo( UNDO_END, NULL );
|
2002-11-05 07:42:07 +00:00
|
|
|
}
|
|
|
|
else
|
2008-06-13 09:30:48 +00:00
|
|
|
{
|
|
|
|
// --> OD 2008-03-17 #refactorlists#
|
|
|
|
// no start of a new list
|
|
|
|
pDoc->SetNumRule( rPam, aRule, false );
|
|
|
|
// <--
|
|
|
|
}
|
2002-11-05 07:42:07 +00:00
|
|
|
|
|
|
|
|
2000-12-15 11:12:42 +00:00
|
|
|
}
|
|
|
|
else if(pSwNum->GetCreatedNumRuleName().Len())
|
|
|
|
{
|
|
|
|
SwDoc* pDoc = rPam.GetDoc();
|
|
|
|
UnoActionContext aAction(pDoc);
|
|
|
|
SwNumRule* pRule = pDoc->FindNumRulePtr( pSwNum->GetCreatedNumRuleName() );
|
|
|
|
if(!pRule)
|
|
|
|
throw RuntimeException();
|
2008-06-13 09:30:48 +00:00
|
|
|
// --> OD 2008-03-17 #refactorlists#
|
|
|
|
// no start of a new list
|
|
|
|
pDoc->SetNumRule( rPam, *pRule, false );
|
|
|
|
// <--
|
2000-12-15 11:12:42 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2001-10-22 13:05:42 +00:00
|
|
|
else if(rValue.getValueType() == ::getVoidCppuType())
|
|
|
|
{
|
|
|
|
rPam.GetDoc()->DelNumRules(rPam);
|
|
|
|
}
|
2000-12-15 11:12:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* -----------------25.05.98 11:40-------------------
|
|
|
|
*
|
|
|
|
* --------------------------------------------------*/
|
2001-10-09 13:56:23 +00:00
|
|
|
void getNumberingProperty(SwPaM& rPam, PropertyState& eState, Any * pAny )
|
2000-12-15 11:12:42 +00:00
|
|
|
{
|
|
|
|
const SwNumRule* pNumRule = rPam.GetDoc()->GetCurrNumRule( *rPam.GetPoint() );
|
|
|
|
if(pNumRule)
|
|
|
|
{
|
2007-06-05 16:32:14 +00:00
|
|
|
uno::Reference< XIndexReplace > xNum = new SwXNumberingRules(*pNumRule);
|
2001-10-09 13:56:23 +00:00
|
|
|
if ( pAny )
|
2007-06-05 16:32:14 +00:00
|
|
|
pAny->setValue(&xNum, ::getCppuType((const uno::Reference<XIndexReplace>*)0));
|
2000-12-15 11:12:42 +00:00
|
|
|
eState = PropertyState_DIRECT_VALUE;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
eState = PropertyState_DEFAULT_VALUE;
|
|
|
|
}
|
|
|
|
/* -----------------04.07.98 15:15-------------------
|
|
|
|
*
|
|
|
|
* --------------------------------------------------*/
|
2001-10-09 13:56:23 +00:00
|
|
|
void GetCurPageStyle(SwPaM& rPaM, String &rString)
|
2000-12-15 11:12:42 +00:00
|
|
|
{
|
|
|
|
const SwPageFrm* pPage = rPaM.GetCntntNode()->GetFrm()->FindPageFrm();
|
|
|
|
if(pPage)
|
2007-09-27 08:35:26 +00:00
|
|
|
SwStyleNameMapper::FillProgName( pPage->GetPageDesc()->GetName(), rString, nsSwGetPoolIdFromName::GET_POOLID_PAGEDESC, sal_True );
|
2000-12-15 11:12:42 +00:00
|
|
|
}
|
|
|
|
/* -----------------30.03.99 10:52-------------------
|
|
|
|
* spezielle Properties am Cursor zuruecksetzen
|
|
|
|
* --------------------------------------------------*/
|
|
|
|
void resetCrsrPropertyValue(const SfxItemPropertyMap* pMap, SwPaM& rPam)
|
|
|
|
{
|
|
|
|
SwDoc* pDoc = rPam.GetDoc();
|
|
|
|
switch(pMap->nWID)
|
|
|
|
{
|
|
|
|
case FN_UNO_PARA_STYLE :
|
|
|
|
// lcl_SetTxtFmtColl(aValue, pUnoCrsr);
|
|
|
|
break;
|
|
|
|
case FN_UNO_PAGE_STYLE :
|
|
|
|
break;
|
|
|
|
case FN_UNO_NUM_START_VALUE :
|
|
|
|
{
|
|
|
|
UnoActionContext aAction(pDoc);
|
|
|
|
|
|
|
|
if( rPam.GetNext() != &rPam ) // Mehrfachselektion ?
|
|
|
|
{
|
2006-08-14 15:53:40 +00:00
|
|
|
pDoc->StartUndo( UNDO_START, NULL );
|
2000-12-15 11:12:42 +00:00
|
|
|
SwPamRanges aRangeArr( rPam );
|
|
|
|
SwPaM aPam( *rPam.GetPoint() );
|
|
|
|
for( sal_uInt16 n = 0; n < aRangeArr.Count(); ++n )
|
|
|
|
pDoc->SetNodeNumStart( *aRangeArr.SetPam( n, aPam ).GetPoint(), 1 );
|
2006-08-14 15:53:40 +00:00
|
|
|
pDoc->EndUndo( UNDO_END, NULL );
|
2000-12-15 11:12:42 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
pDoc->SetNodeNumStart( *rPam.GetPoint(), 0 );
|
|
|
|
}
|
|
|
|
|
|
|
|
break;
|
|
|
|
case FN_UNO_NUM_LEVEL :
|
|
|
|
break;
|
|
|
|
case FN_UNO_NUM_RULES:
|
|
|
|
// lcl_setNumberingProperty(aValue, pUnoCrsr);
|
|
|
|
break;
|
2003-03-27 14:45:43 +00:00
|
|
|
case FN_UNO_CHARFMT_SEQUENCE:
|
|
|
|
{
|
|
|
|
SvUShortsSort aWhichIds;
|
|
|
|
aWhichIds.Insert(RES_TXTATR_CHARFMT);
|
2008-03-05 16:11:31 +00:00
|
|
|
pDoc->ResetAttrs(rPam, sal_True, &aWhichIds);
|
2003-03-27 14:45:43 +00:00
|
|
|
}
|
|
|
|
break;
|
2000-12-15 11:12:42 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
/* -----------------21.07.98 11:36-------------------
|
|
|
|
*
|
|
|
|
* --------------------------------------------------*/
|
|
|
|
void InsertFile(SwUnoCrsr* pUnoCrsr,
|
2008-01-29 08:23:14 +00:00
|
|
|
const String& rURL,
|
|
|
|
const uno::Sequence< beans::PropertyValue >& rOptions
|
|
|
|
) throw( lang::IllegalArgumentException, io::IOException, uno::RuntimeException )
|
2000-12-15 11:12:42 +00:00
|
|
|
{
|
|
|
|
SfxMedium* pMed = 0;
|
|
|
|
SwDoc* pDoc = pUnoCrsr->GetDoc();
|
|
|
|
SwDocShell* pDocSh = pDoc->GetDocShell();
|
2008-01-29 08:23:14 +00:00
|
|
|
comphelper::MediaDescriptor aMediaDescriptor( rOptions );
|
|
|
|
::rtl::OUString sFileName = rURL;
|
|
|
|
::rtl::OUString sFilterName, sFilterOptions, sPassword, sBaseURL;
|
|
|
|
uno::Reference < io::XStream > xStream;
|
|
|
|
uno::Reference < io::XInputStream > xInputStream;
|
|
|
|
|
|
|
|
if( !sFileName.getLength() )
|
|
|
|
aMediaDescriptor[comphelper::MediaDescriptor::PROP_URL()] >>= sFileName;
|
|
|
|
if( !sFileName.getLength() )
|
|
|
|
aMediaDescriptor[comphelper::MediaDescriptor::PROP_FILENAME()] >>= sFileName;
|
|
|
|
aMediaDescriptor[comphelper::MediaDescriptor::PROP_INPUTSTREAM()] >>= xInputStream;
|
|
|
|
aMediaDescriptor[comphelper::MediaDescriptor::PROP_STREAM()] >>= xStream;
|
|
|
|
aMediaDescriptor[comphelper::MediaDescriptor::PROP_INPUTSTREAM()] >>= xInputStream;
|
|
|
|
aMediaDescriptor[comphelper::MediaDescriptor::PROP_FILTERNAME()] >>= sFilterName;
|
|
|
|
aMediaDescriptor[comphelper::MediaDescriptor::PROP_FILTEROPTIONS()] >>= sFilterOptions;
|
|
|
|
aMediaDescriptor[comphelper::MediaDescriptor::PROP_PASSWORD()] >>= sPassword;
|
|
|
|
aMediaDescriptor[comphelper::MediaDescriptor::PROP_DOCUMENTBASEURL() ] >>= sBaseURL;
|
|
|
|
if ( !xInputStream.is() && xStream.is() )
|
|
|
|
xInputStream = xStream->getInputStream();
|
|
|
|
|
|
|
|
if(!pDocSh || (!sFileName.getLength() && !xInputStream.is()))
|
2000-12-15 11:12:42 +00:00
|
|
|
return;
|
|
|
|
|
|
|
|
SfxObjectFactory& rFact = pDocSh->GetFactory();
|
2008-01-29 08:23:14 +00:00
|
|
|
const SfxFilter* pFilter = rFact.GetFilterContainer()->GetFilter4FilterName( sFilterName );
|
|
|
|
uno::Reference < embed::XStorage > xReadStorage;
|
|
|
|
if( xInputStream.is() )
|
|
|
|
{
|
|
|
|
uno::Sequence< uno::Any > aArgs( 2 );
|
|
|
|
aArgs[0] <<= xInputStream;
|
|
|
|
aArgs[1] <<= embed::ElementModes::READ;
|
|
|
|
try
|
|
|
|
{
|
|
|
|
xReadStorage = uno::Reference< embed::XStorage >(
|
|
|
|
::comphelper::OStorageHelper::GetStorageFactory()->createInstanceWithArguments( aArgs ),
|
|
|
|
uno::UNO_QUERY );
|
|
|
|
}
|
|
|
|
catch( const io::IOException& rEx)
|
|
|
|
{
|
|
|
|
(void)rEx;
|
|
|
|
}
|
|
|
|
}
|
2000-12-15 11:12:42 +00:00
|
|
|
if ( !pFilter )
|
|
|
|
{
|
2008-01-29 08:23:14 +00:00
|
|
|
if( xInputStream.is() && !xReadStorage.is())
|
|
|
|
{
|
|
|
|
pMed = new SfxMedium;
|
|
|
|
pMed->setStreamToLoadFrom(xInputStream, sal_True );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
pMed = xReadStorage.is() ?
|
|
|
|
new SfxMedium(xReadStorage, sBaseURL, 0 ) :
|
|
|
|
new SfxMedium(sFileName, STREAM_READ, sal_True, 0, 0 );
|
|
|
|
if( sBaseURL.getLength() )
|
|
|
|
pMed->GetItemSet()->Put( SfxStringItem( SID_DOC_BASEURL, sBaseURL ) );
|
|
|
|
|
2003-09-19 07:44:34 +00:00
|
|
|
SfxFilterMatcher aMatcher( rFact.GetFilterContainer()->GetName() );
|
2000-12-15 11:12:42 +00:00
|
|
|
ErrCode nErr = aMatcher.GuessFilter( *pMed, &pFilter, sal_False );
|
|
|
|
if ( nErr || !pFilter)
|
|
|
|
DELETEZ(pMed);
|
|
|
|
else
|
|
|
|
pMed->SetFilter( pFilter );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2008-01-29 08:23:14 +00:00
|
|
|
if(!pMed)
|
2000-12-15 11:12:42 +00:00
|
|
|
{
|
2008-01-29 08:23:14 +00:00
|
|
|
if( xInputStream.is() && !xReadStorage.is())
|
|
|
|
{
|
|
|
|
pMed = new SfxMedium;
|
|
|
|
pMed->setStreamToLoadFrom(xInputStream, sal_True );
|
|
|
|
pMed->SetFilter( pFilter );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if( xReadStorage.is() )
|
|
|
|
{
|
|
|
|
pMed = new SfxMedium(xReadStorage, sBaseURL, 0 );
|
|
|
|
pMed->SetFilter( pFilter );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
pMed = new SfxMedium(sFileName, STREAM_READ, sal_True, pFilter, 0);
|
|
|
|
}
|
2000-12-15 11:12:42 +00:00
|
|
|
}
|
2008-01-29 08:23:14 +00:00
|
|
|
if(sFilterOptions.getLength())
|
|
|
|
pMed->GetItemSet()->Put( SfxStringItem( SID_FILE_FILTEROPTIONS, sFilterOptions ) );
|
|
|
|
if( sBaseURL.getLength())
|
|
|
|
pMed->GetItemSet()->Put( SfxStringItem( SID_DOC_BASEURL, sBaseURL ) );
|
2000-12-15 11:12:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if( !pMed )
|
|
|
|
return;
|
|
|
|
|
|
|
|
SfxObjectShellRef aRef( pDocSh );
|
|
|
|
|
|
|
|
pDocSh->RegisterTransfer( *pMed );
|
|
|
|
pMed->DownLoad(); // ggfs. den DownLoad anstossen
|
|
|
|
if( aRef.Is() && 1 < aRef->GetRefCount() ) // noch gueltige Ref?
|
|
|
|
{
|
|
|
|
SwReader* pRdr;
|
|
|
|
SfxItemSet* pSet = pMed->GetItemSet();
|
|
|
|
pSet->Put(SfxBoolItem(FN_API_CALL, sal_True));
|
2008-01-29 08:23:14 +00:00
|
|
|
if(sPassword.getLength())
|
|
|
|
pSet->Put(SfxStringItem(SID_PASSWORD, sPassword));
|
2000-12-15 11:12:42 +00:00
|
|
|
Reader *pRead = pDocSh->StartConvertFrom( *pMed, &pRdr, 0, pUnoCrsr);
|
|
|
|
if( pRead )
|
|
|
|
{
|
|
|
|
|
|
|
|
UnoActionContext aContext(pDoc);
|
|
|
|
|
|
|
|
if(pUnoCrsr->HasMark())
|
|
|
|
pDoc->DeleteAndJoin(*pUnoCrsr);
|
|
|
|
|
|
|
|
SwNodeIndex aSave( pUnoCrsr->GetPoint()->nNode, -1 );
|
|
|
|
xub_StrLen nCntnt = pUnoCrsr->GetPoint()->nContent.GetIndex();
|
|
|
|
|
|
|
|
sal_uInt32 nErrno = pRdr->Read( *pRead ); // und Dokument einfuegen
|
|
|
|
|
|
|
|
if(!nErrno)
|
|
|
|
{
|
|
|
|
aSave++;
|
|
|
|
pUnoCrsr->SetMark();
|
|
|
|
pUnoCrsr->GetMark()->nNode = aSave;
|
|
|
|
|
|
|
|
SwCntntNode* pCntNode = aSave.GetNode().GetCntntNode();
|
|
|
|
if( !pCntNode )
|
|
|
|
nCntnt = 0;
|
|
|
|
pUnoCrsr->GetMark()->nContent.Assign( pCntNode, nCntnt );
|
|
|
|
}
|
|
|
|
|
|
|
|
delete pRdr;
|
|
|
|
|
|
|
|
// ggfs. alle Verzeichnisse updaten:
|
|
|
|
/* if( pWrtShell->IsUpdateTOX() )
|
|
|
|
{
|
|
|
|
SfxRequest aReq( *this, FN_UPDATE_TOX );
|
|
|
|
Execute( aReq );
|
|
|
|
pWrtShell->SetUpdateTOX( sal_False ); // wieder zurueck setzen
|
|
|
|
}*/
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
delete pMed;
|
|
|
|
}
|
|
|
|
|
2004-08-11 14:41:58 +00:00
|
|
|
/* -----------------14.07.04 ------------------------
|
|
|
|
*
|
|
|
|
* --------------------------------------------------*/
|
|
|
|
|
|
|
|
// insert text and scan for CR characters in order to insert
|
|
|
|
// paragraph breaks at those positions by calling SplitNode
|
|
|
|
sal_Bool DocInsertStringSplitCR(
|
|
|
|
SwDoc &rDoc,
|
|
|
|
const SwPaM &rNewCursor, const String &rText )
|
|
|
|
{
|
|
|
|
sal_Bool bOK = sal_True;
|
|
|
|
|
|
|
|
OUString aTxt;
|
|
|
|
xub_StrLen nStartIdx = 0;
|
2008-01-04 12:22:39 +00:00
|
|
|
xub_StrLen nMaxLength = STRING_LEN;
|
|
|
|
SwTxtNode* pTxtNd = rNewCursor.GetPoint()->nNode.GetNode().GetTxtNode();
|
|
|
|
if( pTxtNd )
|
|
|
|
nMaxLength = STRING_LEN - pTxtNd->GetTxt().Len();
|
2004-08-11 14:41:58 +00:00
|
|
|
xub_StrLen nIdx = rText.Search( '\r', nStartIdx );
|
2008-01-04 12:22:39 +00:00
|
|
|
if( ( nIdx == STRING_NOTFOUND && nMaxLength < rText.Len() ) ||
|
|
|
|
( nIdx != STRING_NOTFOUND && nMaxLength < nIdx ) )
|
|
|
|
nIdx = nMaxLength;
|
|
|
|
while (nIdx != STRING_NOTFOUND )
|
2004-08-11 14:41:58 +00:00
|
|
|
{
|
|
|
|
DBG_ASSERT( nIdx - nStartIdx >= 0, "index negative!" );
|
|
|
|
aTxt = rText.Copy( nStartIdx, nIdx - nStartIdx );
|
2006-08-14 15:53:40 +00:00
|
|
|
if (aTxt.getLength() && !rDoc.Insert( rNewCursor, aTxt, true ))
|
2004-08-11 14:41:58 +00:00
|
|
|
{
|
|
|
|
DBG_ERROR( "Doc->Insert(Str) failed." );
|
|
|
|
bOK = sal_False;
|
|
|
|
}
|
2006-08-14 15:53:40 +00:00
|
|
|
if (!rDoc.SplitNode( *rNewCursor.GetPoint(), false ) )
|
2004-08-11 14:41:58 +00:00
|
|
|
{
|
|
|
|
DBG_ERROR( "SplitNode failed" );
|
|
|
|
bOK = sal_False;
|
|
|
|
}
|
|
|
|
nStartIdx = nIdx + 1;
|
|
|
|
nIdx = rText.Search( '\r', nStartIdx );
|
|
|
|
}
|
|
|
|
aTxt = rText.Copy( nStartIdx );
|
2006-08-14 15:53:40 +00:00
|
|
|
if (aTxt.getLength() && !rDoc.Insert( rNewCursor, aTxt, true ))
|
2004-08-11 14:41:58 +00:00
|
|
|
{
|
|
|
|
DBG_ERROR( "Doc->Insert(Str) failed." );
|
|
|
|
bOK = sal_False;
|
|
|
|
}
|
|
|
|
|
|
|
|
return bOK;
|
|
|
|
}
|
2008-04-18 12:17:18 +00:00
|
|
|
/*-- 10.03.2008 09:58:47---------------------------------------------------
|
|
|
|
|
|
|
|
-----------------------------------------------------------------------*/
|
|
|
|
void makeRedline( SwPaM& rPaM,
|
|
|
|
const ::rtl::OUString& rRedlineType,
|
|
|
|
const uno::Sequence< beans::PropertyValue >& rRedlineProperties )
|
|
|
|
throw (lang::IllegalArgumentException, uno::RuntimeException)
|
|
|
|
{
|
|
|
|
IDocumentRedlineAccess* pRedlineAccess = rPaM.GetDoc();
|
|
|
|
|
|
|
|
RedlineType_t eType = nsRedlineType_t::REDLINE_INSERT;
|
|
|
|
if( rRedlineType.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( "Delete" ) ))
|
|
|
|
eType = nsRedlineType_t::REDLINE_DELETE;
|
|
|
|
else if( rRedlineType.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( "Format" ) ))
|
|
|
|
eType = nsRedlineType_t::REDLINE_FORMAT;
|
|
|
|
else if( rRedlineType.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( "TextTable" ) ))
|
|
|
|
eType = nsRedlineType_t::REDLINE_TABLE;
|
|
|
|
else if( !rRedlineType.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( "Insert" ) ))
|
|
|
|
throw lang::IllegalArgumentException();
|
|
|
|
|
|
|
|
//todo: what about REDLINE_FMTCOLL?
|
|
|
|
comphelper::SequenceAsHashMap aPropMap( rRedlineProperties );
|
|
|
|
uno::Any aAuthorValue;
|
|
|
|
aAuthorValue = aPropMap.getUnpackedValueOrDefault( ::rtl::OUString::createFromAscii("RedlineAuthor"), aAuthorValue);
|
|
|
|
USHORT nAuthor = 0;
|
|
|
|
::rtl::OUString sAuthor;
|
|
|
|
if( aAuthorValue >>= sAuthor )
|
|
|
|
nAuthor = pRedlineAccess->InsertRedlineAuthor(sAuthor);
|
|
|
|
|
|
|
|
::rtl::OUString sComment;
|
|
|
|
uno::Any aCommentValue;
|
|
|
|
aCommentValue = aPropMap.getUnpackedValueOrDefault( ::rtl::OUString::createFromAscii("RedlineComment"), aCommentValue);
|
|
|
|
|
|
|
|
SwRedlineData aRedlineData( eType, nAuthor );
|
|
|
|
if( aCommentValue >>= sComment )
|
|
|
|
aRedlineData.SetComment( sComment );
|
|
|
|
|
|
|
|
::util::DateTime aStamp;
|
|
|
|
uno::Any aDateTimeValue;
|
|
|
|
aDateTimeValue = aPropMap.getUnpackedValueOrDefault( ::rtl::OUString::createFromAscii("RedlineDateTime"), aDateTimeValue);
|
|
|
|
if( aDateTimeValue >>= aStamp )
|
|
|
|
{
|
|
|
|
aRedlineData.SetTimeStamp(
|
|
|
|
DateTime( Date( aStamp.Day, aStamp.Month, aStamp.Year ), Time( aStamp.Hours, aStamp.Minutes, aStamp.Seconds ) ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
SwRedline* pRedline = new SwRedline( aRedlineData, rPaM );
|
|
|
|
pRedlineAccess->SetRedlineMode_intern(nsRedlineMode_t::REDLINE_ON);
|
|
|
|
bool bRet = pRedlineAccess->AppendRedline( pRedline, false );
|
|
|
|
pRedlineAccess->SetRedlineMode_intern(nsRedlineMode_t::REDLINE_NONE);
|
|
|
|
if( !bRet )
|
|
|
|
throw lang::IllegalArgumentException();
|
|
|
|
}
|
2004-08-11 14:41:58 +00:00
|
|
|
|
2000-12-15 11:12:42 +00:00
|
|
|
}//namespace SwUnoCursorHelper
|
|
|
|
|