From 5ec9de5266069c22f12305392eaec5a7eac3204b Mon Sep 17 00:00:00 2001 From: Cédric Bosdonnat Date: Tue, 17 Nov 2009 12:33:55 +0100 Subject: cbosdo02: field patch to upstream applied --- sw/inc/IDocumentMarkAccess.hxx | 7 ++ sw/inc/IMark.hxx | 23 +++- sw/inc/crsrsh.hxx | 5 +- sw/inc/editsh.hxx | 4 + sw/inc/hintids.hxx | 6 +- sw/inc/pam.hxx | 1 + sw/inc/unoobj.hxx | 12 +-- sw/source/core/crsr/bookmrk.cxx | 122 +++++++++++++++++++-- sw/source/core/crsr/crossrefbookmark.cxx | 2 +- sw/source/core/crsr/crstrvl.cxx | 11 ++ sw/source/core/crsr/pam.cxx | 38 +++++-- sw/source/core/doc/docbm.cxx | 60 +++++++++-- sw/source/core/edit/edtox.cxx | 22 ++++ sw/source/core/inc/MarkManager.hxx | 10 ++ sw/source/core/inc/bookmrk.hxx | 41 +++++-- sw/source/core/inc/crossrefbookmark.hxx | 6 +- sw/source/core/text/inftxt.cxx | 57 ++++++---- sw/source/core/text/portxt.cxx | 116 +++++++++++++++----- sw/source/core/unocore/unobkm.cxx | 104 ++++++++++-------- sw/source/filter/ww8/wrtw8nds.cxx | 111 +++++++++++++++---- sw/source/filter/ww8/wrtww8.cxx | 59 ++++++++-- sw/source/filter/ww8/wrtww8.hxx | 2 + sw/source/filter/ww8/ww8par.cxx | 34 ++---- sw/source/filter/ww8/ww8par.hxx | 42 ++++---- sw/source/filter/ww8/ww8par3.cxx | 179 ++++++++++++++++--------------- sw/source/filter/ww8/ww8par5.cxx | 107 +++++++++++++++++- sw/source/ui/docvw/edtwin.cxx | 32 +++++- sw/source/ui/inc/view.hxx | 4 +- sw/source/ui/inc/wrtsh.hxx | 4 + sw/source/ui/uiview/viewling.cxx | 136 +++++++++++++++++++++++ sw/source/ui/wrtsh/wrtsh1.cxx | 8 ++ sw/source/ui/wrtsh/wrtsh2.cxx | 7 ++ 32 files changed, 1056 insertions(+), 316 deletions(-) (limited to 'sw') diff --git a/sw/inc/IDocumentMarkAccess.hxx b/sw/inc/IDocumentMarkAccess.hxx index 56a6050c09c6..1c6a50c5dd10 100644 --- a/sw/inc/IDocumentMarkAccess.hxx +++ b/sw/inc/IDocumentMarkAccess.hxx @@ -86,6 +86,13 @@ class IDocumentMarkAccess const ::rtl::OUString& rProposedName, MarkType eMark) =0; + virtual sw::mark::IFieldmark* makeFieldBookmark( const SwPaM& rPaM, + const rtl::OUString& rName, + const rtl::OUString& rType) = 0; + virtual sw::mark::IFieldmark* makeNoTextFieldBookmark( const SwPaM& rPaM, + const rtl::OUString& rName, + const rtl::OUString& rType) = 0; + /** Returns a mark in the document for a paragraph. If there is none, a mark will be created. diff --git a/sw/inc/IMark.hxx b/sw/inc/IMark.hxx index 81317d69a369..28f8c11a9936 100644 --- a/sw/inc/IMark.hxx +++ b/sw/inc/IMark.hxx @@ -51,12 +51,12 @@ namespace sw { namespace mark { public: //getters - virtual const SwPosition& GetMarkPos() const =0; + virtual SwPosition& GetMarkPos() const =0; // GetOtherMarkPos() is only guaranteed to return a valid // reference if IsExpanded() returned true - virtual const SwPosition& GetOtherMarkPos() const =0; - virtual const SwPosition& GetMarkStart() const =0; - virtual const SwPosition& GetMarkEnd() const =0; + virtual SwPosition& GetOtherMarkPos() const =0; + virtual SwPosition& GetMarkStart() const =0; + virtual SwPosition& GetMarkEnd() const =0; virtual const ::rtl::OUString& GetName() const =0; virtual bool IsExpanded() const =0; virtual bool IsCoveringPosition(const SwPosition& rPos) const =0; @@ -79,6 +79,9 @@ namespace sw { namespace mark { return GetMarkEnd() < rPos; } bool EndsAfter(const SwPosition& rPos) const { return GetMarkEnd() > rPos; } + + // Use for debugging purpose + virtual rtl::OUString toString( ) const = 0; }; class IBookmark @@ -95,13 +98,25 @@ namespace sw { namespace mark : virtual public IMark { public: + typedef std::pair< ::rtl::OUString, ::rtl::OUString > ParamPair_t; + //getters virtual ::rtl::OUString GetFieldname() const =0; virtual ::rtl::OUString GetFieldHelptext() const =0; + virtual void addParam( rtl::OUString rParamName, + rtl::OUString rParamValue, + bool bReplaceExisting = true ) = 0; + virtual void addParam( const char* paramName, int value ) = 0; + virtual void addParams( std::vector& params ) = 0; + virtual int getNumOfParams() const = 0; + virtual ParamPair_t getParam( int pos ) const = 0; + virtual ParamPair_t getParam( const char *name, const char *defaultValue = NULL ) const = 0; + //setters virtual void SetFieldname(const ::rtl::OUString& rFieldname) =0; virtual void SetFieldHelptext(const ::rtl::OUString& rFieldHelptext) =0; + virtual void invalidate( ) = 0; }; class ICheckboxFieldmark diff --git a/sw/inc/crsrsh.hxx b/sw/inc/crsrsh.hxx index 85fea8317ef2..4e0eae0a9dfb 100644 --- a/sw/inc/crsrsh.hxx +++ b/sw/inc/crsrsh.hxx @@ -45,6 +45,7 @@ #include #include #include +#include // einige Forward Deklarationen @@ -110,7 +111,8 @@ struct SwContentAtPos SW_REFMARK = 0x0100, SW_NUMLABEL = 0x0200, // #i23726# SW_CONTENT_CHECK = 0x0400, // --> FME 2005-05-13 #i43742# <-- - SW_SMARTTAG = 0x0800 + SW_SMARTTAG = 0x0800, + SW_FORMCTRL = 0x1000 #ifndef PRODUCT ,SW_CURR_ATTRS = 0x4000 // nur zum Debuggen ,SW_TABLEBOXVALUE = 0x8000 // nur zum Debuggen @@ -122,6 +124,7 @@ struct SwContentAtPos const SfxPoolItem* pAttr; const SwRedline* pRedl; SwCntntNode * pNode; // #i23726# + const sw::mark::IFieldmark* pFldmark; } aFnd; int nDist; // #i23726# diff --git a/sw/inc/editsh.hxx b/sw/inc/editsh.hxx index 1ce87e0df410..cebe021f56c1 100644 --- a/sw/inc/editsh.hxx +++ b/sw/inc/editsh.hxx @@ -44,6 +44,7 @@ #include #include #include +#include #include #include @@ -415,6 +416,9 @@ public: const SwTOXType* GetTOXType(TOXTypes eTyp, USHORT nId) const; void InsertTOXType(const SwTOXType& rTyp); + // new field stuff + BOOL UpdateField(sw::mark::IFieldmark &fieldBM); + //AutoMark file const String& GetTOIAutoMarkURL() const; void SetTOIAutoMarkURL(const String& rSet); diff --git a/sw/inc/hintids.hxx b/sw/inc/hintids.hxx index 1dc28e197107..e2112317cb6b 100644 --- a/sw/inc/hintids.hxx +++ b/sw/inc/hintids.hxx @@ -44,12 +44,8 @@ #define CH_TXT_ATR_FIELDEND ((sal_Unicode)0x05) #define CH_TXT_ATR_SUBST_FIELDSTART ("[") #define CH_TXT_ATR_SUBST_FIELDEND ("]") -//#define CH_TXT_ATR_FORMELEMENT ((sal_Unicode)'#') #define CH_TXT_ATR_FORMELEMENT ((sal_Unicode)0x06) -/* -#define FIELD_BOOKMARK_PREFIX "__" -#define FIELD_FORM_BOOKMARK_PREFIX "__FORM" -*/ + /* * Hier kommen erst mal die enums fuer die Hints */ diff --git a/sw/inc/pam.hxx b/sw/inc/pam.hxx index 18579f1a918b..789600f72e0e 100644 --- a/sw/inc/pam.hxx +++ b/sw/inc/pam.hxx @@ -272,6 +272,7 @@ public: DECL_FIXEDMEMPOOL_NEWDEL(SwPaM); String GetTxt() const; + void Invalidate(); }; diff --git a/sw/inc/unoobj.hxx b/sw/inc/unoobj.hxx index b7a6c54d2bd2..06796337c6e3 100644 --- a/sw/inc/unoobj.hxx +++ b/sw/inc/unoobj.hxx @@ -671,13 +671,13 @@ class SwXFieldmark : public SwXFieldmark_BASE SwXFieldmark(bool isReplacementObject, ::sw::mark::IMark* pBkm = 0, SwDoc* pDoc = 0); virtual void attachToRange(const ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > & xTextRange) throw( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException ); - virtual ::rtl::OUString SAL_CALL getDescription(void) throw( ::com::sun::star::uno::RuntimeException ); - virtual ::sal_Int16 SAL_CALL getType( ) throw (::com::sun::star::uno::RuntimeException); - virtual ::sal_Int16 SAL_CALL getRes( ) throw (::com::sun::star::uno::RuntimeException); + virtual ::rtl::OUString SAL_CALL getFieldType(void) throw( ::com::sun::star::uno::RuntimeException ); + virtual void SAL_CALL setFieldType( const ::rtl::OUString& description ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setType( ::sal_Int16 fieldType ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setRes( ::sal_Int16 res ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setDescription( const ::rtl::OUString& description ) throw (::com::sun::star::uno::RuntimeException); + virtual ::sal_Int16 SAL_CALL getParamCount( ) throw (::com::sun::star::uno::RuntimeException); + virtual ::rtl::OUString SAL_CALL getParamName(::sal_Int16 i) throw( ::com::sun::star::uno::RuntimeException ); + virtual ::rtl::OUString SAL_CALL getParamValue(::sal_Int16 i) throw( ::com::sun::star::uno::RuntimeException ); + virtual void SAL_CALL addParam( const ::rtl::OUString& name, const ::rtl::OUString& value, ::sal_Bool replaceExisting ) throw (::com::sun::star::uno::RuntimeException); }; /*-----------------23.02.98 10:45------------------- diff --git a/sw/source/core/crsr/bookmrk.cxx b/sw/source/core/crsr/bookmrk.cxx index 3cdfa7ec03e4..5d74ec7b4324 100644 --- a/sw/source/core/crsr/bookmrk.cxx +++ b/sw/source/core/crsr/bookmrk.cxx @@ -77,20 +77,20 @@ namespace const sal_Unicode aStartMark, const sal_Unicode aEndMark) { - const SwPosition& rStart = pField->GetMarkStart(); - const SwPosition& rEnd = pField->GetMarkEnd(); + SwPosition& rStart = pField->GetMarkStart(); + SwPosition& rEnd = pField->GetMarkEnd(); SwTxtNode const * const pStartTxtNode = io_pDoc->GetNodes()[rStart.nNode]->GetTxtNode(); SwTxtNode const * const pEndTxtNode = io_pDoc->GetNodes()[rEnd.nNode]->GetTxtNode(); const sal_Unicode ch_start=pStartTxtNode->GetTxt().GetChar(rStart.nContent.GetIndex()); const sal_Unicode ch_end=pEndTxtNode->GetTxt().GetChar(rEnd.nContent.GetIndex()-1); - const SwPaM aStartPaM(rStart); - const SwPaM aEndPaM(rEnd); + SwPaM aStartPaM(rStart); + SwPaM aEndPaM(rEnd); io_pDoc->StartUndo(UNDO_UI_REPLACE, NULL); if(ch_start != aStartMark) { io_pDoc->InsertString(aStartPaM, aStartMark); } - if(aEndMark && ch_end != aEndMark) + if ( aEndMark && ( ch_end != aEndMark ) && ( rStart != rEnd ) ) { io_pDoc->InsertString(aEndPaM, aEndMark); } @@ -114,6 +114,11 @@ namespace sw { namespace mark } } + bool MarkBase::IsCoveringPosition(const SwPosition& rPos) const + { + return GetMarkStart() <= rPos && rPos <= GetMarkEnd(); + } + void MarkBase::SetMarkPos(const SwPosition& rNewPos) { ::boost::scoped_ptr(new SwPosition(rNewPos)).swap(m_pPos1); @@ -126,6 +131,17 @@ namespace sw { namespace mark //lcl_FixPosition(*m_pPos2); } + rtl::OUString MarkBase::toString( ) const + { + rtl::OUStringBuffer buf; + buf.appendAscii( "Mark: ( Name, [ Node1, Index1 ] ): ( " ); + buf.append( m_aName ).appendAscii( ", [ " ); + buf.append( sal_Int32( GetMarkPos().nNode.GetIndex( ) ) ).appendAscii( ", " ); + buf.append( sal_Int32( GetMarkPos().nContent.GetIndex( ) ) ).appendAscii( " ] )" ); + + return buf.makeStringAndClear( ); + } + MarkBase::~MarkBase() { } @@ -268,6 +284,96 @@ namespace sw { namespace mark SetOtherMarkPos(GetMarkPos()); } + rtl::OUString Fieldmark::toString( ) const + { + rtl::OUStringBuffer buf; + buf.appendAscii( "Fieldmark: ( Name, Type, [ Nd1, Id1 ], [ Nd2, Id2 ] ): ( " ); + buf.append( m_aName ).appendAscii( ", " ); + buf.append( m_aFieldname ).appendAscii( ", [ " ); + buf.append( sal_Int32( GetMarkPos().nNode.GetIndex( ) ) ).appendAscii( ", " ); + buf.append( sal_Int32( GetMarkPos( ).nContent.GetIndex( ) ) ).appendAscii( " ], [" ); + buf.append( sal_Int32( GetOtherMarkPos().nNode.GetIndex( ) ) ).appendAscii( ", " ); + buf.append( sal_Int32( GetOtherMarkPos( ).nContent.GetIndex( ) ) ).appendAscii( " ] ) " ); + + return buf.makeStringAndClear( ); + } + + void Fieldmark::addParam( ::rtl::OUString paramName, + ::rtl::OUString paramValue, + bool replaceExisting ) + { + if ( replaceExisting ) + { + bool replaced = false; + const int len = m_params.size( ); + for ( int i = 0; i < len; i++ ) + { + if ( m_params[i].first.compareTo( paramName ) == 0 ) + { + m_params[i] = ParamPair_t( paramName, paramValue ); + replaced = true; + } + } + if ( !replaced ) + { + m_params.push_back( ParamPair_t( paramName, paramValue ) ); + } + } + else + { + m_params.push_back( ParamPair_t( paramName, paramValue ) ); + } + } + + void Fieldmark::addParam( const char *paramName, int value ) + { + rtl::OUString sName = rtl::OUString::createFromAscii( paramName ); + rtl::OUString sValue =::rtl::OUString::valueOf( ( sal_Int32 ) value ); + addParam( sName, sValue ); + } + + void Fieldmark::addParams( std::vector < ParamPair_t > ¶ms ) + { + for ( std::vector < ParamPair_t >::iterator i = params.begin( ); + i != params.end( ); i++ ) + { + m_params.push_back( *i ); + } + } + + int Fieldmark::getNumOfParams( ) const + { + return m_params.size( ); + } + + Fieldmark::ParamPair_t Fieldmark::getParam( int pos ) const + { + return m_params[pos]; + } + + Fieldmark::ParamPair_t Fieldmark::getParam( const char *name, + const char *defaultValue ) const + { + for ( std::vector < ParamPair_t >::iterator i = const_cast< Fieldmark* >( this )->m_params.begin( ); + i != m_params.end( ); i++ ) + { + if ( i->first.compareToAscii( name ) == 0 ) + { + return *i; + } + } + return ParamPair_t( rtl::OUString( ), + ( defaultValue ? + rtl::OUString::createFromAscii( defaultValue ) : + rtl::OUString( ) ) ); + } + + void Fieldmark::invalidate( ) + { + SwPaM aPaM( this->GetMarkPos(), this->GetOtherMarkPos() ); + aPaM.Invalidate(); + } + const ::rtl::OUString Fieldmark::our_sNamePrefix = ::rtl::OUString::createFromAscii("__Fieldmark__"); TextFieldmark::TextFieldmark(const SwPaM& rPaM) @@ -285,7 +391,11 @@ namespace sw { namespace mark void CheckboxFieldmark::InitDoc(SwDoc* const io_pDoc) { - lcl_AssureFieldMarksSet(this, io_pDoc, CH_TXT_ATR_FIELDSTART, CH_TXT_ATR_FIELDEND); + lcl_AssureFieldMarksSet(this, io_pDoc, CH_TXT_ATR_FORMELEMENT, CH_TXT_ATR_FIELDEND); + + // For some reason the end mark is moved from 1 by the Insert: we don't + // want this for checkboxes + this->GetMarkEnd( ).nContent--; } void CheckboxFieldmark::SetChecked(bool checked) diff --git a/sw/source/core/crsr/crossrefbookmark.cxx b/sw/source/core/crsr/crossrefbookmark.cxx index d148027f13d3..5f7fabea0627 100644 --- a/sw/source/core/crsr/crossrefbookmark.cxx +++ b/sw/source/core/crsr/crossrefbookmark.cxx @@ -67,7 +67,7 @@ namespace sw { namespace mark MarkBase::SetMarkPos(rNewPos); } - const SwPosition& CrossRefBookmark::GetOtherMarkPos() const + SwPosition& CrossRefBookmark::GetOtherMarkPos() const { OSL_PRECOND(false, "" diff --git a/sw/source/core/crsr/crstrvl.cxx b/sw/source/core/crsr/crstrvl.cxx index 23a9bf139ef1..81a3afc0c6a2 100644 --- a/sw/source/core/crsr/crstrvl.cxx +++ b/sw/source/core/crsr/crstrvl.cxx @@ -1175,6 +1175,17 @@ BOOL SwCrsrShell::GetContentAtPos( const Point& rPt, } } + if( !bRet && SwContentAtPos::SW_FORMCTRL & rCntntAtPos.eCntntAtPos ) + { + IDocumentMarkAccess* pMarksAccess = GetDoc()->getIDocumentMarkAccess( ); + sw::mark::IFieldmark* pFldBookmark = pMarksAccess->getFieldmarkFor( aPos ); + if( bCrsrFoundExact && pTxtNd && pFldBookmark) { + rCntntAtPos.eCntntAtPos = SwContentAtPos::SW_FORMCTRL; + rCntntAtPos.aFnd.pFldmark = pFldBookmark; + bRet=TRUE; + } + } + if( !bRet && SwContentAtPos::SW_FTN & rCntntAtPos.eCntntAtPos ) { if( aTmpState.bFtnNoInfo ) diff --git a/sw/source/core/crsr/pam.cxx b/sw/source/core/crsr/pam.cxx index 4b2f9332fb78..e7000bd17698 100644 --- a/sw/source/core/crsr/pam.cxx +++ b/sw/source/core/crsr/pam.cxx @@ -56,6 +56,7 @@ #include // #111827# #include +#include // fuer den dummen ?MSC-? Compiler inline xub_StrLen GetSttOrEnd( BOOL bCondition, const SwCntntNode& rNd ) @@ -827,16 +828,21 @@ BOOL SwPaM::HasReadonlySel( bool bFormView ) const } //FIXME FieldBk // TODO: Form Protection when Enhanced Fields are enabled -// if( !bRet ) -// { -// const SwDoc *pDoc=GetDoc(); -// SwBookmark *pA = ( pDoc && pPoint ? pDoc->getFieldmarkFor( *pPoint ) : NULL ); -// SwBookmark *pB = ( pDoc && pMark ? pDoc->getFieldmarkFor( *pMark ) : pA ); -// bRet = ( pA != pB ); -// bool bProtectForm = pDoc->get( IDocumentSettingAccess::PROTECT_FORM ); -// if( bProtectForm ) -// bRet |= ( pA==NULL || pB==NULL ); -// } + if (!bRet) { + const SwDoc *pDoc = GetDoc(); + sw::mark::IMark* pA = NULL; + sw::mark::IMark* pB = NULL; + if ( pDoc ) + { + const IDocumentMarkAccess* pMarksAccess = pDoc->getIDocumentMarkAccess( ); + pA = GetPoint() ? pMarksAccess->getFieldmarkFor( *GetPoint( ) ) : NULL; + pB = GetMark( ) ? pMarksAccess->getFieldmarkFor( *GetMark( ) ) : pA; + bRet = ( pA != pB ); + } + bool bProtectForm = pDoc->get( IDocumentSettingAccess::PROTECT_FORM ); + if ( bProtectForm ) + bRet |= ( pA == NULL || pB == NULL ); + } return bRet; } @@ -1223,6 +1229,18 @@ BOOL SwPaM::Overlap(const SwPaM & a, const SwPaM & b) return !(*b.End() <= *a.Start() || *a.End() <= *b.End()); } +void SwPaM::Invalidate() +{ + const SwNode *_pNd=this->GetNode(); + const SwTxtNode *_pTxtNd=(_pNd!=NULL?_pNd->GetTxtNode():NULL); + if (_pTxtNd!=NULL) { + //pretent we've added a char to force layout to recalc the portion... + SwInsChr aHint(_pTxtNd->GetIndex()); + SwModify *_pModify=(SwModify*)_pTxtNd; + _pModify->Modify( 0, &aHint); + } +} + BOOL SwPaM::LessThan(const SwPaM & a, const SwPaM & b) { return (*a.Start() < *b.Start()) || (*a.Start() == *b.Start() && *a.End() < *b.End()); diff --git a/sw/source/core/doc/docbm.cxx b/sw/source/core/doc/docbm.cxx index e1b4f3ee4322..0780dfd6696e 100644 --- a/sw/source/core/doc/docbm.cxx +++ b/sw/source/core/doc/docbm.cxx @@ -41,6 +41,7 @@ #include #include #include +#include #include #include #include @@ -66,6 +67,23 @@ #include #include +static void lcl_docbm_FixPosition( SwPosition& rPos ) +{ + // make sure the position has 1) the proper node, and 2) a proper index + SwTxtNode* pTxtNode = rPos.nNode.GetNode().GetTxtNode(); + + if( rPos.nContent.GetIndex() > ( pTxtNode == NULL ? 0 : pTxtNode->Len() ) ) + { + DBG_ERROR( "illegal position" ); + xub_StrLen nLen = rPos.nContent.GetIndex(); + if( pTxtNode == NULL ) + nLen = 0; + else if( nLen >= pTxtNode->Len() ) + nLen = pTxtNode->Len(); + rPos.nContent.Assign( pTxtNode, nLen ); + } +} + using namespace ::std; using namespace ::boost; @@ -309,6 +327,17 @@ namespace sw { namespace mark : m_pDoc(&rDoc) { } + void MarkManager::dumpFieldmarks( ) const + { + const_iterator_t pIt = m_vFieldmarks.begin( ); + for ( ; pIt != m_vFieldmarks.end( ); pIt++ ) + { + rtl::OUString str = ( *pIt )->toString( ); + fprintf( stderr, "%s\n", + rtl::OUStringToOString( str, RTL_TEXTENCODING_UTF8 ).getStr( ) ); + } + } + ::sw::mark::IMark* MarkManager::makeMark(const SwPaM& rPaM, const ::rtl::OUString& rName, const IDocumentMarkAccess::MarkType eType) @@ -414,6 +443,30 @@ namespace sw { namespace mark return pMark.get(); } + ::sw::mark::IFieldmark* MarkManager::makeFieldBookmark( const SwPaM& rPaM, + const rtl::OUString& rName, + const rtl::OUString& rType ) + { + sw::mark::IMark* pMark = makeMark( rPaM, rName, + IDocumentMarkAccess::TEXT_FIELDMARK ); + sw::mark::IFieldmark* pFieldMark = dynamic_cast( pMark ); + pFieldMark->SetFieldname( rType ); + + return pFieldMark; + } + + ::sw::mark::IFieldmark* MarkManager::makeNoTextFieldBookmark( const SwPaM& rPaM, + const rtl::OUString& rName, + const rtl::OUString& rType) + { + sw::mark::IMark* pMark = makeMark( rPaM, rName, + IDocumentMarkAccess::CHECKBOX_FIELDMARK ); + sw::mark::IFieldmark* pFieldMark = dynamic_cast( pMark ); + pFieldMark->SetFieldname( rType ); + + return pFieldMark; + } + ::sw::mark::IMark* MarkManager::getMarkForTxtNode(const SwTxtNode& rTxtNode, const IDocumentMarkAccess::MarkType eType) { @@ -767,12 +820,7 @@ namespace sw { namespace mark { const_iterator_t pFieldmark = find_if( m_vFieldmarks.begin(), - // we do not need to check marks starting behind the positon - lower_bound( - m_vFieldmarks.begin(), - m_vFieldmarks.end(), - rPos, - bind(&IMark::StartsAfter, _1, _2)), + m_vFieldmarks.end( ), bind(&IMark::IsCoveringPosition, _1, rPos)); if(pFieldmark == m_vFieldmarks.end()) return NULL; return dynamic_cast(pFieldmark->get()); diff --git a/sw/source/core/edit/edtox.cxx b/sw/source/core/edit/edtox.cxx index 0888693eaedc..781338f33469 100644 --- a/sw/source/core/edit/edtox.cxx +++ b/sw/source/core/edit/edtox.cxx @@ -60,6 +60,9 @@ #ifndef _STATSTR_HRC #include #endif +#include +#include + using namespace ::com::sun::star; using namespace ::com::sun::star::i18n; @@ -235,6 +238,25 @@ BOOL SwEditShell::UpdateTableOf( const SwTOXBase& rTOX, const SfxItemSet* pSet ) return bRet; } +BOOL SwEditShell::UpdateField( sw::mark::IFieldmark &fieldBM) +{ +// SwDocShell* pDocSh = pDoc->GetDocShell(); + //@TODO implement me...; add undo etc... + if ( pDoc && fieldBM.IsExpanded( ) ) { + SwPosition aSttPos = fieldBM.GetMarkStart( ); + aSttPos.nContent++; + + SwPosition aEndPos = fieldBM.GetMarkEnd( ); + aEndPos.nContent--; + + SwPaM aPaM( aSttPos, aEndPos ); + pDoc->DeleteRange(aPaM); + pDoc->InsertString(aPaM, String::CreateFromAscii("Implement me ;-)") ); + } + return TRUE; +} + + /*-------------------------------------------------------------------- Beschreibung: Aktuelles Verzeichnis vor oder in dem der Cursor steht diff --git a/sw/source/core/inc/MarkManager.hxx b/sw/source/core/inc/MarkManager.hxx index d6d8fd63b9f5..05d26b828ac5 100644 --- a/sw/source/core/inc/MarkManager.hxx +++ b/sw/source/core/inc/MarkManager.hxx @@ -43,8 +43,18 @@ namespace sw { namespace mark public: MarkManager(/*[in/out]*/ SwDoc& rDoc); + void dumpFieldmarks( ) const; + // IDocumentMarkAccess virtual ::sw::mark::IMark* makeMark(const SwPaM& rPaM, const ::rtl::OUString& rName, IDocumentMarkAccess::MarkType eMark); + + virtual sw::mark::IFieldmark* makeFieldBookmark( const SwPaM& rPaM, + const rtl::OUString& rName, + const rtl::OUString& rType); + virtual sw::mark::IFieldmark* makeNoTextFieldBookmark( const SwPaM& rPaM, + const rtl::OUString& rName, + const rtl::OUString& rType); + virtual ::sw::mark::IMark* getMarkForTxtNode(const SwTxtNode& rTxtNode, IDocumentMarkAccess::MarkType eMark); virtual void repositionMark(::sw::mark::IMark* io_pMark, const SwPaM& rPaM); diff --git a/sw/source/core/inc/bookmrk.hxx b/sw/source/core/inc/bookmrk.hxx index 18f8860ecab9..3c1e977965bf 100644 --- a/sw/source/core/inc/bookmrk.hxx +++ b/sw/source/core/inc/bookmrk.hxx @@ -48,26 +48,31 @@ namespace sw { namespace mark { public: //getters - virtual const SwPosition& GetMarkPos() const + virtual SwPosition& GetMarkPos() const { return *m_pPos1; } virtual const ::rtl::OUString& GetName() const { return m_aName; } - virtual bool IsCoveringPosition(const SwPosition& rPos) const - { return GetMarkStart() <= rPos && rPos <= GetMarkEnd(); }; - virtual const SwPosition& GetOtherMarkPos() const + virtual bool IsCoveringPosition(const SwPosition& rPos) const; + virtual SwPosition& GetOtherMarkPos() const { OSL_PRECOND(IsExpanded(), " - I have no other Pos set." ); return *m_pPos2; } - virtual const SwPosition& GetMarkStart() const + virtual SwPosition& GetMarkStart() const { - if(!m_pPos2 /* !IsExpanded()*/) return *m_pPos1; - return *m_pPos1 < *m_pPos2 ? *m_pPos1 : *m_pPos2; + if( !IsExpanded() ) return GetMarkPos( ); + if ( GetMarkPos( ) < GetOtherMarkPos( ) ) + return GetMarkPos(); + else + return GetOtherMarkPos( ); } - virtual const SwPosition& GetMarkEnd() const + virtual SwPosition& GetMarkEnd() const { - if(!m_pPos2 /* !IsExpanded()*/ ) return *m_pPos1; - return *m_pPos1 > *m_pPos2 ? *m_pPos1 : *m_pPos2; + if( !IsExpanded() ) return GetMarkPos(); + if ( GetMarkPos( ) > GetOtherMarkPos( ) ) + return GetMarkPos( ); + else + return GetOtherMarkPos( ); } virtual bool IsExpanded() const { return m_pPos2; } @@ -80,6 +85,8 @@ namespace sw { namespace mark virtual void ClearOtherMarkPos() { m_pPos2.reset(); } + virtual rtl::OUString toString( ) const; + virtual void Swap() { if(m_pPos2) @@ -190,11 +197,23 @@ namespace sw { namespace mark ::rtl::OUString GetFieldHelptext() const { return m_aFieldHelptext; } + void addParam( rtl::OUString rParamName, + rtl::OUString rParamValue, + bool bReplaceExisting = true ); + void addParam( const char* paramName, int value ); + void addParams(std::vector& params); + int getNumOfParams() const; + ParamPair_t getParam(int pos) const; + ParamPair_t getParam(const char *name, const char *defaultValue) const; + // setters void SetFieldname(const ::rtl::OUString& aFieldname) { m_aFieldname = aFieldname; } void SetFieldHelptext(const ::rtl::OUString& aFieldHelptext) { m_aFieldHelptext = aFieldHelptext; } + void invalidate( ); + + virtual rtl::OUString toString( ) const; private: //int fftype; // Type: 0 = Text, 1 = Check Box, 2 = List //bool ffprot; @@ -202,7 +221,7 @@ namespace sw { namespace mark ::rtl::OUString m_aFieldname; ::rtl::OUString m_aFieldHelptext; static const ::rtl::OUString our_sNamePrefix; - + std::vector m_params; }; class TextFieldmark diff --git a/sw/source/core/inc/crossrefbookmark.hxx b/sw/source/core/inc/crossrefbookmark.hxx index 84ebaf1eb9e6..7f1eaf83778e 100644 --- a/sw/source/core/inc/crossrefbookmark.hxx +++ b/sw/source/core/inc/crossrefbookmark.hxx @@ -48,10 +48,10 @@ namespace sw { namespace mark const ::rtl::OUString& rPrefix); // getters - virtual const SwPosition& GetOtherMarkPos() const; - virtual const SwPosition& GetMarkStart() const + virtual SwPosition& GetOtherMarkPos() const; + virtual SwPosition& GetMarkStart() const { return *m_pPos1; } - virtual const SwPosition& GetMarkEnd() const + virtual SwPosition& GetMarkEnd() const { return *m_pPos1; } virtual bool IsExpanded() const { return false; } diff --git a/sw/source/core/text/inftxt.cxx b/sw/source/core/text/inftxt.cxx index fea63bf2dca0..b8052fc50bd5 100644 --- a/sw/source/core/text/inftxt.cxx +++ b/sw/source/core/text/inftxt.cxx @@ -1145,27 +1145,30 @@ void SwTxtPaintInfo::DrawCheckBox( const SwFieldFormPortion &rPor, bool checked) { SwRect aIntersect; CalcRect( rPor, &aIntersect, 0 ); - if ( aIntersect.HasArea() ) { - if (OnWin()) { - OutputDevice* pOutDev = (OutputDevice*)GetOut(); - pOutDev->Push( PUSH_LINECOLOR | PUSH_FILLCOLOR ); - pOutDev->SetLineColor( Color(220, 233, 245)); - pOutDev->SetFillColor( Color(220, 233, 245)); - pOutDev->DrawRect( aIntersect.SVRect() ); - pOutDev->Pop(); - } - const int delta=10; - Rectangle r(aIntersect.Left()+delta, aIntersect.Top()+delta, aIntersect.Right()-delta, aIntersect.Bottom()-delta); - pOut->Push( PUSH_LINECOLOR | PUSH_FILLCOLOR ); - pOut->SetLineColor( Color(0, 0, 0)); - pOut->SetFillColor(); - pOut->DrawRect( r ); - if (checked) { - pOut->DrawLine(r.TopLeft(), r.BottomRight()); - pOut->DrawLine(r.TopRight(), r.BottomLeft()); + if ( aIntersect.HasArea() ) + { + if (OnWin() && SwViewOption::IsFieldShadings() && + !GetOpt().IsPagePreview()) + { + OutputDevice* pOut_ = (OutputDevice*)GetOut(); + pOut_->Push( PUSH_LINECOLOR | PUSH_FILLCOLOR ); + pOut_->SetFillColor( SwViewOption::GetFieldShadingsColor() ); + pOut_->SetLineColor(); + pOut_->DrawRect( aIntersect.SVRect() ); + pOut_->Pop(); + } + const int delta=10; + Rectangle r(aIntersect.Left()+delta, aIntersect.Top()+delta, aIntersect.Right()-delta, aIntersect.Bottom()-delta); + pOut->Push( PUSH_LINECOLOR | PUSH_FILLCOLOR ); + pOut->SetLineColor( Color(0, 0, 0)); + pOut->SetFillColor(); + pOut->DrawRect( r ); + if (checked) { + pOut->DrawLine(r.TopLeft(), r.BottomRight()); + pOut->DrawLine(r.TopRight(), r.BottomLeft()); + } pOut->Pop(); } - } } /************************************************************************* @@ -1219,14 +1222,22 @@ void SwTxtPaintInfo::_DrawBackBrush( const SwLinePortion &rPor ) const } } bool bIsStartMark=(1==GetLen() && CH_TXT_ATR_FIELDSTART==GetTxt().GetChar(GetIdx())); - if(pFieldmark) OSL_TRACE("Found Fieldmark"); + if(pFieldmark) { + OSL_TRACE("Found Fieldmark"); +#if DEBUG + rtl::OUString str = pFieldmark->toString( ); + fprintf( stderr, "%s\n", rtl::OUStringToOString( str, RTL_TEXTENCODING_UTF8 ).getStr( ) ); +#endif + } if(bIsStartMark) OSL_TRACE("Found StartMark"); - if (OnWin() && (pFieldmark!=NULL || bIsStartMark)) + if (OnWin() && (pFieldmark!=NULL || bIsStartMark) && + SwViewOption::IsFieldShadings() && + !GetOpt().IsPagePreview()) { OutputDevice* pOutDev = (OutputDevice*)GetOut(); pOutDev->Push( PUSH_LINECOLOR | PUSH_FILLCOLOR ); - pOutDev->SetLineColor( Color(220, 233, 245)); - pOutDev->SetFillColor( Color(220, 233, 245)); + pOutDev->SetFillColor( SwViewOption::GetFieldShadingsColor() ); + pOutDev->SetLineColor( ); pOutDev->DrawRect( aIntersect.SVRect() ); pOutDev->Pop(); } diff --git a/sw/source/core/text/portxt.cxx b/sw/source/core/text/portxt.cxx index eec34ffe5b66..63a12948dc34 100644 --- a/sw/source/core/text/portxt.cxx +++ b/sw/source/core/text/portxt.cxx @@ -55,11 +55,13 @@ #include #include #include +#include #if OSL_DEBUG_LEVEL > 1 const sal_Char *GetLangName( const MSHORT nLang ); #endif +using namespace ::sw::mark; using namespace ::com::sun::star; using namespace ::com::sun::star::i18n::ScriptType; @@ -769,9 +771,10 @@ void SwHolePortion::HandlePortion( SwPortionHandler& rPH ) const rPH.Text( GetLen(), GetWhichPor() ); } -void SwFieldMarkPortion::Paint( const SwTxtPaintInfo & rInf) const +void SwFieldMarkPortion::Paint( const SwTxtPaintInfo & /*rInf*/) const { - SwTxtPortion::Paint(rInf); + // These shouldn't be painted! + // SwTxtPortion::Paint(rInf); } sal_Bool SwFieldMarkPortion::Format( SwTxtFormatInfo & ) @@ -781,38 +784,95 @@ sal_Bool SwFieldMarkPortion::Format( SwTxtFormatInfo & ) return ret; } +namespace ecma { + static int getCurrentListIndex( IFieldmark* pBM, + ::rtl::OUString *currentText = NULL ) + { + int currentIndex = pBM->getParam( ECMA_FORMDROPDOWN_RESULT, "0" ).second.toInt32(); + int idx = 0; + for( int i = 0; i < pBM->getNumOfParams(); i++ ) + { + IFieldmark::ParamPair_t p = pBM->getParam( i ); + if ( p.first.compareToAscii( ECMA_FORMDROPDOWN_LISTENTRY ) == 0 ) + { + if ( idx == currentIndex ) + { + if ( currentText!=NULL ) *currentText=p.second; + break; + } + else + idx++; + } + } + return idx; + } +} /* ecma */ //FIXME Fieldbk -//void SwFieldFormPortion::Paint( const SwTxtPaintInfo& rInf ) const -void SwFieldFormPortion::Paint( const SwTxtPaintInfo& ) const +void SwFieldFormPortion::Paint( const SwTxtPaintInfo& rInf ) const { -// SwTxtNode *pNd=const_cast(rInf.GetTxtFrm()->GetTxtNode()); -// const SwDoc *doc=pNd->GetDoc(); -// SwIndex aIndex( pNd, rInf.GetIdx() ); -// SwPosition aPosition(*pNd, aIndex); -// pMark = dynamic_cast< doc->getFieldmarkFor(aPosition); -// OSL_ENSURE(pMark, -// "SwFieldFormPortion::Paint(..)" -// " - Where is my form field bookmark???"); - -// bool checked=(pBM!=NULL?pBM->IsChecked():false); -// rInf.DrawCheckBox(*this , checked); -} + SwTxtNode* pNd = const_cast(rInf.GetTxtFrm()->GetTxtNode()); + const SwDoc *doc=pNd->GetDoc(); + SwIndex aIndex( pNd, rInf.GetIdx() ); + SwPosition aPosition(*pNd, aIndex); -sal_Bool SwFieldFormPortion::Format( SwTxtFormatInfo &rInf ) -{ - sal_Bool ret=0; -// ret=SwTxtPortion::Format(rInf); + IFieldmark* pBM = doc->getIDocumentMarkAccess( )->getFieldmarkFor( aPosition ); - Width(rInf.GetTxtHeight()); - Height(rInf.GetTxtHeight()); - SetAscent(rInf.GetAscent()); - //int h=rInf.GetTxtHeight(); + OSL_ENSURE( pBM, + "SwFieldFormPortion::Paint(..)" + " - Where is my form field bookmark???"); + + if ( pBM != NULL ) + { + if ( pBM->GetFieldname( ).equalsAscii( ECMA_FORMCHECKBOX ) ) + { // a checkbox... + bool checked = pBM->getParam( ECMA_FORMCHECKBOX_CHECKED ).second.compareToAscii("on") == 0; + rInf.DrawCheckBox( *this , checked); + } + else if ( pBM->GetFieldname( ).equalsAscii( ECMA_FORMDROPDOWN ) ) + { // a list... + rtl::OUString aTxt; + rInf.DrawViewOpt( *this, POR_FLD ); + rInf.DrawText( aTxt, *this, 0, aTxt.getLength(), false ); + } + else + { + assert(0); // unknown type... + } + } +} -/* - Height(100); - SetAscent(100); -*/ +sal_Bool SwFieldFormPortion::Format( SwTxtFormatInfo & rInf ) +{ + sal_Bool ret = 0; + SwTxtNode *pNd = const_cast < SwTxtNode * >( rInf.GetTxtFrm( )->GetTxtNode( ) ); + const SwDoc *doc = pNd->GetDoc( ); + SwIndex aIndex( pNd, rInf.GetIdx( ) ); + SwPosition aPosition( *pNd, aIndex ); + IFieldmark *pBM = doc->getIDocumentMarkAccess( )->getFieldmarkFor( aPosition ); + ASSERT( pBM != NULL, "Where is my form field bookmark???" ); + if ( pBM != NULL ) + { + if ( pBM->GetFieldname( ).equalsAscii( ECMA_FORMCHECKBOX ) ) + { + Width( rInf.GetTxtHeight( ) ); + Height( rInf.GetTxtHeight( ) ); + SetAscent( rInf.GetAscent( ) ); + } + else if ( pBM->GetFieldname( ).equalsAscii( ECMA_FORMDROPDOWN ) ) + { + ::rtl::OUString aTxt; + ecma::getCurrentListIndex( pBM, &aTxt ); + SwPosSize aPosSize = rInf.GetTxtSize( aTxt ); + Width( aPosSize.Width( ) ); + Height( aPosSize.Height( ) ); + SetAscent( rInf.GetAscent( ) ); + } + else + { + assert( 0 ); // unknown type... + } + } return ret; } diff --git a/sw/source/core/unocore/unobkm.cxx b/sw/source/core/unocore/unobkm.cxx index 0a9528823689..77241f815773 100644 --- a/sw/source/core/unocore/unobkm.cxx +++ b/sw/source/core/unocore/unobkm.cxx @@ -7,7 +7,7 @@ * OpenOffice.org - a multi-platform office productivity suite * * $RCSfile: unobkm.cxx,v $ - * $Revision: 1.17 $ + * $Revision: 1.16 $ * * This file is part of OpenOffice.org. * @@ -49,6 +49,7 @@ #include +using namespace ::sw::mark; using namespace ::com::sun::star; using namespace ::com::sun::star::lang; using namespace ::com::sun::star::uno; @@ -357,66 +358,85 @@ SwXFieldmark::SwXFieldmark(bool _isReplacementObject, ::sw::mark::IMark* pBkm, S , isReplacementObject(_isReplacementObject) { } -void SwXFieldmark::attachToRange(const uno::Reference< text::XTextRange > & xTextRange) +void SwXFieldmark::attachToRange( const uno::Reference < text::XTextRange >& xTextRange ) throw( lang::IllegalArgumentException, uno::RuntimeException ) { - attachToRangeEx(xTextRange, (isReplacementObject?IDocumentMarkAccess::CHECKBOX_FIELDMARK:IDocumentMarkAccess::TEXT_FIELDMARK)); + attachToRangeEx( xTextRange, + ( isReplacementObject ? IDocumentMarkAccess::CHECKBOX_FIELDMARK : IDocumentMarkAccess::TEXT_FIELDMARK ) ); } -::rtl::OUString SwXFieldmark::getDescription(void) throw( ::com::sun::star::uno::RuntimeException ) +::rtl::OUString SwXFieldmark::getFieldType( void ) + throw( ::com::sun::star::uno::RuntimeException ) { - vos::OGuard aGuard(Application::GetSolarMutex()); -// TODO implement... -// if(!GetBookmark()) - ::sw::mark::IFieldmark const * const pMark = - dynamic_cast< ::sw::mark::IFieldmark const * const>(GetBookmark()); - if(!pMark) - throw uno::RuntimeException(); - return pMark->GetFieldHelptext(); + vos::OGuard aGuard( Application::GetSolarMutex( ) ); + IMark* pMark = const_cast< IMark* >( GetBookmark( ) ); + IFieldmark *pBkm = dynamic_cast< IFieldmark* > ( pMark ); + if ( pBkm ) + return pBkm->GetFieldname( ); + else + throw uno::RuntimeException( ); } -::sal_Int16 SAL_CALL SwXFieldmark::getType() throw (::com::sun::star::uno::RuntimeException) +void SwXFieldmark::setFieldType( const::rtl::OUString & fieldType ) + throw( ::com::sun::star::uno::RuntimeException ) { - vos::OGuard aGuard(Application::GetSolarMutex()); - ::sw::mark::ICheckboxFieldmark const * const pAsCheckbox = - dynamic_cast< ::sw::mark::ICheckboxFieldmark const * const>(GetBookmark()); - if(pAsCheckbox) - return 1; - return 0; + vos::OGuard aGuard( Application::GetSolarMutex( ) ); + IMark* pMark = const_cast< IMark* >( GetBookmark( ) ); + IFieldmark *pBkm = dynamic_cast< IFieldmark* >( pMark ); + if ( pBkm ) + pBkm->SetFieldname( fieldType ); + else + throw uno::RuntimeException( ); } -::sal_Int16 SAL_CALL SwXFieldmark::getRes() throw (::com::sun::star::uno::RuntimeException) +sal_Int16 SwXFieldmark::getParamCount( ) + throw( ::com::sun::star::uno::RuntimeException ) { - vos::OGuard aGuard(Application::GetSolarMutex()); - ::sw::mark::ICheckboxFieldmark const * const pAsCheckbox = - dynamic_cast< ::sw::mark::ICheckboxFieldmark const * const>(GetBookmark()); - if(pAsCheckbox && pAsCheckbox->IsChecked()) - return 1; - return 0; + vos::OGuard aGuard( Application::GetSolarMutex( ) ); + IMark* pMark = const_cast< IMark* >( GetBookmark( ) ); + IFieldmark *pBkm = dynamic_cast< IFieldmark* >( pMark ); + if ( pBkm ) + return pBkm->getNumOfParams( ); + else + throw uno::RuntimeException( ); } -//FIXME Remove Method -void SAL_CALL SwXFieldmark::setType( ::sal_Int16 ) throw (::com::sun::star::uno::RuntimeException) +rtl::OUString SwXFieldmark::getParamName( sal_Int16 i ) + throw( ::com::sun::star::uno::RuntimeException ) { - vos::OGuard aGuard(Application::GetSolarMutex()); - throw uno::RuntimeException(); + vos::OGuard aGuard( Application::GetSolarMutex( ) ); + IMark* pMark = const_cast< IMark* >( GetBookmark( ) ); + IFieldmark *pBkm = dynamic_cast< IFieldmark* >( pMark ); + if ( pBkm ) + return pBkm->getParam( i ).first; + else + throw uno::RuntimeException( ); } -//FIXME Remove Method -void SAL_CALL SwXFieldmark::setRes( ::sal_Int16 ) throw (::com::sun::star::uno::RuntimeException) +::rtl::OUString SwXFieldmark::getParamValue( ::sal_Int16 i ) + throw( ::com::sun::star::uno::RuntimeException ) { - vos::OGuard aGuard(Application::GetSolarMutex()); - throw uno::RuntimeException(); + vos::OGuard aGuard( Application::GetSolarMutex( ) ); + IMark* pMark = const_cast< IMark* >( GetBookmark( ) ); + IFieldmark *pBkm = dynamic_cast< IFieldmark* >( pMark ); + if ( pBkm ) + return pBkm->getParam( i ).second; + else + throw uno::RuntimeException( ); } -void SAL_CALL SwXFieldmark::setDescription( const ::rtl::OUString& description ) - throw (::com::sun::star::uno::RuntimeException) +void SwXFieldmark::addParam( const ::rtl::OUString & name, + const ::rtl::OUString & value, + sal_Bool replaceExisting ) + throw( ::com::sun::star::uno::RuntimeException ) { - vos::OGuard aGuard(Application::GetSolarMutex()); - const ::sw::mark::IFieldmark* pMark = - dynamic_cast(GetBookmark()); - if(pMark) - const_cast< ::sw::mark::IFieldmark*>(pMark)->SetFieldHelptext(description); + vos::OGuard aGuard( Application::GetSolarMutex( ) ); + IMark* pMark = const_cast< IMark* >( GetBookmark( ) ); + IFieldmark *pBkm = dynamic_cast< IFieldmark* >( pMark ); + if ( pBkm ) + pBkm->addParam( const_cast< rtl::OUString& >( name ), + const_cast< rtl::OUString& >( value ), + replaceExisting ); else - throw uno::RuntimeException(); + throw uno::RuntimeException( ); } diff --git a/sw/source/filter/ww8/wrtw8nds.cxx b/sw/source/filter/ww8/wrtw8nds.cxx index 2cbbb7943f37..2c7eaa0f64ef 100644 --- a/sw/source/filter/ww8/wrtw8nds.cxx +++ b/sw/source/filter/ww8/wrtw8nds.cxx @@ -110,8 +110,48 @@ using namespace ::com::sun::star; using namespace ::com::sun::star::i18n; using namespace sw::util; using namespace sw::types; +using namespace sw::mark; using namespace nsFieldFlags; + +static String lcl_getFieldCode( const IFieldmark* pFieldmark ) { + ASSERT(pFieldmark!=NULL, "where is my fieldmark???"); + if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_FORMTEXT ) ) { + return String::CreateFromAscii(" FORMTEXT "); + } else if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_FORMDROPDOWN ) ) { + return String::CreateFromAscii(" FORMDROPDOWN "); + } else if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_FORMCHECKBOX ) ) { + return String::CreateFromAscii(" FORMCHECKBOX "); + } else if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_TOC ) ) { + return String::CreateFromAscii(" TOC "); + } else if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_HYPERLINK ) ) { + return String::CreateFromAscii(" HYPERLINK "); + } else if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_PAGEREF ) ) { + return String::CreateFromAscii(" PAGEREF "); + } else { + return pFieldmark->GetFieldname(); + } +} + +ww::eField lcl_getFieldId( const IFieldmark* pFieldmark ) { + ASSERT(pFieldmark!=NULL, "where is my fieldmark???"); + if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_FORMTEXT ) ) { + return ww::eFORMTEXT; + } else if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_FORMDROPDOWN ) ) { + return ww::eFORMDROPDOWN; + } else if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_FORMCHECKBOX ) ) { + return ww::eFORMCHECKBOX; + } else if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_TOC ) ) { + return ww::eTOC; + } else if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_HYPERLINK ) ) { + return ww::eHYPERLINK; + } else if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_PAGEREF ) ) { + return ww::ePAGEREF; + } else { + return ww::eUNKNOWN; + } +} + /* */ MSWordAttrIter::MSWordAttrIter( MSWordExportBase& rExport ) @@ -262,22 +302,40 @@ SwAttrIter::SwAttrIter(MSWordExportBase& rWr, const SwTxtNode& rTxtNd) : nAktSwPos = SearchNext(1); } +xub_StrLen lcl_getMinPos( xub_StrLen pos1, xub_StrLen pos2 ) +{ + xub_StrLen min = STRING_NOTFOUND; + if ( pos1 == STRING_NOTFOUND && pos2 != STRING_NOTFOUND ) + min = pos2; + else if ( pos2 == STRING_NOTFOUND && pos1 != STRING_NOTFOUND ) + min = pos1; + else if ( pos2 != STRING_NOTFOUND && pos2 != STRING_NOTFOUND ) + { + if ( pos1 < pos2 ) + min = pos1; + else + min = pos2; + } + + return min; +} + xub_StrLen SwAttrIter::SearchNext( xub_StrLen nStartPos ) { xub_StrLen nPos; xub_StrLen nMinPos = STRING_MAXLEN; + xub_StrLen i=0; + const String aTxt = rNd.GetTxt(); - xub_StrLen pos = aTxt.Search(CH_TXT_ATR_FIELDSTART, nStartPos); - if( pos==STRING_NOTFOUND ) - { - pos = aTxt.Search(CH_TXT_ATR_FIELDEND, nStartPos); - if( pos==STRING_NOTFOUND ) - pos = aTxt.Search(CH_TXT_ATR_FORMELEMENT, nStartPos); - } - if( pos!=STRING_NOTFOUND ) - nMinPos=pos; + xub_StrLen fieldEndPos = aTxt.Search(CH_TXT_ATR_FIELDEND, nStartPos); + xub_StrLen fieldStartPos = aTxt.Search(CH_TXT_ATR_FIELDSTART, nStartPos); + xub_StrLen formElementPos = aTxt.Search(CH_TXT_ATR_FORMELEMENT, nStartPos); - xub_StrLen i=0; + xub_StrLen pos = lcl_getMinPos( fieldEndPos, fieldStartPos ); + pos = lcl_getMinPos( pos, formElementPos ); + + if (pos!=STRING_NOTFOUND) + nMinPos=pos; // first the redline, then the attributes if( pCurRedline ) @@ -1695,12 +1753,14 @@ void MSWordExportBase::OutputTextNode( const SwTxtNode& rNode ) ::sw::mark::IFieldmark const * const pFieldmark = pMarkAccess->getFieldmarkFor( aPosition ); OSL_ENSURE( pFieldmark, "Looks like this doc is broken...; where is the Fieldmark for the FIELDSTART??" ); - if ( pFieldmark ) - AppendBookmark( pFieldmark->GetName(), true ); - OutputField( NULL, ww::eFORMTEXT, String::CreateFromAscii( " FORMTEXT " ), WRITEFIELD_START | WRITEFIELD_CMD_START ); - if ( pFieldmark ) + if ( pFieldmark->GetFieldname().equalsAscii( ECMA_FORMTEXT ) ) + AppendBookmark( pFieldmark->GetName(), false ); + OutputField( NULL, lcl_getFieldId( pFieldmark ), lcl_getFieldCode( pFieldmark ), WRITEFIELD_START | WRITEFIELD_CMD_START ); + if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_FORMTEXT ) ) WriteFormData( *pFieldmark ); - OutputField( NULL, ww::eFORMTEXT, String(), WRITEFIELD_CMD_END ); + else if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_HYPERLINK ) ) + WriteHyperlinkData( *pFieldmark ); + OutputField( NULL, lcl_getFieldId( pFieldmark ), String(), WRITEFIELD_CMD_END ); } else if ( ch == CH_TXT_ATR_FIELDEND ) { @@ -1708,8 +1768,8 @@ void MSWordExportBase::OutputTextNode( const SwTxtNode& rNode ) ::sw::mark::IFieldmark const * const pFieldmark = pMarkAccess->getFieldmarkFor( aPosition ); OSL_ENSURE( pFieldmark, "Looks like this doc is broken...; where is the Fieldmark for the FIELDSTART??" ); - OutputField( NULL, ww::eFORMTEXT, String(), WRITEFIELD_CLOSE ); - if ( pFieldmark ) + OutputField( NULL, lcl_getFieldId( pFieldmark ), String(), WRITEFIELD_CLOSE ); + if ( pFieldmark->GetFieldname().equalsAscii( ECMA_FORMTEXT ) ) AppendBookmark( pFieldmark->GetName(), false ); } else if ( ch == CH_TXT_ATR_FORMELEMENT ) @@ -1718,13 +1778,18 @@ void MSWordExportBase::OutputTextNode( const SwTxtNode& rNode ) ::sw::mark::IFieldmark const * const pFieldmark = pMarkAccess->getFieldmarkFor( aPosition ); OSL_ENSURE( pFieldmark, "Looks like this doc is broken...; where is the Fieldmark for the FIELDSTART??" ); - if ( pFieldmark ) - AppendBookmark( pFieldmark->GetName(), true ); - OutputField( NULL, ww::eFORMCHECKBOX, String::CreateFromAscii( " FORMCHECKBOX " ), WRITEFIELD_START | WRITEFIELD_CMD_START ); - if ( pFieldmark ) + bool isEcma = pFieldmark->GetFieldname( ).equalsAscii( ECMA_FORMDROPDOWN ) || + pFieldmark->GetFieldname( ).equalsAscii( ECMA_FORMCHECKBOX ); + + if ( isEcma ) + AppendBookmark( pFieldmark->GetName(), 0 ); + OutputField( NULL, lcl_getFieldId( pFieldmark ), + lcl_getFieldCode( pFieldmark ), + WRITEFIELD_START | WRITEFIELD_CMD_START ); + if ( isEcma ) WriteFormData( *pFieldmark ); - OutputField( NULL, ww::eFORMCHECKBOX, String(), WRITEFIELD_CMD_END | WRITEFIELD_CLOSE ); - if ( pFieldmark ) + OutputField( NULL, lcl_getFieldId( pFieldmark ), String(), WRITEFIELD_CLOSE ); + if ( isEcma ) AppendBookmark( pFieldmark->GetName(), false ); } nLen -= static_cast< USHORT >( ofs ); diff --git a/sw/source/filter/ww8/wrtww8.cxx b/sw/source/filter/ww8/wrtww8.cxx index 6601f874c60f..02ab28a1e6ec 100644 --- a/sw/source/filter/ww8/wrtww8.cxx +++ b/sw/source/filter/ww8/wrtww8.cxx @@ -105,6 +105,7 @@ #include "ww8attributeoutput.hxx" #include +#include #include #include @@ -3466,11 +3467,20 @@ void WW8Export::WriteFormData( const ::sw::mark::IFieldmark& rFieldmark ) const ::sw::mark::IFieldmark* pFieldmark = &rFieldmark; const ::sw::mark::ICheckboxFieldmark* pAsCheckbox = dynamic_cast< const ::sw::mark::ICheckboxFieldmark* >( pFieldmark ); + + ASSERT(rFieldmark.GetFieldname().equalsAscii( ECMA_FORMTEXT ) || rFieldmark.GetFieldname().equalsAscii( ECMA_FORMDROPDOWN ) || rFieldmark.GetFieldname().equalsAscii( ECMA_FORMCHECKBOX ), "Unknown field type!!!"); + if ( ! ( rFieldmark.GetFieldname().equalsAscii( ECMA_FORMTEXT ) || + rFieldmark.GetFieldname().equalsAscii( ECMA_FORMDROPDOWN ) || + rFieldmark.GetFieldname().equalsAscii( ECMA_FORMCHECKBOX ) ) ) + return; + int type = 0; // TextFieldmark if ( pAsCheckbox ) type = 1; + if ( rFieldmark.GetFieldname().equalsAscii( ECMA_FORMDROPDOWN ) ) + type=2; - const ::rtl::OUString ffname = rFieldmark.GetFieldname(); + const String ffname = rFieldmark.getParam("name").second; ULONG nDataStt = pDataStrm->Tell(); pChpPlc->AppendFkpEntry(Strm().Tell()); @@ -3492,15 +3502,28 @@ void WW8Export::WriteFormData( const ::sw::mark::IFieldmark& rFieldmark ) sal_uInt8 aFldHeader[] = { 0xFF, 0xFF, 0xFF, 0xFF, // Unicode Marker... - 0, 0, 0, 0//, 0, 0, 0, 0 + 0, 0, 0, 0, 0, 0 //, 0, 0 }; aFldHeader[4] |= (type & 0x03); int ffres = 0; // rFieldmark.GetFFRes(); if ( pAsCheckbox && pAsCheckbox->IsChecked() ) ffres = 1; + else if ( type == 2 ) + ffres = rFieldmark.getParam( ECMA_FORMDROPDOWN_RESULT, "0" ).second.toInt32(); aFldHeader[4] |= ( (ffres<<2) & 0x7C ); + std::vector< ::rtl::OUString > aListItems; + if (type==2) + { + aFldHeader[5] |= 0x80; // ffhaslistbox + for ( int i = 0; i < rFieldmark.getNumOfParams() ; i++ ) + { + if (rFieldmark.getParam(i).first.compareToAscii(ECMA_FORMDROPDOWN_LISTENTRY)==0) + aListItems.push_back(rFieldmark.getParam(i).second); + } + } + const ::rtl::OUString ffdeftext; const ::rtl::OUString ffformat; const ::rtl::OUString ffhelptext; @@ -3508,6 +3531,7 @@ void WW8Export::WriteFormData( const ::sw::mark::IFieldmark& rFieldmark ) const ::rtl::OUString ffentrymcr; const ::rtl::OUString ffexitmcr; + const sal_uInt8 aFldData[] = { 0,0,0,0, // len of struct @@ -3520,13 +3544,22 @@ void WW8Export::WriteFormData( const ::sw::mark::IFieldmark& rFieldmark ) }; int slen = sizeof( aFldData ) + sizeof( aFldHeader ) - + 2*ffname.getLength() + 4 + + 2*ffname.Len() + 4 + 2*ffdeftext.getLength() + 4 + 2*ffformat.getLength() + 4 + 2*ffhelptext.getLength() + 4 + 2*ffstattext.getLength() + 4 + 2*ffentrymcr.getLength() + 4 + 2*ffexitmcr.getLength() + 4; + if ( type==2 ) { + slen += 2; // for 0xFF, 0xFF + slen += 4; // for num of list items + const int items = aListItems.size(); + for( int i = 0; i < items; i++ ) { + rtl::OUString item = aListItems[i]; + slen += 2 * item.getLength() + 2; + } + } #ifdef OSL_BIGENDIAN slen = SWAPLONG( slen ); #endif // OSL_BIGENDIAN @@ -3537,6 +3570,7 @@ void WW8Export::WriteFormData( const ::sw::mark::IFieldmark& rFieldmark ) len = sizeof( aFldHeader ); OSL_ENSURE( len == 8, "SwWW8Writer::WriteFormData(..) - wrong aFldHeader length" ); + pDataStrm->Write( aFldHeader, len ); SwWW8Writer::WriteString_xstz( *pDataStrm, ffname, true ); // Form field name @@ -3551,11 +3585,20 @@ void WW8Export::WriteFormData( const ::sw::mark::IFieldmark& rFieldmark ) SwWW8Writer::WriteString_xstz( *pDataStrm, String( ffstattext ), true ); SwWW8Writer::WriteString_xstz( *pDataStrm, String( ffentrymcr ), true ); SwWW8Writer::WriteString_xstz( *pDataStrm, String( ffexitmcr ), true ); -// if (type==2) { -// // 0xFF, 0xFF -// // sal_uInt32 number of strings -// // (sal_uInt16 len; sal_uInt16 unicode char[len])*num of strings -// } + if (type==2) { + *pDataStrm<<(sal_uInt16)0xFFFF; + const int items=aListItems.size(); + *pDataStrm<<(sal_uInt32)items; + for(int i=0;imaApos); maOldFieldStack.swap(pRdr->maFieldStack); - maFieldCtxStack.swap(pRdr->maNewFieldCtxStack); } void WW8ReaderSave::Restore( SwWW8ImplReader* pRdr ) @@ -1559,7 +1558,6 @@ void WW8ReaderSave::Restore( SwWW8ImplReader* pRdr ) pRdr->pPlcxMan->RestoreAllPLCFx(maPLCFxSave); pRdr->maApos.swap(maOldApos); pRdr->maFieldStack.swap(maOldFieldStack); - pRdr->maNewFieldCtxStack.swap(maFieldCtxStack); } void SwWW8ImplReader::Read_HdFtFtnText( const SwNodeIndex* pSttIdx, @@ -2672,29 +2670,6 @@ bool SwWW8ImplReader::ReadChar(long nPosCp, long nCpOfs) case 0x15: if( !bSpec ) // Juristenparagraph cInsert = '\xa7'; - else - { - // 0x15 is special --> so it's our field end mark...; - // hmmm what about field marks not handled by us??, maybe a problem with nested fields; - // probably an area of bugs... [well release quick and release often....] - if (!maNewFieldCtxStack.empty() && pPaM!=NULL && pPaM->GetPoint()!=NULL) - { - ::boost::scoped_ptr pFieldCtx(maNewFieldCtxStack.back()); - maNewFieldCtxStack.pop_back(); - SwPosition aEndPos = *pPaM->GetPoint(); - SwPaM aFldPam(pFieldCtx->GetPtNode(), pFieldCtx->GetPtCntnt(), aEndPos.nNode, aEndPos.nContent.GetIndex()); - IDocumentMarkAccess* const pMarkAccess = rDoc.getIDocumentMarkAccess(); - ::sw::mark::IFieldmark* pFieldmark = - dynamic_cast< ::sw::mark::IFieldmark*>(pMarkAccess->makeMark( - aFldPam, - pFieldCtx->GetBookmarkName(), - IDocumentMarkAccess::TEXT_FIELDMARK)); - OSL_ENSURE(pFieldmark!=NULL, - "hmmm; why was the bookmark not created?"); - if (pFieldmark) - pFieldCtx->SetCurrentFieldParamsTo(pFieldmark); - } - } break; case 0x9: cInsert = '\x9'; // Tab @@ -3506,7 +3481,14 @@ void wwSectionManager::InsertSegments() bool bInsertSection = (aIter != aStart) ? (aIter->IsContinous() && bThisAndPreviousAreCompatible): false; bool bInsertPageDesc = !bInsertSection; - bool bProtected = !bUseEnhFields && SectionIsProtected(*aIter); // do we really need this ?? I guess I have a different logic in editshell which disales this... + bool bProtected = SectionIsProtected(*aIter); // do we really need this ?? I guess I have a different logic in editshell which disales this... + if (bUseEnhFields && mrReader.pWDop->fProtEnabled && aIter->IsNotProtected()) { + // here we have the special case that the whole document is protected, with the execption of this section. + // I want to address this when I do the section rework, so for the moment we disable the overall protection then... + mrReader.rDoc.set(IDocumentSettingAccess::PROTECT_FORM, false ); + } + + if (bInsertPageDesc) { /* diff --git a/sw/source/filter/ww8/ww8par.hxx b/sw/source/filter/ww8/ww8par.hxx index 93a20df1576c..66f50c374811 100644 --- a/sw/source/filter/ww8/ww8par.hxx +++ b/sw/source/filter/ww8/ww8par.hxx @@ -60,6 +60,8 @@ #include "ww8glsy.hxx" #include "wrtww8.hxx" #include "../inc/msfilter.hxx" +#include +#include class SwDoc; class SwPaM; @@ -362,6 +364,8 @@ namespace sw Position(const SwPosition &rPos); Position(const Position &rPos); operator SwPosition() const; + SwNodeIndex GetPtNode() { return maPtNode; }; + xub_StrLen GetPtCntnt() { return mnPtCntnt; }; }; } } @@ -369,36 +373,30 @@ namespace sw class FieldEntry { public: - sw::hack::Position maStartPos; - sal_uInt16 mnFieldId; - FieldEntry(SwPosition &rPos, sal_uInt16 nFieldId) throw(); - FieldEntry(const FieldEntry &rOther) throw(); - FieldEntry &operator=(const FieldEntry &rOther) throw(); - void Swap(FieldEntry &rOther) throw(); -}; + typedef ::std::vector Params_t; -class WW8NewFieldCtx -{ private: - SwNodeIndex maPtNode; - xub_StrLen mnPtCntnt; ::rtl::OUString msBookmarkName; ::rtl::OUString msMarkType; - typedef ::std::pair< ::rtl::OUString, ::rtl::OUString> Param_t; - typedef ::std::vector< Param_t > Params_t; Params_t maParams; - SwPaM * mpPaM; public: - WW8NewFieldCtx(SwPosition &aStartPos, ::rtl::OUString sBookmarkName, ::rtl::OUString sMarkType); - ~WW8NewFieldCtx(); + sw::hack::Position maStartPos; + sal_uInt16 mnFieldId; + FieldEntry(SwPosition &rPos, sal_uInt16 nFieldId) throw(); + FieldEntry(const FieldEntry &rOther) throw(); + FieldEntry &operator=(const FieldEntry &rOther) throw(); + void Swap(FieldEntry &rOther) throw(); + + SwNodeIndex GetPtNode() { return maStartPos.GetPtNode(); }; + xub_StrLen GetPtCntnt() { return maStartPos.GetPtCntnt(); }; - SwNodeIndex GetPtNode() { return maPtNode; }; - xub_StrLen GetPtCntnt() { return mnPtCntnt; }; ::rtl::OUString GetBookmarkName(); - ::rtl::OUString GetMarkType(); + ::rtl::OUString GetBookmarkType(); + void SetBookmarkName(::rtl::OUString bookmarkName); + void SetBookmarkType(::rtl::OUString bookmarkType); void AddParam(::rtl::OUString name, ::rtl::OUString value); - void SetCurrentFieldParamsTo(::sw::mark::IFieldmark* pFieldmark); + Params_t &getParams(); }; @@ -434,7 +432,6 @@ private: bool mbWasParaEnd; bool mbHasBorder; bool mbFirstPara; - std::deque maFieldCtxStack; public: WW8ReaderSave(SwWW8ImplReader* pRdr, WW8_CP nStart=-1); void Restore(SwWW8ImplReader* pRdr); @@ -889,9 +886,6 @@ private: std::deque maFieldStack; typedef std::deque::const_iterator mycFieldIter; - typedef std::deque WW8NewFieldCtxStack_t; - WW8NewFieldCtxStack_t maNewFieldCtxStack; - /* A stack of open footnotes. Should only be one in it at any time. */ diff --git a/sw/source/filter/ww8/ww8par3.cxx b/sw/source/filter/ww8/ww8par3.cxx index aa2737da1fa4..886abd23486d 100644 --- a/sw/source/filter/ww8/ww8par3.cxx +++ b/sw/source/filter/ww8/ww8par3.cxx @@ -96,66 +96,14 @@ #include #include +#include #include using namespace com::sun::star; using namespace sw::util; using namespace sw::types; - -WW8NewFieldCtx::WW8NewFieldCtx(SwPosition &aStartPos, ::rtl::OUString sBookmarkName, ::rtl::OUString sMarkType) - : maPtNode(aStartPos.nNode) - , mnPtCntnt(aStartPos.nContent.GetIndex()) - , msBookmarkName(sBookmarkName) - , msMarkType(sMarkType) - , mpPaM(NULL) -{ -} - - -WW8NewFieldCtx::~WW8NewFieldCtx() -{ - if (mpPaM) delete mpPaM; -} - -::rtl::OUString WW8NewFieldCtx::GetBookmarkName() -{ - return msBookmarkName; -} - -::rtl::OUString WW8NewFieldCtx::GetMarkType() -{ - return msMarkType; -} - -void WW8NewFieldCtx::AddParam(::rtl::OUString name, ::rtl::OUString value) -{ - maParams.push_back( Param_t(name, value) ); -} - -void WW8NewFieldCtx::SetCurrentFieldParamsTo(::sw::mark::IFieldmark* pFieldmark) -{ - for(Params_t::iterator i=maParams.begin();i!=maParams.end();i++) - { - ::rtl::OUString aName=i->first; - ::rtl::OUString aValue=i->second; - if(aName.compareToAscii("Description")==0) - { - pFieldmark->SetFieldHelptext(aValue); - } - else if(aName.compareToAscii("Name")==0) - { - pFieldmark->SetFieldname(aValue); - } - else if(aName.compareToAscii("Result")==0) - { - ::sw::mark::ICheckboxFieldmark* pAsCheckbox = - dynamic_cast< ::sw::mark::ICheckboxFieldmark* >(pFieldmark); - if(pAsCheckbox) - pAsCheckbox->SetChecked(aValue.toInt32()==0); - } - } -} +using namespace sw::mark; //----------------------------------------- // UNO-Controls @@ -233,10 +181,10 @@ eF_ResT SwWW8ImplReader::Read_F_FormTextBox( WW8FieldDesc* pF, String& rStr ) if (aBookmarkName.Len()>0) { - WW8NewFieldCtx *pFieldCtx=new WW8NewFieldCtx(*pPaM->GetPoint(), aBookmarkName, ::rtl::OUString::createFromAscii("ecma.office-open-xml.field.FORMTEXT")); - maNewFieldCtxStack.push_back(pFieldCtx); - pFieldCtx->AddParam(::rtl::OUString::createFromAscii("Description"), aFormula.sToolTip); - pFieldCtx->AddParam(::rtl::OUString::createFromAscii("Name"), aFormula.sTitle); + maFieldStack.back().SetBookmarkName(aBookmarkName); + maFieldStack.back().SetBookmarkType(::rtl::OUString::createFromAscii(ECMA_FORMTEXT)); + maFieldStack.back().AddParam(::rtl::OUString::createFromAscii("Description"), aFormula.sToolTip); + maFieldStack.back().AddParam(::rtl::OUString::createFromAscii("Name"), aFormula.sTitle); } return FLD_TEXT; } @@ -279,19 +227,22 @@ eF_ResT SwWW8ImplReader::Read_F_FormCheckBox( WW8FieldDesc* pF, String& rStr ) aBookmarkName=pB->GetUniqueBookmarkName(aFormula.sTitle); } - if (aBookmarkName.Len()>0) { - ::sw::mark::ICheckboxFieldmark* pFieldmark = - dynamic_cast< ::sw::mark::ICheckboxFieldmark*>(rDoc.getIDocumentMarkAccess()->makeMark( - *pPaM, - aBookmarkName, - IDocumentMarkAccess::CHECKBOX_FIELDMARK)); - OSL_ENSURE(pFieldmark, - "hmmm; why was the bookmark not created?"); - if(pFieldmark) - { - pFieldmark->SetFieldname(aFormula.sTitle); - pFieldmark->SetFieldHelptext(aFormula.sToolTip); - pFieldmark->SetChecked(aFormula.nChecked!=0); + if (aBookmarkName.Len()>0) + { + IDocumentMarkAccess* pMarksAccess = rDoc.getIDocumentMarkAccess( ); + IFieldmark* pFieldmark = dynamic_cast( pMarksAccess->makeNoTextFieldBookmark( + *pPaM, aBookmarkName, + rtl::OUString::createFromAscii( ECMA_FORMCHECKBOX ) ) ); + ASSERT(pFieldmark!=NULL, "hmmm; why was the bookmark not created?"); + if (pFieldmark!=NULL) { + pFieldmark->addParam( + rtl::OUString::createFromAscii(ECMA_FORMCHECKBOX_NAME), + rtl::OUString( aFormula.sTitle ) ); + pFieldmark->addParam( + rtl::OUString::createFromAscii(ECMA_FORMCHECKBOX_HELPTEXT), aFormula.sToolTip); + pFieldmark->addParam( + rtl::OUString::createFromAscii(ECMA_FORMCHECKBOX_CHECKED), + ::rtl::OUString::createFromAscii(aFormula.nChecked!=0?"on":"off")); // set field data here... } } @@ -306,24 +257,75 @@ eF_ResT SwWW8ImplReader::Read_F_FormListBox( WW8FieldDesc* pF, String& rStr) if (0x01 == rStr.GetChar(writer_cast(pF->nLCode-1))) ImportFormulaControl(aFormula,pF->nSCode+pF->nLCode-1, WW8_CT_DROPDOWN); - SwDropDownField aFld( - (SwDropDownFieldType*)rDoc.GetSysFldType(RES_DROPDOWN)); - - aFld.SetName(aFormula.sTitle); - aFld.SetHelp(aFormula.sHelp); - aFld.SetToolTip(aFormula.sToolTip); + const SvtFilterOptions* pOpt = SvtFilterOptions::Get(); + sal_Bool bUseEnhFields=(pOpt && pOpt->IsUseEnhancedFields()); - if (!aFormula.maListEntries.empty()) + if (!bUseEnhFields) { - aFld.SetItems(aFormula.maListEntries); - int nIndex = aFormula.fDropdownIndex < aFormula.maListEntries.size() - ? aFormula.fDropdownIndex : 0; - aFld.SetSelectedItem(aFormula.maListEntries[nIndex]); + SwDropDownField aFld((SwDropDownFieldType*)rDoc.GetSysFldType(RES_DROPDOWN)); + + aFld.SetName(aFormula.sTitle); + aFld.SetHelp(aFormula.sHelp); + aFld.SetToolTip(aFormula.sToolTip); + + if (!aFormula.maListEntries.empty()) + { + aFld.SetItems(aFormula.maListEntries); + int nIndex = aFormula.fDropdownIndex < aFormula.maListEntries.size() ? aFormula.fDropdownIndex : 0; + aFld.SetSelectedItem(aFormula.maListEntries[nIndex]); + } + + rDoc.InsertPoolItem(*pPaM, SwFmtFld(aFld), 0); + return FLD_OK; } + else + { + //@TODO fix: copy pasting here!!!!!!!!!!!!!! + //REVIEW: don't let this throught.... sometime I forget to get rid of my proof of concept stuff. Please kindly remind me!!!!! - rDoc.InsertPoolItem(*pPaM, SwFmtFld(aFld), 0); + String aBookmarkName; + WW8PLCFx_Book* pB = pPlcxMan->GetBook(); + if (pB!=NULL) + { + WW8_CP currentCP=pF->nSCode; + WW8_CP currentLen=pF->nLen; - return FLD_OK; + USHORT bkmFindIdx; + String aBookmarkFind=pB->GetBookmark(currentCP-1, currentCP+currentLen-1, bkmFindIdx); + + if (aBookmarkFind.Len()>0) + { + pB->SetStatus(bkmFindIdx, BOOK_FIELD); // mark as consumed by field + if (aBookmarkFind.Len()>0) + aBookmarkName=aBookmarkFind; + } + } + + if (pB!=NULL && aBookmarkName.Len()==0) + aBookmarkName=pB->GetUniqueBookmarkName(aFormula.sTitle); + + if (aBookmarkName.Len()>0) + { + IDocumentMarkAccess* pMarksAccess = rDoc.getIDocumentMarkAccess( ); + IFieldmark *pFieldmark = dynamic_cast( + pMarksAccess->makeNoTextFieldBookmark( *pPaM, aBookmarkName, + ::rtl::OUString::createFromAscii( ECMA_FORMDROPDOWN ) ) ); + ASSERT(pFieldmark!=NULL, "hmmm; why was the bookmark not created?"); + if ( pFieldmark != NULL ) + { + rtl::OUString sListEntry=rtl::OUString::createFromAscii( ECMA_FORMDROPDOWN_LISTENTRY ); + std::vector::iterator it = aFormula.maListEntries.begin(); + for( ; it != aFormula.maListEntries.end(); it++ ) + pFieldmark->addParam(sListEntry, *it, false); + + int nIndex = aFormula.fDropdownIndex < aFormula.maListEntries.size() ? aFormula.fDropdownIndex : 0; + pFieldmark->addParam(ECMA_FORMDROPDOWN_RESULT, nIndex); + // set field data here... + } + } + + return FLD_OK; + } } void SwWW8ImplReader::DeleteFormImpl() @@ -2140,11 +2142,18 @@ bool SwWW8ImplReader::ImportFormulaControl(WW8FormulaControl &aFormula, if((aPic.lcb > 0x3A) && !pDataStream->GetError() ) { - pDataStream->Seek( nPicLocFc + aPic.cbHeader ); +#if 0 // some debug fun; remove this later... int len=aPic.lcb-aPic.cbHeader; char *pBuf=(char*)malloc(len); pDataStream->Read( pBuf, len); + static int _h=0; + char fname[255]; + sprintf(fname, "data%03i.data", _h++); + FILE *out=fopen(fname, "wb"); + fwrite(pBuf, len, 1, out); + fclose(out); pDataStream->Seek( nPicLocFc + aPic.cbHeader ); +#endif aFormula.FormulaRead(nWhich,pDataStream); bRet = true; } diff --git a/sw/source/filter/ww8/ww8par5.cxx b/sw/source/filter/ww8/ww8par5.cxx index f5f82d879aac..c5f877cb48b9 100644 --- a/sw/source/filter/ww8/ww8par5.cxx +++ b/sw/source/filter/ww8/ww8par5.cxx @@ -88,22 +88,26 @@ #include #include #include - +#include #include "ww8scan.hxx" // WW8FieldDesc #include "ww8par.hxx" #include "ww8par2.hxx" #include "writerhelper.hxx" #include "fields.hxx" +#include #include // #i24377# +//#define WW_NATIVE_TOC 0 + #define MAX_FIELDLEN 64000 #define WW8_TOX_LEVEL_DELIM ':' using namespace ::com::sun::star; using namespace sw::util; +using namespace sw::mark; using namespace std; // #i24377# using namespace nsSwDocInfoSubType; @@ -328,9 +332,11 @@ long SwWW8ImplReader::Read_Book(WW8PLCFManResult*) //"_Toc*" and "_Hlt*" are unnecessary const String* pName = pB->GetName(); +#if !defined(WW_NATIVE_TOC) if( !pName || pName->EqualsIgnoreCaseAscii( "_Toc", 0, 4 ) || pName->EqualsIgnoreCaseAscii( "_Hlt", 0, 4 ) ) return 0; +#endif //JP 16.11.98: ToUpper darf auf keinen Fall gemacht werden, weil der //Bookmark- name ein Hyperlink-Ziel sein kann! @@ -672,6 +678,9 @@ sal_uInt16 SwWW8ImplReader::End_Field() if (!pF || !pF->EndPosIsFieldEnd()) return nRet; + const SvtFilterOptions* pOpt = SvtFilterOptions::Get(); + sal_Bool bUseEnhFields=(pOpt && pOpt->IsUseEnhancedFields()); + ASSERT(!maFieldStack.empty(), "Empty field stack\n"); if (!maFieldStack.empty()) { @@ -683,9 +692,40 @@ sal_uInt16 SwWW8ImplReader::End_Field() nRet = maFieldStack.back().mnFieldId; switch (nRet) { + case 70: + if (bUseEnhFields && pPaM!=NULL && pPaM->GetPoint()!=NULL) { + SwPosition aEndPos = *pPaM->GetPoint(); + SwPaM aFldPam( maFieldStack.back().GetPtNode(), maFieldStack.back().GetPtCntnt(), aEndPos.nNode, aEndPos.nContent.GetIndex()); + IDocumentMarkAccess* pMarksAccess = rDoc.getIDocumentMarkAccess( ); + IFieldmark *pFieldmark = dynamic_cast( pMarksAccess->makeFieldBookmark( + aFldPam, maFieldStack.back().GetBookmarkName(), ::rtl::OUString::createFromAscii(ECMA_FORMTEXT ) ) ); + ASSERT(pFieldmark!=NULL, "hmmm; why was the bookmark not created?"); + if (pFieldmark!=NULL) { + pFieldmark->addParams(maFieldStack.back().getParams()); + } + } + break; +#if defined(WW_NATIVE_TOC) + case 8: // TOX_INDEX + case 13: // TOX_CONTENT + case 88: // HYPERLINK + case 37: // REF + if (pPaM!=NULL && pPaM->GetPoint()!=NULL) { + + SwPosition aEndPos = *pPaM->GetPoint(); + SwPaM aFldPam( maFieldStack.back().GetPtNode(), maFieldStack.back().GetPtCntnt(), aEndPos.nNode, aEndPos.nContent.GetIndex()); + SwFieldBookmark *pFieldmark=(SwFieldBookmark*)rDoc.makeFieldBookmark(aFldPam, maFieldStack.back().GetBookmarkName(), maFieldStack.back().GetBookmarkType()); + ASSERT(pFieldmark!=NULL, "hmmm; why was the bookmark not created?"); + if (pFieldmark!=NULL) { + pFieldmark->addParams(maFieldStack.back().getParams()); + } + } + break; +#else case 88: pCtrlStck->SetAttr(*pPaM->GetPoint(),RES_TXTATR_INETFMT); break; +#endif case 36: case 68: //Move outside the section associated with this type of field @@ -703,6 +743,10 @@ bool AcceptableNestedField(sal_uInt16 nFieldCode) { switch (nFieldCode) { +#if defined(WW_NATIVE_TOC) + case 8: // allow recursive field in TOC... + case 13: // allow recursive field in TOC... +#endif case 36: case 68: case 79: @@ -741,6 +785,36 @@ FieldEntry &FieldEntry::operator=(const FieldEntry &rOther) throw() return *this; } +::rtl::OUString FieldEntry::GetBookmarkName() +{ + return msBookmarkName; +} + +::rtl::OUString FieldEntry::GetBookmarkType() +{ + return msMarkType; +} + +void FieldEntry::SetBookmarkName(::rtl::OUString bookmarkName) +{ + msBookmarkName=bookmarkName; +} + +void FieldEntry::SetBookmarkType(::rtl::OUString bookmarkType) +{ + msMarkType=bookmarkType; +} + +void FieldEntry::AddParam(::rtl::OUString name, ::rtl::OUString value) +{ + maParams.push_back( IFieldmark::ParamPair_t( name, value ) ); +} + +FieldEntry::Params_t &FieldEntry::getParams() { + return maParams; +} + + // Read_Field liest ein Feld ein oder, wenn es nicht gelesen werden kann, // wird 0 zurueckgegeben, so dass das Feld vom Aufrufer textuell gelesen wird. // Returnwert: Gesamtlaenge des Feldes ( zum UEberlesen ) @@ -2070,6 +2144,17 @@ eF_ResT SwWW8ImplReader::Read_F_PgRef( WW8FieldDesc*, String& rStr ) String sName(GetMappedBookmark(sOrigName)); +#if defined(WW_NATIVE_TOC) + if (1) { + ::rtl::OUString aBookmarkName=::rtl::OUString::createFromAscii("_REF"); + maFieldStack.back().SetBookmarkName(aBookmarkName); + maFieldStack.back().SetBookmarkType(::rtl::OUString::createFromAscii(ECMA_PAGEREF)); + maFieldStack.back().AddParam(rtl::OUString(), sName); + return FLD_TEXT; + } +#endif + + SwGetRefField aFld( (SwGetRefFieldType*)rDoc.GetSysFldType( RES_GETREFFLD ), sName, REF_BOOKMARK, 0, REF_PAGE ); @@ -2768,6 +2853,16 @@ USHORT lcl_GetMaxValidWordTOCLevel(const SwForm &rForm) eF_ResT SwWW8ImplReader::Read_F_Tox( WW8FieldDesc* pF, String& rStr ) { +#if defined(WW_NATIVE_TOC) + if (1) { + ::rtl::OUString aBookmarkName=::rtl::OUString::createFromAscii("_TOC"); + maFieldStack.back().SetBookmarkName(aBookmarkName); + maFieldStack.back().SetBookmarkType(::rtl::OUString::createFromAscii(ECMA_TOC)); +// maFieldStack.back().AddParam(::rtl::OUString::createFromAscii("Description"), aFormula.sToolTip); + return FLD_TEXT; + } +#endif + if (pF->nLRes < 3) return FLD_TEXT; // ignore (#i25440#) @@ -3286,6 +3381,16 @@ eF_ResT SwWW8ImplReader::Read_F_Shape(WW8FieldDesc* /*pF*/, String& /*rStr*/) eF_ResT SwWW8ImplReader::Read_F_Hyperlink( WW8FieldDesc* /*pF*/, String& rStr ) { +#if defined(WW_NATIVE_TOC) + if (1) { + ::rtl::OUString aBookmarkName=::rtl::OUString::createFromAscii("_HYPERLINK"); + maFieldStack.back().SetBookmarkName(aBookmarkName); + maFieldStack.back().SetBookmarkType(::rtl::OUString::createFromAscii(ECMA_HYPERLINK)); +// maFieldStack.back().AddParam(::rtl::OUString::createFromAscii("Description"), aFormula.sToolTip); + return FLD_TEXT; + } +#endif + String sURL, sTarget, sMark; bool bDataImport = false; //HYPERLINk "filename" [switches] diff --git a/sw/source/ui/docvw/edtwin.cxx b/sw/source/ui/docvw/edtwin.cxx index 7d8e38443ca0..f35fb6ccf159 100644 --- a/sw/source/ui/docvw/edtwin.cxx +++ b/sw/source/ui/docvw/edtwin.cxx @@ -151,6 +151,7 @@ #include #include +#include #include "PostItMgr.hxx" #include "postit.hxx" @@ -160,6 +161,7 @@ //#define TEST_FOR_BUG91313 #endif +using namespace sw::mark; using namespace ::com::sun::star; /*-------------------------------------------------------------------- @@ -4187,7 +4189,7 @@ void SwEditWin::MouseButtonUp(const MouseEvent& rMEvt) SwContentAtPos aCntntAtPos( SwContentAtPos::SW_CLICKFIELD | SwContentAtPos::SW_INETATTR | - SwContentAtPos::SW_SMARTTAG ); + SwContentAtPos::SW_SMARTTAG | SwContentAtPos::SW_FORMCTRL); if( rSh.GetContentAtPos( aDocPt, aCntntAtPos, TRUE ) ) { @@ -4208,7 +4210,33 @@ void SwEditWin::MouseButtonUp(const MouseEvent& rMEvt) if ( bExecSmarttags && SwSmartTagMgr::Get().IsSmartTagsEnabled() ) rView.ExecSmartTagPopup( aDocPt ); } - else // if ( SwContentAtPos::SW_INETATTR == aCntntAtPos.eCntntAtPos ) + else if ( SwContentAtPos::SW_FORMCTRL == aCntntAtPos.eCntntAtPos ) + { + ASSERT( aCntntAtPos.aFnd.pFldmark != NULL, "where is my field ptr???"); + if ( aCntntAtPos.aFnd.pFldmark != NULL) + { + IFieldmark *fieldBM = const_cast< IFieldmark* > ( aCntntAtPos.aFnd.pFldmark ); + SwDocShell* pDocSh = rView.GetDocShell(); + SwDoc *pDoc=pDocSh->GetDoc(); + if (fieldBM->GetFieldname( ).equalsAscii( ECMA_FORMCHECKBOX ) ) + { + bool isChecked = fieldBM->getParam( ECMA_FORMCHECKBOX_CHECKED ).second.compareToAscii("on") == 0; + isChecked = !isChecked; // swap it... + fieldBM->addParam( + rtl::OUString::createFromAscii( ECMA_FORMCHECKBOX_CHECKED ), + rtl::OUString::createFromAscii( isChecked?"on":"off" ) ); + fieldBM->invalidate(); + rSh.InvalidateWindows( rView.GetVisArea() ); + } else if (fieldBM->GetFieldname().equalsAscii( ECMA_FORMDROPDOWN) ) { + rView.ExecFieldPopup( aDocPt, fieldBM ); + fieldBM->invalidate(); + rSh.InvalidateWindows( rView.GetVisArea() ); + } else { + // unknown type.. + } + } + } + else // if ( SwContentAtPos::SW_INETATTR == aCntntAtPos.eCntntAtPos ) { if ( bExecHyperlinks ) rSh.ClickToINetAttr( *(SwFmtINetFmt*)aCntntAtPos.aFnd.pAttr, nFilter ); diff --git a/sw/source/ui/inc/view.hxx b/sw/source/ui/inc/view.hxx index 7ddfc2775299..b11f1a6e00ef 100644 --- a/sw/source/ui/inc/view.hxx +++ b/sw/source/ui/inc/view.hxx @@ -42,6 +42,7 @@ #include #include #include +#include class SwBaseShell; class Button; @@ -94,6 +95,7 @@ struct SwConversionArgs; class Graphic; class GraphicFilter; class SwPostItMgr; +class SwFieldBookmark; namespace com{ namespace sun { namespace star { namespace view{ class XSelectionSupplier; } @@ -465,7 +467,7 @@ public: DECL_LINK( SpellError, LanguageType * ); BOOL ExecSpellPopup( const Point& rPt ); - + BOOL ExecFieldPopup( const Point& rPt, sw::mark::IFieldmark *fieldBM ); // SMARTTAGS BOOL ExecSmartTagPopup( const Point& rPt ); diff --git a/sw/source/ui/inc/wrtsh.hxx b/sw/source/ui/inc/wrtsh.hxx index 3c526c11d193..23c62fcfaab4 100644 --- a/sw/source/ui/inc/wrtsh.hxx +++ b/sw/source/ui/inc/wrtsh.hxx @@ -35,6 +35,7 @@ #include #include #include +#include class Window; class OutputDevice; @@ -322,6 +323,9 @@ typedef BOOL (SwWrtShell:: *FNSimpleMove)(); void InsertTableOf(const SwTOXBase& rTOX, const SfxItemSet* pSet = 0); BOOL UpdateTableOf(const SwTOXBase& rTOX, const SfxItemSet* pSet = 0); + // new fields + BOOL UpdateField( sw::mark::IFieldmark &fieldBM); + // Numerierung und Bullets /** Turns on numbering or bullets. diff --git a/sw/source/ui/uiview/viewling.cxx b/sw/source/ui/uiview/viewling.cxx index 588c30a9844d..20deec4a0fda 100644 --- a/sw/source/ui/uiview/viewling.cxx +++ b/sw/source/ui/uiview/viewling.cxx @@ -114,9 +114,12 @@ #include #include +#include +#include #include +using namespace sw::mark; using ::rtl::OUString; using namespace ::com::sun::star; using namespace ::com::sun::star::beans; @@ -931,3 +934,136 @@ sal_Bool SwView::ExecSmartTagPopup( const Point& rPt ) return bRet; } + + +class SwFieldPopup : public PopupMenu +{ +public: + SwFieldPopup() { + InsertItem(1, ::rtl::OUString::createFromAscii("Hello")); + } +}; + +class SwFieldListBox : public ListBox +{ +public: + SwFieldListBox(Window* pParent) : ListBox(pParent /*, WB_DROPDOWN*/) { + } + + void *GetImplWin() { + return NULL; //FIXME!!! +// return mpImplWin; + } + +protected: + virtual void LoseFocus() { +// printf("ListBox: lose focus!!\n"); + ListBox::LoseFocus(); + } + + virtual void Select() { +// printf("SELECT!!! IsTravelSelect=%i\n", IsTravelSelect()); + ListBox::Select(); + } +}; + +class SwFieldDialog : public Dialog +{ +private: + SwFieldListBox aListBox; + Edit aText; + int selection; + + DECL_LINK( MyListBoxHandler, ListBox * ); + +public: + SwFieldDialog(Window* parent, IFieldmark *fieldBM) : Dialog(parent, WB_BORDER | WB_SYSTEMWINDOW | WB_NOSHADOW ), aListBox(this), aText(this, WB_RIGHT | WB_READONLY), selection(-1) { + + assert(fieldBM!=NULL); + if (fieldBM!=NULL) { + int items=fieldBM->getNumOfParams(); + for(int i=0;igetParam(i); + if (p.first.compareToAscii(ECMA_FORMDROPDOWN_LISTENTRY)==0) { + aListBox.InsertEntry(p.second); + } + } + } + Size lbSize=aListBox.GetOptimalSize(WINDOWSIZE_PREFERRED); + lbSize.Width()+=50; + lbSize.Height()+=20; + aListBox.SetSizePixel(lbSize); + aListBox.SetSelectHdl( LINK( this, SwFieldDialog, MyListBoxHandler ) ); + aListBox.Show(); + aText.SetText(rtl::OUString::createFromAscii("Cancel")); + Size tSize=aText.GetOptimalSize(WINDOWSIZE_PREFERRED); + aText.SetSizePixel(Size(lbSize.Width(), tSize.Height())); + aText.SetPosPixel(Point(0, lbSize.Height())); + aText.Show(); + SetSizePixel(Size(lbSize.Width(), lbSize.Height()+tSize.Height())); +// SetSizePixel(Size(200, 200)); + } + + int getSelection() { + return selection; + } +protected: + /* + virtual void LoseFocus() { + printf("lose focus!!\n"); + Dialog::LoseFocus(); + printf("close:\n"); + EndDialog(8); + } + */ + + virtual long PreNotify( NotifyEvent& rNEvt ) { + if (rNEvt.GetType() == EVENT_LOSEFOCUS && aListBox.GetImplWin()==rNEvt.GetWindow()) { + EndDialog(8); + return 1; + } + if (rNEvt.GetType() == EVENT_KEYINPUT) { +// printf("PreNotify::KEYINPUT\n"); + } + return Dialog::PreNotify(rNEvt); + } +}; + +IMPL_LINK( SwFieldDialog, MyListBoxHandler, ListBox *, pBox ) +{ +// printf("### DROP DOWN SELECT... IsTravelSelect=%i\n", pBox->IsTravelSelect()); + if (pBox->IsTravelSelect()) { + return 0; + } else { + this->selection=pBox->GetSelectEntryPos(); + EndDialog(9); //@TODO have meaningfull returns... + return 1; + } +} + + +BOOL SwView::ExecFieldPopup( const Point& rPt, IFieldmark *fieldBM ) +{ + sal_Bool bRet = sal_False; + const sal_Bool bOldViewLock = pWrtShell->IsViewLocked(); + pWrtShell->LockView( sal_True ); + pWrtShell->Push(); + + bRet=sal_True; + const Point aPixPos = GetEditWin().LogicToPixel( rPt ); + + SwFieldDialog aFldDlg(pEditWin, fieldBM); + aFldDlg.SetPosPixel(pEditWin->OutputToScreenPixel(aPixPos)); + + short ret=aFldDlg.Execute(); + int selection=aFldDlg.getSelection(); + if (selection>=0) { + fieldBM->addParam(ECMA_FORMDROPDOWN_RESULT, selection); + } + + pWrtShell->Pop( sal_False ); + pWrtShell->LockView( bOldViewLock ); + + return bRet; +} + diff --git a/sw/source/ui/wrtsh/wrtsh1.cxx b/sw/source/ui/wrtsh/wrtsh1.cxx index cd6bb82739ca..b0b6c2a13974 100644 --- a/sw/source/ui/wrtsh/wrtsh1.cxx +++ b/sw/source/ui/wrtsh/wrtsh1.cxx @@ -112,6 +112,7 @@ #include #include #include +#include // -> #111827# #include @@ -126,6 +127,7 @@ #include "PostItMgr.hxx" +using namespace sw::mark; using namespace com::sun::star; #define COMMON_INI_LIST \ @@ -1754,6 +1756,12 @@ SwWrtShell::SwWrtShell( SwWrtShell& rSh, Window *_pWin, SwView &rShell ) SetSfxViewShell( (SfxViewShell *)&rShell ); SetFlyMacroLnk( LINK(this, SwWrtShell, ExecFlyMac) ); + + // place the cursor on the first field... + IFieldmark *pBM = NULL; + if ( IsFormProtected() && ( pBM = GetFieldmarkAfter( ) ) !=NULL ) { + GotoFieldmark(pBM); + } } diff --git a/sw/source/ui/wrtsh/wrtsh2.cxx b/sw/source/ui/wrtsh/wrtsh2.cxx index 9141279f141b..598d99af7397 100644 --- a/sw/source/ui/wrtsh/wrtsh2.cxx +++ b/sw/source/ui/wrtsh/wrtsh2.cxx @@ -242,6 +242,13 @@ BOOL SwWrtShell::UpdateTableOf(const SwTOXBase& rTOX, const SfxItemSet* pSet) return bResult; } +BOOL SwWrtShell::UpdateField( sw::mark::IFieldmark &fieldBM ) +{ + return SwEditShell::UpdateField(fieldBM); +} + + + // ein Klick aus das angegebene Feld. Der Cursor steht auf diesem. // Fuehre die vor definierten Aktionen aus. -- cgit From 97a9f239c5e67fe2f99c78d73d5eb4a8c09f73ec Mon Sep 17 00:00:00 2001 From: Oliver-Rainer Wittmann Date: Mon, 23 Nov 2009 10:22:50 +0100 Subject: cbosdo02: fixes of compiler warning on Linux, Mac OS X Intel and Solaris Sparc --- sw/inc/pam.hxx | 2 +- sw/source/core/crsr/bookmrk.cxx | 2 +- sw/source/core/crsr/makefile.mk | 1 + sw/source/core/crsr/pam.cxx | 2 +- sw/source/core/doc/docbm.cxx | 17 ----------------- sw/source/filter/ww8/wrtww8.cxx | 2 +- sw/source/ui/docvw/edtwin.cxx | 4 ++-- sw/source/ui/uiview/viewling.cxx | 2 +- 8 files changed, 8 insertions(+), 24 deletions(-) (limited to 'sw') diff --git a/sw/inc/pam.hxx b/sw/inc/pam.hxx index 789600f72e0e..49f8d8bfbb5f 100644 --- a/sw/inc/pam.hxx +++ b/sw/inc/pam.hxx @@ -272,7 +272,7 @@ public: DECL_FIXEDMEMPOOL_NEWDEL(SwPaM); String GetTxt() const; - void Invalidate(); + void InvalidatePaM(); }; diff --git a/sw/source/core/crsr/bookmrk.cxx b/sw/source/core/crsr/bookmrk.cxx index 5d74ec7b4324..9591b66fbab4 100644 --- a/sw/source/core/crsr/bookmrk.cxx +++ b/sw/source/core/crsr/bookmrk.cxx @@ -371,7 +371,7 @@ namespace sw { namespace mark void Fieldmark::invalidate( ) { SwPaM aPaM( this->GetMarkPos(), this->GetOtherMarkPos() ); - aPaM.Invalidate(); + aPaM.InvalidatePaM(); } const ::rtl::OUString Fieldmark::our_sNamePrefix = ::rtl::OUString::createFromAscii("__Fieldmark__"); diff --git a/sw/source/core/crsr/makefile.mk b/sw/source/core/crsr/makefile.mk index 57cb499dec66..5d450e82aced 100644 --- a/sw/source/core/crsr/makefile.mk +++ b/sw/source/core/crsr/makefile.mk @@ -51,6 +51,7 @@ CDEFS+=-Dmydebug EXCEPTIONSFILES= \ $(SLO)$/crbm.obj \ $(SLO)$/crsrsh.obj \ + $(SLO)$/bookmrk.obj \ $(SLO)$/viscrs.obj SLOFILES = \ diff --git a/sw/source/core/crsr/pam.cxx b/sw/source/core/crsr/pam.cxx index e7000bd17698..c441554524ed 100644 --- a/sw/source/core/crsr/pam.cxx +++ b/sw/source/core/crsr/pam.cxx @@ -1229,7 +1229,7 @@ BOOL SwPaM::Overlap(const SwPaM & a, const SwPaM & b) return !(*b.End() <= *a.Start() || *a.End() <= *b.End()); } -void SwPaM::Invalidate() +void SwPaM::InvalidatePaM() { const SwNode *_pNd=this->GetNode(); const SwTxtNode *_pTxtNd=(_pNd!=NULL?_pNd->GetTxtNode():NULL); diff --git a/sw/source/core/doc/docbm.cxx b/sw/source/core/doc/docbm.cxx index 0780dfd6696e..6fc877c1f66f 100644 --- a/sw/source/core/doc/docbm.cxx +++ b/sw/source/core/doc/docbm.cxx @@ -67,23 +67,6 @@ #include #include -static void lcl_docbm_FixPosition( SwPosition& rPos ) -{ - // make sure the position has 1) the proper node, and 2) a proper index - SwTxtNode* pTxtNode = rPos.nNode.GetNode().GetTxtNode(); - - if( rPos.nContent.GetIndex() > ( pTxtNode == NULL ? 0 : pTxtNode->Len() ) ) - { - DBG_ERROR( "illegal position" ); - xub_StrLen nLen = rPos.nContent.GetIndex(); - if( pTxtNode == NULL ) - nLen = 0; - else if( nLen >= pTxtNode->Len() ) - nLen = pTxtNode->Len(); - rPos.nContent.Assign( pTxtNode, nLen ); - } -} - using namespace ::std; using namespace ::boost; diff --git a/sw/source/filter/ww8/wrtww8.cxx b/sw/source/filter/ww8/wrtww8.cxx index 02ab28a1e6ec..ff57f1136152 100644 --- a/sw/source/filter/ww8/wrtww8.cxx +++ b/sw/source/filter/ww8/wrtww8.cxx @@ -3596,7 +3596,7 @@ void WW8Export::WriteFormData( const ::sw::mark::IFieldmark& rFieldmark ) } } -void WW8Export::WriteHyperlinkData( const sw::mark::IFieldmark& rFieldmark ) +void WW8Export::WriteHyperlinkData( const sw::mark::IFieldmark& /*rFieldmark*/ ) { //@TODO implement me !!! } diff --git a/sw/source/ui/docvw/edtwin.cxx b/sw/source/ui/docvw/edtwin.cxx index f35fb6ccf159..c6e56f416230 100644 --- a/sw/source/ui/docvw/edtwin.cxx +++ b/sw/source/ui/docvw/edtwin.cxx @@ -4216,8 +4216,8 @@ void SwEditWin::MouseButtonUp(const MouseEvent& rMEvt) if ( aCntntAtPos.aFnd.pFldmark != NULL) { IFieldmark *fieldBM = const_cast< IFieldmark* > ( aCntntAtPos.aFnd.pFldmark ); - SwDocShell* pDocSh = rView.GetDocShell(); - SwDoc *pDoc=pDocSh->GetDoc(); + //SwDocShell* pDocSh = rView.GetDocShell(); + //SwDoc *pDoc=pDocSh->GetDoc(); if (fieldBM->GetFieldname( ).equalsAscii( ECMA_FORMCHECKBOX ) ) { bool isChecked = fieldBM->getParam( ECMA_FORMCHECKBOX_CHECKED ).second.compareToAscii("on") == 0; diff --git a/sw/source/ui/uiview/viewling.cxx b/sw/source/ui/uiview/viewling.cxx index 20deec4a0fda..b57d00a9787e 100644 --- a/sw/source/ui/uiview/viewling.cxx +++ b/sw/source/ui/uiview/viewling.cxx @@ -1055,7 +1055,7 @@ BOOL SwView::ExecFieldPopup( const Point& rPt, IFieldmark *fieldBM ) SwFieldDialog aFldDlg(pEditWin, fieldBM); aFldDlg.SetPosPixel(pEditWin->OutputToScreenPixel(aPixPos)); - short ret=aFldDlg.Execute(); + /*short ret=*/aFldDlg.Execute(); int selection=aFldDlg.getSelection(); if (selection>=0) { fieldBM->addParam(ECMA_FORMDROPDOWN_RESULT, selection); -- cgit From e75e3b6a6f67f069d83172bfb59906471c3d1192 Mon Sep 17 00:00:00 2001 From: Oliver-Rainer Wittmann Date: Mon, 23 Nov 2009 12:20:40 +0100 Subject: cbosdo02: Use instead of , because class has been already removed (in some other cws) --- sw/source/core/crsr/pam.cxx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'sw') diff --git a/sw/source/core/crsr/pam.cxx b/sw/source/core/crsr/pam.cxx index c441554524ed..e91b8c1035d7 100644 --- a/sw/source/core/crsr/pam.cxx +++ b/sw/source/core/crsr/pam.cxx @@ -1233,11 +1233,13 @@ void SwPaM::InvalidatePaM() { const SwNode *_pNd=this->GetNode(); const SwTxtNode *_pTxtNd=(_pNd!=NULL?_pNd->GetTxtNode():NULL); - if (_pTxtNd!=NULL) { - //pretent we've added a char to force layout to recalc the portion... - SwInsChr aHint(_pTxtNd->GetIndex()); - SwModify *_pModify=(SwModify*)_pTxtNd; - _pModify->Modify( 0, &aHint); + if (_pTxtNd!=NULL) + { + // pretent that the PaM marks inserted text to recalc the portion... + SwInsTxt aHint( Start()->nContent.GetIndex(), + End()->nContent.GetIndex() - Start()->nContent.GetIndex() + 1 ); + SwModify *_pModify=(SwModify*)_pTxtNd; + _pModify->Modify( 0, &aHint); } } -- cgit From 5a529b82230a42b32bc153b89a5e73ff2c4f685f Mon Sep 17 00:00:00 2001 From: Oliver-Rainer Wittmann Date: Mon, 23 Nov 2009 12:21:42 +0100 Subject: cbosdo02: fix compiler warning for Windows --- sw/source/core/crsr/bookmrk.cxx | 2 ++ sw/source/core/text/portxt.cxx | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) (limited to 'sw') diff --git a/sw/source/core/crsr/bookmrk.cxx b/sw/source/core/crsr/bookmrk.cxx index 9591b66fbab4..60d0fec7a192 100644 --- a/sw/source/core/crsr/bookmrk.cxx +++ b/sw/source/core/crsr/bookmrk.cxx @@ -370,6 +370,8 @@ namespace sw { namespace mark void Fieldmark::invalidate( ) { + // @TODO: Does exist a better solution to trigger a format of the + // fieldmark portion? If yes, please use it. SwPaM aPaM( this->GetMarkPos(), this->GetOtherMarkPos() ); aPaM.InvalidatePaM(); } diff --git a/sw/source/core/text/portxt.cxx b/sw/source/core/text/portxt.cxx index 63a12948dc34..f4bb91d5f3b3 100644 --- a/sw/source/core/text/portxt.cxx +++ b/sw/source/core/text/portxt.cxx @@ -833,7 +833,7 @@ void SwFieldFormPortion::Paint( const SwTxtPaintInfo& rInf ) const { // a list... rtl::OUString aTxt; rInf.DrawViewOpt( *this, POR_FLD ); - rInf.DrawText( aTxt, *this, 0, aTxt.getLength(), false ); + rInf.DrawText( aTxt, *this, 0, 0/*aTxt.getLength()*/, false ); } else { -- cgit From d7f8ab1fa9a6a51d2508dfa17144aea10ef8d3ff Mon Sep 17 00:00:00 2001 From: Bjoern Michaelsen Date: Fri, 27 Nov 2009 15:48:41 +0100 Subject: cbosdo02: #i33737# keeping IMark position references const --- sw/inc/IMark.hxx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'sw') diff --git a/sw/inc/IMark.hxx b/sw/inc/IMark.hxx index 28f8c11a9936..ca2ce3bef03c 100644 --- a/sw/inc/IMark.hxx +++ b/sw/inc/IMark.hxx @@ -51,12 +51,12 @@ namespace sw { namespace mark { public: //getters - virtual SwPosition& GetMarkPos() const =0; + virtual const SwPosition& GetMarkPos() const =0; // GetOtherMarkPos() is only guaranteed to return a valid // reference if IsExpanded() returned true - virtual SwPosition& GetOtherMarkPos() const =0; - virtual SwPosition& GetMarkStart() const =0; - virtual SwPosition& GetMarkEnd() const =0; + virtual const SwPosition& GetOtherMarkPos() const =0; + virtual const SwPosition& GetMarkStart() const =0; + virtual const SwPosition& GetMarkEnd() const =0; virtual const ::rtl::OUString& GetName() const =0; virtual bool IsExpanded() const =0; virtual bool IsCoveringPosition(const SwPosition& rPos) const =0; -- cgit From 4b8dcfb1c1aa01e0770631cc0d80f662513057c1 Mon Sep 17 00:00:00 2001 From: Bjoern Michaelsen Date: Wed, 2 Dec 2009 18:23:45 +0100 Subject: bosdo02: #i33737# implementing Fieldmark parameters as XNameContainer --- sw/inc/IMark.hxx | 20 ++--- sw/inc/unoobj.hxx | 39 +++++++-- sw/source/core/crsr/bookmrk.cxx | 76 +--------------- sw/source/core/doc/docbm.cxx | 10 +-- sw/source/core/inc/bookmrk.hxx | 32 ++++--- sw/source/core/text/portxt.cxx | 45 +++++----- sw/source/core/unocore/unobkm.cxx | 177 ++++++++++++++++++++++++-------------- sw/source/filter/ww8/wrtww8.cxx | 28 ++++-- sw/source/filter/ww8/ww8par.hxx | 50 +++++------ sw/source/filter/ww8/ww8par3.cxx | 32 ++++--- sw/source/filter/ww8/ww8par5.cxx | 12 ++- sw/source/ui/docvw/edtwin.cxx | 19 ++-- sw/source/ui/uiview/viewling.cxx | 20 +++-- 13 files changed, 279 insertions(+), 281 deletions(-) (limited to 'sw') diff --git a/sw/inc/IMark.hxx b/sw/inc/IMark.hxx index ca2ce3bef03c..80ec88bca1fe 100644 --- a/sw/inc/IMark.hxx +++ b/sw/inc/IMark.hxx @@ -34,6 +34,7 @@ #include #include #include +#include #ifndef SW_DECL_SWSERVEROBJECT_DEFINED #define SW_DECL_SWSERVEROBJECT_DEFINED @@ -80,8 +81,7 @@ namespace sw { namespace mark bool EndsAfter(const SwPosition& rPos) const { return GetMarkEnd() > rPos; } - // Use for debugging purpose - virtual rtl::OUString toString( ) const = 0; + virtual rtl::OUString ToString( ) const =0; }; class IBookmark @@ -98,25 +98,17 @@ namespace sw { namespace mark : virtual public IMark { public: - typedef std::pair< ::rtl::OUString, ::rtl::OUString > ParamPair_t; - + typedef ::std::map< ::rtl::OUString, ::com::sun::star::uno::Any> parameter_map_t; //getters virtual ::rtl::OUString GetFieldname() const =0; virtual ::rtl::OUString GetFieldHelptext() const =0; - - virtual void addParam( rtl::OUString rParamName, - rtl::OUString rParamValue, - bool bReplaceExisting = true ) = 0; - virtual void addParam( const char* paramName, int value ) = 0; - virtual void addParams( std::vector& params ) = 0; - virtual int getNumOfParams() const = 0; - virtual ParamPair_t getParam( int pos ) const = 0; - virtual ParamPair_t getParam( const char *name, const char *defaultValue = NULL ) const = 0; + virtual parameter_map_t* GetParameters() =0; + virtual const parameter_map_t* GetParameters() const =0; //setters virtual void SetFieldname(const ::rtl::OUString& rFieldname) =0; virtual void SetFieldHelptext(const ::rtl::OUString& rFieldHelptext) =0; - virtual void invalidate( ) = 0; + virtual void Invalidate() = 0; }; class ICheckboxFieldmark diff --git a/sw/inc/unoobj.hxx b/sw/inc/unoobj.hxx index 06796337c6e3..3cb6e0293592 100644 --- a/sw/inc/unoobj.hxx +++ b/sw/inc/unoobj.hxx @@ -655,12 +655,41 @@ class SwXBookmark const ::sw::mark::IMark* GetBookmark() const { return m_pRegisteredBookmark; } - ::sw::mark::IMark* GetBookmark() + ::sw::mark::IMark* GetBookmark() { return m_pRegisteredBookmark; } SwDoc* GetDoc() { return m_pDoc; } }; + +class SwXFieldmarkParameters + : public ::cppu::WeakImplHelper1< ::com::sun::star::container::XNameContainer> + , private SwClient +{ + public: + SwXFieldmarkParameters(::sw::mark::IFieldmark* const pFieldmark) + { + pFieldmark->Add(this); + } + + // XNameContainer + virtual void SAL_CALL insertByName( const ::rtl::OUString& aName, const ::com::sun::star::uno::Any& aElement ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::container::ElementExistException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeByName( const ::rtl::OUString& Name ) throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + // XNameReplace + virtual void SAL_CALL replaceByName( const ::rtl::OUString& aName, const ::com::sun::star::uno::Any& aElement ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + // XNameAccess + virtual ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName ) throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames( ) throw (::com::sun::star::uno::RuntimeException); + virtual ::sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName ) throw (::com::sun::star::uno::RuntimeException); + // XElementAccess + virtual ::com::sun::star::uno::Type SAL_CALL getElementType( ) throw (::com::sun::star::uno::RuntimeException); + virtual ::sal_Bool SAL_CALL hasElements( ) throw (::com::sun::star::uno::RuntimeException); + //SwClient + virtual void Modify(SfxPoolItem *pOld, SfxPoolItem *pNew); + private: + ::sw::mark::IFieldmark::parameter_map_t* getCoreParameters() throw (::com::sun::star::uno::RuntimeException); +}; + typedef cppu::ImplInheritanceHelper1< SwXBookmark, ::com::sun::star::text::XFormField > SwXFieldmark_BASE; class SwXFieldmark : public SwXFieldmark_BASE @@ -672,12 +701,8 @@ class SwXFieldmark : public SwXFieldmark_BASE virtual void attachToRange(const ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > & xTextRange) throw( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException ); virtual ::rtl::OUString SAL_CALL getFieldType(void) throw( ::com::sun::star::uno::RuntimeException ); - virtual void SAL_CALL setFieldType( const ::rtl::OUString& description ) throw (::com::sun::star::uno::RuntimeException); - - virtual ::sal_Int16 SAL_CALL getParamCount( ) throw (::com::sun::star::uno::RuntimeException); - virtual ::rtl::OUString SAL_CALL getParamName(::sal_Int16 i) throw( ::com::sun::star::uno::RuntimeException ); - virtual ::rtl::OUString SAL_CALL getParamValue(::sal_Int16 i) throw( ::com::sun::star::uno::RuntimeException ); - virtual void SAL_CALL addParam( const ::rtl::OUString& name, const ::rtl::OUString& value, ::sal_Bool replaceExisting ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setFieldType(const ::rtl::OUString& description ) throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > SAL_CALL getParameters( ) throw (::com::sun::star::uno::RuntimeException); }; /*-----------------23.02.98 10:45------------------- diff --git a/sw/source/core/crsr/bookmrk.cxx b/sw/source/core/crsr/bookmrk.cxx index 60d0fec7a192..df7b52b6be79 100644 --- a/sw/source/core/crsr/bookmrk.cxx +++ b/sw/source/core/crsr/bookmrk.cxx @@ -131,7 +131,7 @@ namespace sw { namespace mark //lcl_FixPosition(*m_pPos2); } - rtl::OUString MarkBase::toString( ) const + rtl::OUString MarkBase::ToString( ) const { rtl::OUStringBuffer buf; buf.appendAscii( "Mark: ( Name, [ Node1, Index1 ] ): ( " ); @@ -284,7 +284,7 @@ namespace sw { namespace mark SetOtherMarkPos(GetMarkPos()); } - rtl::OUString Fieldmark::toString( ) const + rtl::OUString Fieldmark::ToString( ) const { rtl::OUStringBuffer buf; buf.appendAscii( "Fieldmark: ( Name, Type, [ Nd1, Id1 ], [ Nd2, Id2 ] ): ( " ); @@ -298,77 +298,7 @@ namespace sw { namespace mark return buf.makeStringAndClear( ); } - void Fieldmark::addParam( ::rtl::OUString paramName, - ::rtl::OUString paramValue, - bool replaceExisting ) - { - if ( replaceExisting ) - { - bool replaced = false; - const int len = m_params.size( ); - for ( int i = 0; i < len; i++ ) - { - if ( m_params[i].first.compareTo( paramName ) == 0 ) - { - m_params[i] = ParamPair_t( paramName, paramValue ); - replaced = true; - } - } - if ( !replaced ) - { - m_params.push_back( ParamPair_t( paramName, paramValue ) ); - } - } - else - { - m_params.push_back( ParamPair_t( paramName, paramValue ) ); - } - } - - void Fieldmark::addParam( const char *paramName, int value ) - { - rtl::OUString sName = rtl::OUString::createFromAscii( paramName ); - rtl::OUString sValue =::rtl::OUString::valueOf( ( sal_Int32 ) value ); - addParam( sName, sValue ); - } - - void Fieldmark::addParams( std::vector < ParamPair_t > ¶ms ) - { - for ( std::vector < ParamPair_t >::iterator i = params.begin( ); - i != params.end( ); i++ ) - { - m_params.push_back( *i ); - } - } - - int Fieldmark::getNumOfParams( ) const - { - return m_params.size( ); - } - - Fieldmark::ParamPair_t Fieldmark::getParam( int pos ) const - { - return m_params[pos]; - } - - Fieldmark::ParamPair_t Fieldmark::getParam( const char *name, - const char *defaultValue ) const - { - for ( std::vector < ParamPair_t >::iterator i = const_cast< Fieldmark* >( this )->m_params.begin( ); - i != m_params.end( ); i++ ) - { - if ( i->first.compareToAscii( name ) == 0 ) - { - return *i; - } - } - return ParamPair_t( rtl::OUString( ), - ( defaultValue ? - rtl::OUString::createFromAscii( defaultValue ) : - rtl::OUString( ) ) ); - } - - void Fieldmark::invalidate( ) + void Fieldmark::Invalidate( ) { // @TODO: Does exist a better solution to trigger a format of the // fieldmark portion? If yes, please use it. diff --git a/sw/source/core/doc/docbm.cxx b/sw/source/core/doc/docbm.cxx index 6fc877c1f66f..1d901f6e7cf0 100644 --- a/sw/source/core/doc/docbm.cxx +++ b/sw/source/core/doc/docbm.cxx @@ -312,12 +312,12 @@ namespace sw { namespace mark void MarkManager::dumpFieldmarks( ) const { - const_iterator_t pIt = m_vFieldmarks.begin( ); - for ( ; pIt != m_vFieldmarks.end( ); pIt++ ) + const_iterator_t pIt = m_vFieldmarks.begin(); + for (; pIt != m_vFieldmarks.end( ); pIt++) { - rtl::OUString str = ( *pIt )->toString( ); - fprintf( stderr, "%s\n", - rtl::OUStringToOString( str, RTL_TEXTENCODING_UTF8 ).getStr( ) ); + rtl::OUString str = (*pIt)->ToString(); + OSL_TRACE("%s\n", + ::rtl::OUStringToOString(str, RTL_TEXTENCODING_UTF8).getStr()); } } diff --git a/sw/source/core/inc/bookmrk.hxx b/sw/source/core/inc/bookmrk.hxx index 3c1e977965bf..1677b6d221e5 100644 --- a/sw/source/core/inc/bookmrk.hxx +++ b/sw/source/core/inc/bookmrk.hxx @@ -36,6 +36,7 @@ #include #include +#include struct SwPosition; // fwd Decl. wg. UI class SwDoc; @@ -85,7 +86,7 @@ namespace sw { namespace mark virtual void ClearOtherMarkPos() { m_pPos2.reset(); } - virtual rtl::OUString toString( ) const; + virtual rtl::OUString ToString( ) const; virtual void Swap() { @@ -192,36 +193,33 @@ namespace sw { namespace mark Fieldmark(const SwPaM& rPaM); // getters - ::rtl::OUString GetFieldname() const + virtual ::rtl::OUString GetFieldname() const { return m_aFieldname; } - ::rtl::OUString GetFieldHelptext() const + virtual ::rtl::OUString GetFieldHelptext() const { return m_aFieldHelptext; } - void addParam( rtl::OUString rParamName, - rtl::OUString rParamValue, - bool bReplaceExisting = true ); - void addParam( const char* paramName, int value ); - void addParams(std::vector& params); - int getNumOfParams() const; - ParamPair_t getParam(int pos) const; - ParamPair_t getParam(const char *name, const char *defaultValue) const; + virtual IFieldmark::parameter_map_t* GetParameters() + { return &m_vParams; } + + virtual const IFieldmark::parameter_map_t* GetParameters() const + { return &m_vParams; } // setters - void SetFieldname(const ::rtl::OUString& aFieldname) + virtual void SetFieldname(const ::rtl::OUString& aFieldname) { m_aFieldname = aFieldname; } - void SetFieldHelptext(const ::rtl::OUString& aFieldHelptext) + virtual void SetFieldHelptext(const ::rtl::OUString& aFieldHelptext) { m_aFieldHelptext = aFieldHelptext; } - void invalidate( ); - virtual rtl::OUString toString( ) const; + virtual void Invalidate(); + virtual rtl::OUString ToString() const; private: //int fftype; // Type: 0 = Text, 1 = Check Box, 2 = List //bool ffprot; - ::rtl::OUString m_aFieldname; ::rtl::OUString m_aFieldHelptext; + IFieldmark::parameter_map_t m_vParams; + static const ::rtl::OUString our_sNamePrefix; - std::vector m_params; }; class TextFieldmark diff --git a/sw/source/core/text/portxt.cxx b/sw/source/core/text/portxt.cxx index f4bb91d5f3b3..6662d0d70405 100644 --- a/sw/source/core/text/portxt.cxx +++ b/sw/source/core/text/portxt.cxx @@ -354,7 +354,7 @@ sal_Bool SwTxtPortion::_Format( SwTxtFormatInfo &rInf ) // C2 break iterator does not found a possible line break at all: // ==> line break - // case A: line not yet full + // case A: line not yet full if ( !bFull ) { Width( aGuess.BreakWidth() ); @@ -660,7 +660,7 @@ xub_StrLen SwTxtPortion::GetSpaceCnt( const SwTxtSizeInfo &rInf, long SwTxtPortion::CalcSpacing( long nSpaceAdd, const SwTxtSizeInfo &rInf ) const { - xub_StrLen nCnt = 0; + xub_StrLen nCnt = 0; if ( InExpGrp() ) { @@ -785,26 +785,26 @@ sal_Bool SwFieldMarkPortion::Format( SwTxtFormatInfo & ) } namespace ecma { - static int getCurrentListIndex( IFieldmark* pBM, - ::rtl::OUString *currentText = NULL ) + static sal_Int32 getCurrentListIndex( IFieldmark* pBM, + ::rtl::OUString* io_pCurrentText = NULL ) { - int currentIndex = pBM->getParam( ECMA_FORMDROPDOWN_RESULT, "0" ).second.toInt32(); - int idx = 0; - for( int i = 0; i < pBM->getNumOfParams(); i++ ) + const IFieldmark::parameter_map_t* const pParameters = pBM->GetParameters(); + sal_Int32 nCurrentIdx = 0; + const IFieldmark::parameter_map_t::const_iterator pResult = pParameters->find(::rtl::OUString::createFromAscii(ECMA_FORMDROPDOWN_RESULT)); + if(pResult != pParameters->end()) + pResult->second >>= nCurrentIdx; + if(io_pCurrentText) { - IFieldmark::ParamPair_t p = pBM->getParam( i ); - if ( p.first.compareToAscii( ECMA_FORMDROPDOWN_LISTENTRY ) == 0 ) + const IFieldmark::parameter_map_t::const_iterator pListEntries = pParameters->find(::rtl::OUString::createFromAscii(ECMA_FORMDROPDOWN_LISTENTRY)); + if(pListEntries != pParameters->end()) { - if ( idx == currentIndex ) - { - if ( currentText!=NULL ) *currentText=p.second; - break; - } - else - idx++; + uno::Sequence< ::rtl::OUString > vListEntries; + pListEntries->second >>= vListEntries; + if(nCurrentIdx < vListEntries.getLength()) + *io_pCurrentText = vListEntries[nCurrentIdx]; } } - return idx; + return nCurrentIdx; } } /* ecma */ @@ -826,18 +826,19 @@ void SwFieldFormPortion::Paint( const SwTxtPaintInfo& rInf ) const { if ( pBM->GetFieldname( ).equalsAscii( ECMA_FORMCHECKBOX ) ) { // a checkbox... - bool checked = pBM->getParam( ECMA_FORMCHECKBOX_CHECKED ).second.compareToAscii("on") == 0; - rInf.DrawCheckBox( *this , checked); + ICheckboxFieldmark* pCheckboxFm = dynamic_cast< ICheckboxFieldmark* >(pBM); + bool checked = pCheckboxFm->IsChecked(); + rInf.DrawCheckBox(*this, checked); } else if ( pBM->GetFieldname( ).equalsAscii( ECMA_FORMDROPDOWN ) ) { // a list... - rtl::OUString aTxt; - rInf.DrawViewOpt( *this, POR_FLD ); + rtl::OUString aTxt; + rInf.DrawViewOpt( *this, POR_FLD ); rInf.DrawText( aTxt, *this, 0, 0/*aTxt.getLength()*/, false ); } else { - assert(0); // unknown type... + assert(0); // unknown type... } } } diff --git a/sw/source/core/unocore/unobkm.cxx b/sw/source/core/unocore/unobkm.cxx index 77241f815773..7b2230710311 100644 --- a/sw/source/core/unocore/unobkm.cxx +++ b/sw/source/core/unocore/unobkm.cxx @@ -353,90 +353,135 @@ void SwXBookmark::removeVetoableChangeListener(const OUString& /*PropertyName*/, throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException ) { } -SwXFieldmark::SwXFieldmark(bool _isReplacementObject, ::sw::mark::IMark* pBkm, SwDoc* pDc) - : SwXFieldmark_BASE(pBkm, pDc) - , isReplacementObject(_isReplacementObject) -{ } -void SwXFieldmark::attachToRange( const uno::Reference < text::XTextRange >& xTextRange ) - throw( lang::IllegalArgumentException, uno::RuntimeException ) +void SwXFieldmarkParameters::insertByName(const OUString& aName, const Any& aElement) + throw (IllegalArgumentException, ElementExistException, WrappedTargetException, RuntimeException) { - attachToRangeEx( xTextRange, - ( isReplacementObject ? IDocumentMarkAccess::CHECKBOX_FIELDMARK : IDocumentMarkAccess::TEXT_FIELDMARK ) ); + vos::OGuard aGuard(Application::GetSolarMutex()); + IFieldmark::parameter_map_t* pParameters = getCoreParameters(); + if(pParameters->find(aName) != pParameters->end()) + throw ElementExistException(); + if(aElement.getValueType() != getElementType()) + throw IllegalArgumentException(); + (*pParameters)[aName] = aElement; } -::rtl::OUString SwXFieldmark::getFieldType( void ) - throw( ::com::sun::star::uno::RuntimeException ) +void SwXFieldmarkParameters::removeByName(const OUString& aName) + throw (NoSuchElementException, WrappedTargetException, RuntimeException) { - vos::OGuard aGuard( Application::GetSolarMutex( ) ); - IMark* pMark = const_cast< IMark* >( GetBookmark( ) ); - IFieldmark *pBkm = dynamic_cast< IFieldmark* > ( pMark ); - if ( pBkm ) - return pBkm->GetFieldname( ); - else - throw uno::RuntimeException( ); + vos::OGuard aGuard(Application::GetSolarMutex()); + if(!getCoreParameters()->erase(aName)) + throw NoSuchElementException(); } -void SwXFieldmark::setFieldType( const::rtl::OUString & fieldType ) - throw( ::com::sun::star::uno::RuntimeException ) +void SwXFieldmarkParameters::replaceByName(const OUString& aName, const Any& aElement) + throw (IllegalArgumentException, NoSuchElementException, WrappedTargetException, RuntimeException) { - vos::OGuard aGuard( Application::GetSolarMutex( ) ); - IMark* pMark = const_cast< IMark* >( GetBookmark( ) ); - IFieldmark *pBkm = dynamic_cast< IFieldmark* >( pMark ); - if ( pBkm ) - pBkm->SetFieldname( fieldType ); - else - throw uno::RuntimeException( ); + vos::OGuard aGuard(Application::GetSolarMutex()); + IFieldmark::parameter_map_t* pParameters = getCoreParameters(); + IFieldmark::parameter_map_t::iterator pEntry = pParameters->find(aName); + if(pEntry == pParameters->end()) + throw NoSuchElementException(); + pEntry->second = aElement; } -sal_Int16 SwXFieldmark::getParamCount( ) - throw( ::com::sun::star::uno::RuntimeException ) +Any SwXFieldmarkParameters::getByName(const OUString& aName) + throw (NoSuchElementException, WrappedTargetException, RuntimeException) { - vos::OGuard aGuard( Application::GetSolarMutex( ) ); - IMark* pMark = const_cast< IMark* >( GetBookmark( ) ); - IFieldmark *pBkm = dynamic_cast< IFieldmark* >( pMark ); - if ( pBkm ) - return pBkm->getNumOfParams( ); - else - throw uno::RuntimeException( ); + vos::OGuard aGuard(Application::GetSolarMutex()); + IFieldmark::parameter_map_t* pParameters = getCoreParameters(); + IFieldmark::parameter_map_t::iterator pEntry = pParameters->find(aName); + if(pEntry == pParameters->end()) + throw NoSuchElementException(); + return makeAny(pEntry->second); } -rtl::OUString SwXFieldmark::getParamName( sal_Int16 i ) - throw( ::com::sun::star::uno::RuntimeException ) +Sequence SwXFieldmarkParameters::getElementNames() + throw (RuntimeException) { - vos::OGuard aGuard( Application::GetSolarMutex( ) ); - IMark* pMark = const_cast< IMark* >( GetBookmark( ) ); - IFieldmark *pBkm = dynamic_cast< IFieldmark* >( pMark ); - if ( pBkm ) - return pBkm->getParam( i ).first; - else - throw uno::RuntimeException( ); + vos::OGuard aGuard(Application::GetSolarMutex()); + IFieldmark::parameter_map_t* pParameters = getCoreParameters(); + Sequence vResult(pParameters->size()); + OUString* pOutEntry = vResult.getArray(); + for(IFieldmark::parameter_map_t::iterator pEntry = pParameters->begin(); pEntry!=pParameters->end(); ++pEntry, ++pOutEntry) + *pOutEntry = pEntry->first; + return vResult; } -::rtl::OUString SwXFieldmark::getParamValue( ::sal_Int16 i ) - throw( ::com::sun::star::uno::RuntimeException ) +::sal_Bool SwXFieldmarkParameters::hasByName(const OUString& aName) + throw (RuntimeException) { - vos::OGuard aGuard( Application::GetSolarMutex( ) ); - IMark* pMark = const_cast< IMark* >( GetBookmark( ) ); - IFieldmark *pBkm = dynamic_cast< IFieldmark* >( pMark ); - if ( pBkm ) - return pBkm->getParam( i ).second; - else - throw uno::RuntimeException( ); + vos::OGuard aGuard(Application::GetSolarMutex()); + IFieldmark::parameter_map_t* pParameters = getCoreParameters(); + return (pParameters->find(aName) != pParameters->end()); } -void SwXFieldmark::addParam( const ::rtl::OUString & name, - const ::rtl::OUString & value, - sal_Bool replaceExisting ) - throw( ::com::sun::star::uno::RuntimeException ) +Type SwXFieldmarkParameters::getElementType() + throw (RuntimeException) { - vos::OGuard aGuard( Application::GetSolarMutex( ) ); - IMark* pMark = const_cast< IMark* >( GetBookmark( ) ); - IFieldmark *pBkm = dynamic_cast< IFieldmark* >( pMark ); - if ( pBkm ) - pBkm->addParam( const_cast< rtl::OUString& >( name ), - const_cast< rtl::OUString& >( value ), - replaceExisting ); - else - throw uno::RuntimeException( ); + return ::cppu::UnoType::get(); +} + +::sal_Bool SwXFieldmarkParameters::hasElements() + throw (RuntimeException) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + return !getCoreParameters()->empty(); +} + +void SwXFieldmarkParameters::Modify(SfxPoolItem *pOld, SfxPoolItem *pNew) +{ + ClientModify(this, pOld, pNew); +} + + +IFieldmark::parameter_map_t* SwXFieldmarkParameters::getCoreParameters() + throw (RuntimeException) +{ + const IFieldmark* pFieldmark = dynamic_cast< const IFieldmark* >(GetRegisteredIn()); + if(!pFieldmark) + throw RuntimeException(); + return const_cast< IFieldmark* >(pFieldmark)->GetParameters(); +} + +SwXFieldmark::SwXFieldmark(bool _isReplacementObject, ::sw::mark::IMark* pBkm, SwDoc* pDc) + : SwXFieldmark_BASE(pBkm, pDc) + , isReplacementObject(_isReplacementObject) +{ } + +void SwXFieldmark::attachToRange( const uno::Reference < text::XTextRange >& xTextRange ) + throw(IllegalArgumentException, RuntimeException) +{ + attachToRangeEx( xTextRange, + ( isReplacementObject ? IDocumentMarkAccess::CHECKBOX_FIELDMARK : IDocumentMarkAccess::TEXT_FIELDMARK ) ); +} + +::rtl::OUString SwXFieldmark::getFieldType(void) + throw(RuntimeException) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + const IFieldmark *pBkm = dynamic_cast(GetBookmark()); + if(!pBkm) + throw RuntimeException(); + return pBkm->GetFieldname(); +} + +void SwXFieldmark::setFieldType(const::rtl::OUString & fieldType) + throw(RuntimeException) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + IFieldmark *pBkm = dynamic_cast(GetBookmark()); + if(!pBkm) + throw RuntimeException(); + pBkm->SetFieldname(fieldType); +} + +Reference SwXFieldmark::getParameters() + throw (RuntimeException) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + IFieldmark *pBkm = dynamic_cast(GetBookmark()); + if(!pBkm) + throw uno::RuntimeException(); + return Reference(new SwXFieldmarkParameters(pBkm)); } diff --git a/sw/source/filter/ww8/wrtww8.cxx b/sw/source/filter/ww8/wrtww8.cxx index ff57f1136152..202570c51626 100644 --- a/sw/source/filter/ww8/wrtww8.cxx +++ b/sw/source/filter/ww8/wrtww8.cxx @@ -97,7 +97,7 @@ #include #include #include - +#include #include #include "writerhelper.hxx" @@ -3480,7 +3480,10 @@ void WW8Export::WriteFormData( const ::sw::mark::IFieldmark& rFieldmark ) if ( rFieldmark.GetFieldname().equalsAscii( ECMA_FORMDROPDOWN ) ) type=2; - const String ffname = rFieldmark.getParam("name").second; + ::sw::mark::IFieldmark::parameter_map_t::const_iterator pNameParameter = rFieldmark.GetParameters()->find(::rtl::OUString::createFromAscii("name")); + ::rtl::OUString ffname; + if(pNameParameter != rFieldmark.GetParameters()->end()) + pNameParameter->second >>= ffname; ULONG nDataStt = pDataStrm->Tell(); pChpPlc->AppendFkpEntry(Strm().Tell()); @@ -3506,21 +3509,30 @@ void WW8Export::WriteFormData( const ::sw::mark::IFieldmark& rFieldmark ) }; aFldHeader[4] |= (type & 0x03); - int ffres = 0; // rFieldmark.GetFFRes(); + sal_Int32 ffres = 0; // rFieldmark.GetFFRes(); if ( pAsCheckbox && pAsCheckbox->IsChecked() ) ffres = 1; else if ( type == 2 ) - ffres = rFieldmark.getParam( ECMA_FORMDROPDOWN_RESULT, "0" ).second.toInt32(); + { + ::sw::mark::IFieldmark::parameter_map_t::const_iterator pResParameter = rFieldmark.GetParameters()->find(::rtl::OUString::createFromAscii(ECMA_FORMDROPDOWN)); + if(pResParameter != rFieldmark.GetParameters()->end()) + pResParameter->second >>= ffres; + else + ffres = 0; + } aFldHeader[4] |= ( (ffres<<2) & 0x7C ); std::vector< ::rtl::OUString > aListItems; if (type==2) { aFldHeader[5] |= 0x80; // ffhaslistbox - for ( int i = 0; i < rFieldmark.getNumOfParams() ; i++ ) + const ::sw::mark::IFieldmark::parameter_map_t* const pParameters = rFieldmark.GetParameters(); + ::sw::mark::IFieldmark::parameter_map_t::const_iterator pListEntries = pParameters->find(::rtl::OUString::createFromAscii(ECMA_FORMDROPDOWN_LISTENTRY)); + if(pListEntries != pParameters->end()) { - if (rFieldmark.getParam(i).first.compareToAscii(ECMA_FORMDROPDOWN_LISTENTRY)==0) - aListItems.push_back(rFieldmark.getParam(i).second); + uno::Sequence< ::rtl::OUString > vListEntries; + pListEntries->second >>= vListEntries; + copy(::comphelper::stl_begin(vListEntries), ::comphelper::stl_end(vListEntries), back_inserter(aListItems)); } } @@ -3544,7 +3556,7 @@ void WW8Export::WriteFormData( const ::sw::mark::IFieldmark& rFieldmark ) }; int slen = sizeof( aFldData ) + sizeof( aFldHeader ) - + 2*ffname.Len() + 4 + + 2*ffname.getLength() + 4 + 2*ffdeftext.getLength() + 4 + 2*ffformat.getLength() + 4 + 2*ffhelptext.getLength() + 4 diff --git a/sw/source/filter/ww8/ww8par.hxx b/sw/source/filter/ww8/ww8par.hxx index 66f50c374811..71181a56b18a 100644 --- a/sw/source/filter/ww8/ww8par.hxx +++ b/sw/source/filter/ww8/ww8par.hxx @@ -364,39 +364,35 @@ namespace sw Position(const SwPosition &rPos); Position(const Position &rPos); operator SwPosition() const; - SwNodeIndex GetPtNode() { return maPtNode; }; - xub_StrLen GetPtCntnt() { return mnPtCntnt; }; + SwNodeIndex GetPtNode() { return maPtNode; }; + xub_StrLen GetPtCntnt() { return mnPtCntnt; }; }; } } class FieldEntry { -public: - typedef ::std::vector Params_t; - -private: - ::rtl::OUString msBookmarkName; - ::rtl::OUString msMarkType; - Params_t maParams; - -public: - sw::hack::Position maStartPos; - sal_uInt16 mnFieldId; - FieldEntry(SwPosition &rPos, sal_uInt16 nFieldId) throw(); - FieldEntry(const FieldEntry &rOther) throw(); - FieldEntry &operator=(const FieldEntry &rOther) throw(); - void Swap(FieldEntry &rOther) throw(); - - SwNodeIndex GetPtNode() { return maStartPos.GetPtNode(); }; - xub_StrLen GetPtCntnt() { return maStartPos.GetPtCntnt(); }; - - ::rtl::OUString GetBookmarkName(); - ::rtl::OUString GetBookmarkType(); - void SetBookmarkName(::rtl::OUString bookmarkName); - void SetBookmarkType(::rtl::OUString bookmarkType); - void AddParam(::rtl::OUString name, ::rtl::OUString value); - Params_t &getParams(); + private: + ::rtl::OUString msBookmarkName; + ::rtl::OUString msMarkType; + ::sw::mark::IFieldmark::parameter_map_t maParams; + + public: + sw::hack::Position maStartPos; + sal_uInt16 mnFieldId; + FieldEntry(SwPosition &rPos, sal_uInt16 nFieldId) throw(); + FieldEntry(const FieldEntry &rOther) throw(); + FieldEntry &operator=(const FieldEntry &rOther) throw(); + void Swap(FieldEntry &rOther) throw(); + + SwNodeIndex GetPtNode() { return maStartPos.GetPtNode(); }; + xub_StrLen GetPtCntnt() { return maStartPos.GetPtCntnt(); }; + + ::rtl::OUString GetBookmarkName(); + ::rtl::OUString GetBookmarkType(); + void SetBookmarkName(::rtl::OUString bookmarkName); + void SetBookmarkType(::rtl::OUString bookmarkType); + ::sw::mark::IFieldmark::parameter_map_t& getParameters(); }; diff --git a/sw/source/filter/ww8/ww8par3.cxx b/sw/source/filter/ww8/ww8par3.cxx index 886abd23486d..c2a8360477f7 100644 --- a/sw/source/filter/ww8/ww8par3.cxx +++ b/sw/source/filter/ww8/ww8par3.cxx @@ -61,6 +61,7 @@ #include #include #include +#include #include #include @@ -99,6 +100,7 @@ #include #include +#include using namespace com::sun::star; using namespace sw::util; @@ -183,8 +185,8 @@ eF_ResT SwWW8ImplReader::Read_F_FormTextBox( WW8FieldDesc* pF, String& rStr ) if (aBookmarkName.Len()>0) { maFieldStack.back().SetBookmarkName(aBookmarkName); maFieldStack.back().SetBookmarkType(::rtl::OUString::createFromAscii(ECMA_FORMTEXT)); - maFieldStack.back().AddParam(::rtl::OUString::createFromAscii("Description"), aFormula.sToolTip); - maFieldStack.back().AddParam(::rtl::OUString::createFromAscii("Name"), aFormula.sTitle); + maFieldStack.back().getParameters()[::rtl::OUString::createFromAscii("Description")] = uno::makeAny(::rtl::OUString(aFormula.sToolTip)); + maFieldStack.back().getParameters()[::rtl::OUString::createFromAscii("Name")] = uno::makeAny(::rtl::OUString(aFormula.sTitle)); } return FLD_TEXT; } @@ -235,14 +237,12 @@ eF_ResT SwWW8ImplReader::Read_F_FormCheckBox( WW8FieldDesc* pF, String& rStr ) rtl::OUString::createFromAscii( ECMA_FORMCHECKBOX ) ) ); ASSERT(pFieldmark!=NULL, "hmmm; why was the bookmark not created?"); if (pFieldmark!=NULL) { - pFieldmark->addParam( - rtl::OUString::createFromAscii(ECMA_FORMCHECKBOX_NAME), - rtl::OUString( aFormula.sTitle ) ); - pFieldmark->addParam( - rtl::OUString::createFromAscii(ECMA_FORMCHECKBOX_HELPTEXT), aFormula.sToolTip); - pFieldmark->addParam( - rtl::OUString::createFromAscii(ECMA_FORMCHECKBOX_CHECKED), - ::rtl::OUString::createFromAscii(aFormula.nChecked!=0?"on":"off")); + IFieldmark::parameter_map_t* const pParameters = pFieldmark->GetParameters(); + ICheckboxFieldmark* pCheckboxFm = dynamic_cast(pFieldmark); + (*pParameters)[::rtl::OUString::createFromAscii(ECMA_FORMCHECKBOX_NAME)] = uno::makeAny(::rtl::OUString(aFormula.sTitle)); + (*pParameters)[::rtl::OUString::createFromAscii(ECMA_FORMCHECKBOX_HELPTEXT)] = uno::makeAny(::rtl::OUString(aFormula.sToolTip)); + if(pCheckboxFm) + pCheckboxFm->SetChecked(aFormula.nChecked); // set field data here... } } @@ -313,13 +313,11 @@ eF_ResT SwWW8ImplReader::Read_F_FormListBox( WW8FieldDesc* pF, String& rStr) ASSERT(pFieldmark!=NULL, "hmmm; why was the bookmark not created?"); if ( pFieldmark != NULL ) { - rtl::OUString sListEntry=rtl::OUString::createFromAscii( ECMA_FORMDROPDOWN_LISTENTRY ); - std::vector::iterator it = aFormula.maListEntries.begin(); - for( ; it != aFormula.maListEntries.end(); it++ ) - pFieldmark->addParam(sListEntry, *it, false); - - int nIndex = aFormula.fDropdownIndex < aFormula.maListEntries.size() ? aFormula.fDropdownIndex : 0; - pFieldmark->addParam(ECMA_FORMDROPDOWN_RESULT, nIndex); + uno::Sequence< ::rtl::OUString > vListEntries(aFormula.maListEntries.size()); + copy(aFormula.maListEntries.begin(), aFormula.maListEntries.end(), ::comphelper::stl_begin(vListEntries)); + (*pFieldmark->GetParameters())[::rtl::OUString::createFromAscii(ECMA_FORMDROPDOWN_LISTENTRY)] = uno::makeAny(vListEntries); + sal_Int32 nIndex = aFormula.fDropdownIndex < aFormula.maListEntries.size() ? aFormula.fDropdownIndex : 0; + (*pFieldmark->GetParameters())[::rtl::OUString::createFromAscii(ECMA_FORMDROPDOWN_RESULT)] = uno::makeAny(nIndex); // set field data here... } } diff --git a/sw/source/filter/ww8/ww8par5.cxx b/sw/source/filter/ww8/ww8par5.cxx index c5f877cb48b9..0dcf535631b0 100644 --- a/sw/source/filter/ww8/ww8par5.cxx +++ b/sw/source/filter/ww8/ww8par5.cxx @@ -701,7 +701,8 @@ sal_uInt16 SwWW8ImplReader::End_Field() aFldPam, maFieldStack.back().GetBookmarkName(), ::rtl::OUString::createFromAscii(ECMA_FORMTEXT ) ) ); ASSERT(pFieldmark!=NULL, "hmmm; why was the bookmark not created?"); if (pFieldmark!=NULL) { - pFieldmark->addParams(maFieldStack.back().getParams()); + const IFieldmark::parameter_map_t& pParametersToAdd = maFieldStack.back().getParameters(); + pFieldmark->GetParameters()->insert(pParametersToAdd.begin(), pParametersToAdd.end()); } } break; @@ -717,7 +718,8 @@ sal_uInt16 SwWW8ImplReader::End_Field() SwFieldBookmark *pFieldmark=(SwFieldBookmark*)rDoc.makeFieldBookmark(aFldPam, maFieldStack.back().GetBookmarkName(), maFieldStack.back().GetBookmarkType()); ASSERT(pFieldmark!=NULL, "hmmm; why was the bookmark not created?"); if (pFieldmark!=NULL) { - pFieldmark->addParams(maFieldStack.back().getParams()); + const IFieldmark::parameter_map_t& pParametersToAdd = maFieldStack.back().getParameters(); + pFieldmark->GetParameters()->insert(pParameters.begin(), pParameters.end()); } } break; @@ -805,12 +807,8 @@ void FieldEntry::SetBookmarkType(::rtl::OUString bookmarkType) msMarkType=bookmarkType; } -void FieldEntry::AddParam(::rtl::OUString name, ::rtl::OUString value) -{ - maParams.push_back( IFieldmark::ParamPair_t( name, value ) ); -} -FieldEntry::Params_t &FieldEntry::getParams() { +::sw::mark::IFieldmark::parameter_map_t& FieldEntry::getParameters() { return maParams; } diff --git a/sw/source/ui/docvw/edtwin.cxx b/sw/source/ui/docvw/edtwin.cxx index c6e56f416230..9da3ab8e5e7a 100644 --- a/sw/source/ui/docvw/edtwin.cxx +++ b/sw/source/ui/docvw/edtwin.cxx @@ -3620,10 +3620,10 @@ void SwEditWin::MouseMove(const MouseEvent& _rMEvt) pAnchorMarker->ChgHdl( pHdl ); if( aNew.X() || aNew.Y() ) { - pAnchorMarker->SetPos( aNew ); - pAnchorMarker->SetLastPos( aDocPt ); - //OLMpSdrView->RefreshAllIAOManagers(); - } + pAnchorMarker->SetPos( aNew ); + pAnchorMarker->SetLastPos( aDocPt ); + //OLMpSdrView->RefreshAllIAOManagers(); + } } else { @@ -4220,16 +4220,13 @@ void SwEditWin::MouseButtonUp(const MouseEvent& rMEvt) //SwDoc *pDoc=pDocSh->GetDoc(); if (fieldBM->GetFieldname( ).equalsAscii( ECMA_FORMCHECKBOX ) ) { - bool isChecked = fieldBM->getParam( ECMA_FORMCHECKBOX_CHECKED ).second.compareToAscii("on") == 0; - isChecked = !isChecked; // swap it... - fieldBM->addParam( - rtl::OUString::createFromAscii( ECMA_FORMCHECKBOX_CHECKED ), - rtl::OUString::createFromAscii( isChecked?"on":"off" ) ); - fieldBM->invalidate(); + ICheckboxFieldmark* pCheckboxFm = dynamic_cast(fieldBM); + pCheckboxFm->SetChecked(!pCheckboxFm->IsChecked()); + pCheckboxFm->Invalidate(); rSh.InvalidateWindows( rView.GetVisArea() ); } else if (fieldBM->GetFieldname().equalsAscii( ECMA_FORMDROPDOWN) ) { rView.ExecFieldPopup( aDocPt, fieldBM ); - fieldBM->invalidate(); + fieldBM->Invalidate(); rSh.InvalidateWindows( rView.GetVisArea() ); } else { // unknown type.. diff --git a/sw/source/ui/uiview/viewling.cxx b/sw/source/ui/uiview/viewling.cxx index b57d00a9787e..3046910e413c 100644 --- a/sw/source/ui/uiview/viewling.cxx +++ b/sw/source/ui/uiview/viewling.cxx @@ -981,12 +981,18 @@ public: assert(fieldBM!=NULL); if (fieldBM!=NULL) { - int items=fieldBM->getNumOfParams(); - for(int i=0;igetParam(i); - if (p.first.compareToAscii(ECMA_FORMDROPDOWN_LISTENTRY)==0) { - aListBox.InsertEntry(p.second); - } + const IFieldmark::parameter_map_t* const pParameters = fieldBM->GetParameters(); + IFieldmark::parameter_map_t::const_iterator pListEntries = pParameters->find(::rtl::OUString::createFromAscii(ECMA_FORMDROPDOWN_LISTENTRY)); + if(pListEntries != pParameters->end()) + { + Sequence< ::rtl::OUString> vListEntries; + pListEntries->second >>= vListEntries; + for( ::rtl::OUString* pCurrent = vListEntries.getArray(); + pCurrent != vListEntries.getArray() + vListEntries.getLength(); + ++pCurrent) + { + aListBox.InsertEntry(*pCurrent); + } } } Size lbSize=aListBox.GetOptimalSize(WINDOWSIZE_PREFERRED); @@ -1058,7 +1064,7 @@ BOOL SwView::ExecFieldPopup( const Point& rPt, IFieldmark *fieldBM ) /*short ret=*/aFldDlg.Execute(); int selection=aFldDlg.getSelection(); if (selection>=0) { - fieldBM->addParam(ECMA_FORMDROPDOWN_RESULT, selection); + (*fieldBM->GetParameters())[::rtl::OUString::createFromAscii(ECMA_FORMDROPDOWN_RESULT)] = makeAny(selection); } pWrtShell->Pop( sal_False ); -- cgit From 51c064bac31111cf33e17486120980fa41f3f85e Mon Sep 17 00:00:00 2001 From: Bjoern Michaelsen Date: Tue, 8 Dec 2009 17:15:57 +0100 Subject: cbosdo02: #i33737# removing unused defines, moving remaining ones into vnd.oasis.opendocument namespace ---------------- cbosdo02: #i33737# renaming defines from ECMA to ODF ---------------- cbosdo02: #i33737# removing ecma namespace ---------------- cbosdo02: #i33737# removing ecma var ---------------- cbosdo02: #i33737# ecma -> odf ---------------- cbosdo02: #i33737# ecma -> odf HG: Enter commit message. Lines beginning with 'HG:' are removed. HG: Remove all lines to abort the collapse operation. --- sw/source/core/doc/docbm.cxx | 2 +- sw/source/core/edit/edtox.cxx | 2 +- sw/source/core/text/portxt.cxx | 20 +++++++++---------- sw/source/filter/ww8/wrtw8nds.cxx | 42 +++++++++++++++++++-------------------- sw/source/filter/ww8/wrtww8.cxx | 16 +++++++-------- sw/source/filter/ww8/ww8par.hxx | 2 +- sw/source/filter/ww8/ww8par3.cxx | 16 +++++++-------- sw/source/filter/ww8/ww8par5.cxx | 8 ++++---- sw/source/ui/docvw/edtwin.cxx | 6 +++--- sw/source/ui/uiview/viewling.cxx | 6 +++--- 10 files changed, 60 insertions(+), 60 deletions(-) (limited to 'sw') diff --git a/sw/source/core/doc/docbm.cxx b/sw/source/core/doc/docbm.cxx index 1d901f6e7cf0..35e8b0427731 100644 --- a/sw/source/core/doc/docbm.cxx +++ b/sw/source/core/doc/docbm.cxx @@ -41,7 +41,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sw/source/core/edit/edtox.cxx b/sw/source/core/edit/edtox.cxx index 781338f33469..bb6e53fc2917 100644 --- a/sw/source/core/edit/edtox.cxx +++ b/sw/source/core/edit/edtox.cxx @@ -61,7 +61,7 @@ #include #endif #include -#include +#include using namespace ::com::sun::star; diff --git a/sw/source/core/text/portxt.cxx b/sw/source/core/text/portxt.cxx index 6662d0d70405..424827c5cb0f 100644 --- a/sw/source/core/text/portxt.cxx +++ b/sw/source/core/text/portxt.cxx @@ -55,7 +55,7 @@ #include #include #include -#include +#include #if OSL_DEBUG_LEVEL > 1 const sal_Char *GetLangName( const MSHORT nLang ); @@ -784,18 +784,18 @@ sal_Bool SwFieldMarkPortion::Format( SwTxtFormatInfo & ) return ret; } -namespace ecma { +namespace { static sal_Int32 getCurrentListIndex( IFieldmark* pBM, ::rtl::OUString* io_pCurrentText = NULL ) { const IFieldmark::parameter_map_t* const pParameters = pBM->GetParameters(); sal_Int32 nCurrentIdx = 0; - const IFieldmark::parameter_map_t::const_iterator pResult = pParameters->find(::rtl::OUString::createFromAscii(ECMA_FORMDROPDOWN_RESULT)); + const IFieldmark::parameter_map_t::const_iterator pResult = pParameters->find(::rtl::OUString::createFromAscii(ODF_FORMDROPDOWN_RESULT)); if(pResult != pParameters->end()) pResult->second >>= nCurrentIdx; if(io_pCurrentText) { - const IFieldmark::parameter_map_t::const_iterator pListEntries = pParameters->find(::rtl::OUString::createFromAscii(ECMA_FORMDROPDOWN_LISTENTRY)); + const IFieldmark::parameter_map_t::const_iterator pListEntries = pParameters->find(::rtl::OUString::createFromAscii(ODF_FORMDROPDOWN_LISTENTRY)); if(pListEntries != pParameters->end()) { uno::Sequence< ::rtl::OUString > vListEntries; @@ -806,7 +806,7 @@ namespace ecma { } return nCurrentIdx; } -} /* ecma */ +} //FIXME Fieldbk void SwFieldFormPortion::Paint( const SwTxtPaintInfo& rInf ) const @@ -824,13 +824,13 @@ void SwFieldFormPortion::Paint( const SwTxtPaintInfo& rInf ) const if ( pBM != NULL ) { - if ( pBM->GetFieldname( ).equalsAscii( ECMA_FORMCHECKBOX ) ) + if ( pBM->GetFieldname( ).equalsAscii( ODF_FORMCHECKBOX ) ) { // a checkbox... ICheckboxFieldmark* pCheckboxFm = dynamic_cast< ICheckboxFieldmark* >(pBM); bool checked = pCheckboxFm->IsChecked(); rInf.DrawCheckBox(*this, checked); } - else if ( pBM->GetFieldname( ).equalsAscii( ECMA_FORMDROPDOWN ) ) + else if ( pBM->GetFieldname( ).equalsAscii( ODF_FORMDROPDOWN ) ) { // a list... rtl::OUString aTxt; rInf.DrawViewOpt( *this, POR_FLD ); @@ -854,16 +854,16 @@ sal_Bool SwFieldFormPortion::Format( SwTxtFormatInfo & rInf ) ASSERT( pBM != NULL, "Where is my form field bookmark???" ); if ( pBM != NULL ) { - if ( pBM->GetFieldname( ).equalsAscii( ECMA_FORMCHECKBOX ) ) + if ( pBM->GetFieldname( ).equalsAscii( ODF_FORMCHECKBOX ) ) { Width( rInf.GetTxtHeight( ) ); Height( rInf.GetTxtHeight( ) ); SetAscent( rInf.GetAscent( ) ); } - else if ( pBM->GetFieldname( ).equalsAscii( ECMA_FORMDROPDOWN ) ) + else if ( pBM->GetFieldname( ).equalsAscii( ODF_FORMDROPDOWN ) ) { ::rtl::OUString aTxt; - ecma::getCurrentListIndex( pBM, &aTxt ); + getCurrentListIndex( pBM, &aTxt ); SwPosSize aPosSize = rInf.GetTxtSize( aTxt ); Width( aPosSize.Width( ) ); Height( aPosSize.Height( ) ); diff --git a/sw/source/filter/ww8/wrtw8nds.cxx b/sw/source/filter/ww8/wrtw8nds.cxx index 2c7eaa0f64ef..051fdcba08b5 100644 --- a/sw/source/filter/ww8/wrtw8nds.cxx +++ b/sw/source/filter/ww8/wrtw8nds.cxx @@ -116,17 +116,17 @@ using namespace nsFieldFlags; static String lcl_getFieldCode( const IFieldmark* pFieldmark ) { ASSERT(pFieldmark!=NULL, "where is my fieldmark???"); - if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_FORMTEXT ) ) { + if ( pFieldmark->GetFieldname( ).equalsAscii( ODF_FORMTEXT ) ) { return String::CreateFromAscii(" FORMTEXT "); - } else if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_FORMDROPDOWN ) ) { + } else if ( pFieldmark->GetFieldname( ).equalsAscii( ODF_FORMDROPDOWN ) ) { return String::CreateFromAscii(" FORMDROPDOWN "); - } else if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_FORMCHECKBOX ) ) { + } else if ( pFieldmark->GetFieldname( ).equalsAscii( ODF_FORMCHECKBOX ) ) { return String::CreateFromAscii(" FORMCHECKBOX "); - } else if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_TOC ) ) { + } else if ( pFieldmark->GetFieldname( ).equalsAscii( ODF_TOC ) ) { return String::CreateFromAscii(" TOC "); - } else if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_HYPERLINK ) ) { + } else if ( pFieldmark->GetFieldname( ).equalsAscii( ODF_HYPERLINK ) ) { return String::CreateFromAscii(" HYPERLINK "); - } else if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_PAGEREF ) ) { + } else if ( pFieldmark->GetFieldname( ).equalsAscii( ODF_PAGEREF ) ) { return String::CreateFromAscii(" PAGEREF "); } else { return pFieldmark->GetFieldname(); @@ -135,17 +135,17 @@ static String lcl_getFieldCode( const IFieldmark* pFieldmark ) { ww::eField lcl_getFieldId( const IFieldmark* pFieldmark ) { ASSERT(pFieldmark!=NULL, "where is my fieldmark???"); - if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_FORMTEXT ) ) { + if ( pFieldmark->GetFieldname( ).equalsAscii( ODF_FORMTEXT ) ) { return ww::eFORMTEXT; - } else if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_FORMDROPDOWN ) ) { + } else if ( pFieldmark->GetFieldname( ).equalsAscii( ODF_FORMDROPDOWN ) ) { return ww::eFORMDROPDOWN; - } else if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_FORMCHECKBOX ) ) { + } else if ( pFieldmark->GetFieldname( ).equalsAscii( ODF_FORMCHECKBOX ) ) { return ww::eFORMCHECKBOX; - } else if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_TOC ) ) { + } else if ( pFieldmark->GetFieldname( ).equalsAscii( ODF_TOC ) ) { return ww::eTOC; - } else if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_HYPERLINK ) ) { + } else if ( pFieldmark->GetFieldname( ).equalsAscii( ODF_HYPERLINK ) ) { return ww::eHYPERLINK; - } else if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_PAGEREF ) ) { + } else if ( pFieldmark->GetFieldname( ).equalsAscii( ODF_PAGEREF ) ) { return ww::ePAGEREF; } else { return ww::eUNKNOWN; @@ -1753,12 +1753,12 @@ void MSWordExportBase::OutputTextNode( const SwTxtNode& rNode ) ::sw::mark::IFieldmark const * const pFieldmark = pMarkAccess->getFieldmarkFor( aPosition ); OSL_ENSURE( pFieldmark, "Looks like this doc is broken...; where is the Fieldmark for the FIELDSTART??" ); - if ( pFieldmark->GetFieldname().equalsAscii( ECMA_FORMTEXT ) ) + if ( pFieldmark->GetFieldname().equalsAscii( ODF_FORMTEXT ) ) AppendBookmark( pFieldmark->GetName(), false ); OutputField( NULL, lcl_getFieldId( pFieldmark ), lcl_getFieldCode( pFieldmark ), WRITEFIELD_START | WRITEFIELD_CMD_START ); - if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_FORMTEXT ) ) + if ( pFieldmark->GetFieldname( ).equalsAscii( ODF_FORMTEXT ) ) WriteFormData( *pFieldmark ); - else if ( pFieldmark->GetFieldname( ).equalsAscii( ECMA_HYPERLINK ) ) + else if ( pFieldmark->GetFieldname( ).equalsAscii( ODF_HYPERLINK ) ) WriteHyperlinkData( *pFieldmark ); OutputField( NULL, lcl_getFieldId( pFieldmark ), String(), WRITEFIELD_CMD_END ); } @@ -1769,7 +1769,7 @@ void MSWordExportBase::OutputTextNode( const SwTxtNode& rNode ) OSL_ENSURE( pFieldmark, "Looks like this doc is broken...; where is the Fieldmark for the FIELDSTART??" ); OutputField( NULL, lcl_getFieldId( pFieldmark ), String(), WRITEFIELD_CLOSE ); - if ( pFieldmark->GetFieldname().equalsAscii( ECMA_FORMTEXT ) ) + if ( pFieldmark->GetFieldname().equalsAscii( ODF_FORMTEXT ) ) AppendBookmark( pFieldmark->GetName(), false ); } else if ( ch == CH_TXT_ATR_FORMELEMENT ) @@ -1778,18 +1778,18 @@ void MSWordExportBase::OutputTextNode( const SwTxtNode& rNode ) ::sw::mark::IFieldmark const * const pFieldmark = pMarkAccess->getFieldmarkFor( aPosition ); OSL_ENSURE( pFieldmark, "Looks like this doc is broken...; where is the Fieldmark for the FIELDSTART??" ); - bool isEcma = pFieldmark->GetFieldname( ).equalsAscii( ECMA_FORMDROPDOWN ) || - pFieldmark->GetFieldname( ).equalsAscii( ECMA_FORMCHECKBOX ); + bool isDropdownOrCheckbox = pFieldmark->GetFieldname( ).equalsAscii( ODF_FORMDROPDOWN ) || + pFieldmark->GetFieldname( ).equalsAscii( ODF_FORMCHECKBOX ); - if ( isEcma ) + if ( isDropdownOrCheckbox ) AppendBookmark( pFieldmark->GetName(), 0 ); OutputField( NULL, lcl_getFieldId( pFieldmark ), lcl_getFieldCode( pFieldmark ), WRITEFIELD_START | WRITEFIELD_CMD_START ); - if ( isEcma ) + if ( isDropdownOrCheckbox ) WriteFormData( *pFieldmark ); OutputField( NULL, lcl_getFieldId( pFieldmark ), String(), WRITEFIELD_CLOSE ); - if ( isEcma ) + if ( isDropdownOrCheckbox ) AppendBookmark( pFieldmark->GetName(), false ); } nLen -= static_cast< USHORT >( ofs ); diff --git a/sw/source/filter/ww8/wrtww8.cxx b/sw/source/filter/ww8/wrtww8.cxx index 202570c51626..04601b4bed64 100644 --- a/sw/source/filter/ww8/wrtww8.cxx +++ b/sw/source/filter/ww8/wrtww8.cxx @@ -105,7 +105,7 @@ #include "ww8attributeoutput.hxx" #include -#include +#include #include #include @@ -3468,16 +3468,16 @@ void WW8Export::WriteFormData( const ::sw::mark::IFieldmark& rFieldmark ) const ::sw::mark::ICheckboxFieldmark* pAsCheckbox = dynamic_cast< const ::sw::mark::ICheckboxFieldmark* >( pFieldmark ); - ASSERT(rFieldmark.GetFieldname().equalsAscii( ECMA_FORMTEXT ) || rFieldmark.GetFieldname().equalsAscii( ECMA_FORMDROPDOWN ) || rFieldmark.GetFieldname().equalsAscii( ECMA_FORMCHECKBOX ), "Unknown field type!!!"); - if ( ! ( rFieldmark.GetFieldname().equalsAscii( ECMA_FORMTEXT ) || - rFieldmark.GetFieldname().equalsAscii( ECMA_FORMDROPDOWN ) || - rFieldmark.GetFieldname().equalsAscii( ECMA_FORMCHECKBOX ) ) ) + ASSERT(rFieldmark.GetFieldname().equalsAscii( ODF_FORMTEXT ) || rFieldmark.GetFieldname().equalsAscii( ODF_FORMDROPDOWN ) || rFieldmark.GetFieldname().equalsAscii( ODF_FORMCHECKBOX ), "Unknown field type!!!"); + if ( ! ( rFieldmark.GetFieldname().equalsAscii( ODF_FORMTEXT ) || + rFieldmark.GetFieldname().equalsAscii( ODF_FORMDROPDOWN ) || + rFieldmark.GetFieldname().equalsAscii( ODF_FORMCHECKBOX ) ) ) return; int type = 0; // TextFieldmark if ( pAsCheckbox ) type = 1; - if ( rFieldmark.GetFieldname().equalsAscii( ECMA_FORMDROPDOWN ) ) + if ( rFieldmark.GetFieldname().equalsAscii( ODF_FORMDROPDOWN ) ) type=2; ::sw::mark::IFieldmark::parameter_map_t::const_iterator pNameParameter = rFieldmark.GetParameters()->find(::rtl::OUString::createFromAscii("name")); @@ -3514,7 +3514,7 @@ void WW8Export::WriteFormData( const ::sw::mark::IFieldmark& rFieldmark ) ffres = 1; else if ( type == 2 ) { - ::sw::mark::IFieldmark::parameter_map_t::const_iterator pResParameter = rFieldmark.GetParameters()->find(::rtl::OUString::createFromAscii(ECMA_FORMDROPDOWN)); + ::sw::mark::IFieldmark::parameter_map_t::const_iterator pResParameter = rFieldmark.GetParameters()->find(::rtl::OUString::createFromAscii(ODF_FORMDROPDOWN)); if(pResParameter != rFieldmark.GetParameters()->end()) pResParameter->second >>= ffres; else @@ -3527,7 +3527,7 @@ void WW8Export::WriteFormData( const ::sw::mark::IFieldmark& rFieldmark ) { aFldHeader[5] |= 0x80; // ffhaslistbox const ::sw::mark::IFieldmark::parameter_map_t* const pParameters = rFieldmark.GetParameters(); - ::sw::mark::IFieldmark::parameter_map_t::const_iterator pListEntries = pParameters->find(::rtl::OUString::createFromAscii(ECMA_FORMDROPDOWN_LISTENTRY)); + ::sw::mark::IFieldmark::parameter_map_t::const_iterator pListEntries = pParameters->find(::rtl::OUString::createFromAscii(ODF_FORMDROPDOWN_LISTENTRY)); if(pListEntries != pParameters->end()) { uno::Sequence< ::rtl::OUString > vListEntries; diff --git a/sw/source/filter/ww8/ww8par.hxx b/sw/source/filter/ww8/ww8par.hxx index 71181a56b18a..c2dea590b806 100644 --- a/sw/source/filter/ww8/ww8par.hxx +++ b/sw/source/filter/ww8/ww8par.hxx @@ -60,7 +60,7 @@ #include "ww8glsy.hxx" #include "wrtww8.hxx" #include "../inc/msfilter.hxx" -#include +#include #include class SwDoc; diff --git a/sw/source/filter/ww8/ww8par3.cxx b/sw/source/filter/ww8/ww8par3.cxx index c2a8360477f7..743061ec51b0 100644 --- a/sw/source/filter/ww8/ww8par3.cxx +++ b/sw/source/filter/ww8/ww8par3.cxx @@ -97,7 +97,7 @@ #include #include -#include +#include #include #include @@ -184,7 +184,7 @@ eF_ResT SwWW8ImplReader::Read_F_FormTextBox( WW8FieldDesc* pF, String& rStr ) if (aBookmarkName.Len()>0) { maFieldStack.back().SetBookmarkName(aBookmarkName); - maFieldStack.back().SetBookmarkType(::rtl::OUString::createFromAscii(ECMA_FORMTEXT)); + maFieldStack.back().SetBookmarkType(::rtl::OUString::createFromAscii(ODF_FORMTEXT)); maFieldStack.back().getParameters()[::rtl::OUString::createFromAscii("Description")] = uno::makeAny(::rtl::OUString(aFormula.sToolTip)); maFieldStack.back().getParameters()[::rtl::OUString::createFromAscii("Name")] = uno::makeAny(::rtl::OUString(aFormula.sTitle)); } @@ -234,13 +234,13 @@ eF_ResT SwWW8ImplReader::Read_F_FormCheckBox( WW8FieldDesc* pF, String& rStr ) IDocumentMarkAccess* pMarksAccess = rDoc.getIDocumentMarkAccess( ); IFieldmark* pFieldmark = dynamic_cast( pMarksAccess->makeNoTextFieldBookmark( *pPaM, aBookmarkName, - rtl::OUString::createFromAscii( ECMA_FORMCHECKBOX ) ) ); + rtl::OUString::createFromAscii( ODF_FORMCHECKBOX ) ) ); ASSERT(pFieldmark!=NULL, "hmmm; why was the bookmark not created?"); if (pFieldmark!=NULL) { IFieldmark::parameter_map_t* const pParameters = pFieldmark->GetParameters(); ICheckboxFieldmark* pCheckboxFm = dynamic_cast(pFieldmark); - (*pParameters)[::rtl::OUString::createFromAscii(ECMA_FORMCHECKBOX_NAME)] = uno::makeAny(::rtl::OUString(aFormula.sTitle)); - (*pParameters)[::rtl::OUString::createFromAscii(ECMA_FORMCHECKBOX_HELPTEXT)] = uno::makeAny(::rtl::OUString(aFormula.sToolTip)); + (*pParameters)[::rtl::OUString::createFromAscii(ODF_FORMCHECKBOX_NAME)] = uno::makeAny(::rtl::OUString(aFormula.sTitle)); + (*pParameters)[::rtl::OUString::createFromAscii(ODF_FORMCHECKBOX_HELPTEXT)] = uno::makeAny(::rtl::OUString(aFormula.sToolTip)); if(pCheckboxFm) pCheckboxFm->SetChecked(aFormula.nChecked); // set field data here... @@ -309,15 +309,15 @@ eF_ResT SwWW8ImplReader::Read_F_FormListBox( WW8FieldDesc* pF, String& rStr) IDocumentMarkAccess* pMarksAccess = rDoc.getIDocumentMarkAccess( ); IFieldmark *pFieldmark = dynamic_cast( pMarksAccess->makeNoTextFieldBookmark( *pPaM, aBookmarkName, - ::rtl::OUString::createFromAscii( ECMA_FORMDROPDOWN ) ) ); + ::rtl::OUString::createFromAscii( ODF_FORMDROPDOWN ) ) ); ASSERT(pFieldmark!=NULL, "hmmm; why was the bookmark not created?"); if ( pFieldmark != NULL ) { uno::Sequence< ::rtl::OUString > vListEntries(aFormula.maListEntries.size()); copy(aFormula.maListEntries.begin(), aFormula.maListEntries.end(), ::comphelper::stl_begin(vListEntries)); - (*pFieldmark->GetParameters())[::rtl::OUString::createFromAscii(ECMA_FORMDROPDOWN_LISTENTRY)] = uno::makeAny(vListEntries); + (*pFieldmark->GetParameters())[::rtl::OUString::createFromAscii(ODF_FORMDROPDOWN_LISTENTRY)] = uno::makeAny(vListEntries); sal_Int32 nIndex = aFormula.fDropdownIndex < aFormula.maListEntries.size() ? aFormula.fDropdownIndex : 0; - (*pFieldmark->GetParameters())[::rtl::OUString::createFromAscii(ECMA_FORMDROPDOWN_RESULT)] = uno::makeAny(nIndex); + (*pFieldmark->GetParameters())[::rtl::OUString::createFromAscii(ODF_FORMDROPDOWN_RESULT)] = uno::makeAny(nIndex); // set field data here... } } diff --git a/sw/source/filter/ww8/ww8par5.cxx b/sw/source/filter/ww8/ww8par5.cxx index 0dcf535631b0..6c25f6d1fb34 100644 --- a/sw/source/filter/ww8/ww8par5.cxx +++ b/sw/source/filter/ww8/ww8par5.cxx @@ -698,7 +698,7 @@ sal_uInt16 SwWW8ImplReader::End_Field() SwPaM aFldPam( maFieldStack.back().GetPtNode(), maFieldStack.back().GetPtCntnt(), aEndPos.nNode, aEndPos.nContent.GetIndex()); IDocumentMarkAccess* pMarksAccess = rDoc.getIDocumentMarkAccess( ); IFieldmark *pFieldmark = dynamic_cast( pMarksAccess->makeFieldBookmark( - aFldPam, maFieldStack.back().GetBookmarkName(), ::rtl::OUString::createFromAscii(ECMA_FORMTEXT ) ) ); + aFldPam, maFieldStack.back().GetBookmarkName(), ::rtl::OUString::createFromAscii(ODF_FORMTEXT ) ) ); ASSERT(pFieldmark!=NULL, "hmmm; why was the bookmark not created?"); if (pFieldmark!=NULL) { const IFieldmark::parameter_map_t& pParametersToAdd = maFieldStack.back().getParameters(); @@ -2146,7 +2146,7 @@ eF_ResT SwWW8ImplReader::Read_F_PgRef( WW8FieldDesc*, String& rStr ) if (1) { ::rtl::OUString aBookmarkName=::rtl::OUString::createFromAscii("_REF"); maFieldStack.back().SetBookmarkName(aBookmarkName); - maFieldStack.back().SetBookmarkType(::rtl::OUString::createFromAscii(ECMA_PAGEREF)); + maFieldStack.back().SetBookmarkType(::rtl::OUString::createFromAscii(ODF_PAGEREF)); maFieldStack.back().AddParam(rtl::OUString(), sName); return FLD_TEXT; } @@ -2855,7 +2855,7 @@ eF_ResT SwWW8ImplReader::Read_F_Tox( WW8FieldDesc* pF, String& rStr ) if (1) { ::rtl::OUString aBookmarkName=::rtl::OUString::createFromAscii("_TOC"); maFieldStack.back().SetBookmarkName(aBookmarkName); - maFieldStack.back().SetBookmarkType(::rtl::OUString::createFromAscii(ECMA_TOC)); + maFieldStack.back().SetBookmarkType(::rtl::OUString::createFromAscii(ODF_TOC)); // maFieldStack.back().AddParam(::rtl::OUString::createFromAscii("Description"), aFormula.sToolTip); return FLD_TEXT; } @@ -3383,7 +3383,7 @@ eF_ResT SwWW8ImplReader::Read_F_Hyperlink( WW8FieldDesc* /*pF*/, String& rStr ) if (1) { ::rtl::OUString aBookmarkName=::rtl::OUString::createFromAscii("_HYPERLINK"); maFieldStack.back().SetBookmarkName(aBookmarkName); - maFieldStack.back().SetBookmarkType(::rtl::OUString::createFromAscii(ECMA_HYPERLINK)); + maFieldStack.back().SetBookmarkType(::rtl::OUString::createFromAscii(ODF_HYPERLINK)); // maFieldStack.back().AddParam(::rtl::OUString::createFromAscii("Description"), aFormula.sToolTip); return FLD_TEXT; } diff --git a/sw/source/ui/docvw/edtwin.cxx b/sw/source/ui/docvw/edtwin.cxx index 9da3ab8e5e7a..c7fc7239caa4 100644 --- a/sw/source/ui/docvw/edtwin.cxx +++ b/sw/source/ui/docvw/edtwin.cxx @@ -151,7 +151,7 @@ #include #include -#include +#include #include "PostItMgr.hxx" #include "postit.hxx" @@ -4218,13 +4218,13 @@ void SwEditWin::MouseButtonUp(const MouseEvent& rMEvt) IFieldmark *fieldBM = const_cast< IFieldmark* > ( aCntntAtPos.aFnd.pFldmark ); //SwDocShell* pDocSh = rView.GetDocShell(); //SwDoc *pDoc=pDocSh->GetDoc(); - if (fieldBM->GetFieldname( ).equalsAscii( ECMA_FORMCHECKBOX ) ) + if (fieldBM->GetFieldname( ).equalsAscii( ODF_FORMCHECKBOX ) ) { ICheckboxFieldmark* pCheckboxFm = dynamic_cast(fieldBM); pCheckboxFm->SetChecked(!pCheckboxFm->IsChecked()); pCheckboxFm->Invalidate(); rSh.InvalidateWindows( rView.GetVisArea() ); - } else if (fieldBM->GetFieldname().equalsAscii( ECMA_FORMDROPDOWN) ) { + } else if (fieldBM->GetFieldname().equalsAscii( ODF_FORMDROPDOWN) ) { rView.ExecFieldPopup( aDocPt, fieldBM ); fieldBM->Invalidate(); rSh.InvalidateWindows( rView.GetVisArea() ); diff --git a/sw/source/ui/uiview/viewling.cxx b/sw/source/ui/uiview/viewling.cxx index 3046910e413c..65f09003c77b 100644 --- a/sw/source/ui/uiview/viewling.cxx +++ b/sw/source/ui/uiview/viewling.cxx @@ -115,7 +115,7 @@ #include #include -#include +#include #include @@ -982,7 +982,7 @@ public: assert(fieldBM!=NULL); if (fieldBM!=NULL) { const IFieldmark::parameter_map_t* const pParameters = fieldBM->GetParameters(); - IFieldmark::parameter_map_t::const_iterator pListEntries = pParameters->find(::rtl::OUString::createFromAscii(ECMA_FORMDROPDOWN_LISTENTRY)); + IFieldmark::parameter_map_t::const_iterator pListEntries = pParameters->find(::rtl::OUString::createFromAscii(ODF_FORMDROPDOWN_LISTENTRY)); if(pListEntries != pParameters->end()) { Sequence< ::rtl::OUString> vListEntries; @@ -1064,7 +1064,7 @@ BOOL SwView::ExecFieldPopup( const Point& rPt, IFieldmark *fieldBM ) /*short ret=*/aFldDlg.Execute(); int selection=aFldDlg.getSelection(); if (selection>=0) { - (*fieldBM->GetParameters())[::rtl::OUString::createFromAscii(ECMA_FORMDROPDOWN_RESULT)] = makeAny(selection); + (*fieldBM->GetParameters())[::rtl::OUString::createFromAscii(ODF_FORMDROPDOWN_RESULT)] = makeAny(selection); } pWrtShell->Pop( sal_False ); -- cgit From e62a497c106e9c93cc16b5800b41a83b6d38fe9f Mon Sep 17 00:00:00 2001 From: Bjoern Michaelsen Date: Fri, 11 Dec 2009 16:20:25 +0100 Subject: cbosdo02: #i33737# odf export ---------------- cbosdo02: #i33737# odf export ---------------- cbosdo02: #i33737# odf import ---------------- cbosdo02: #i33737# fixing uno sequence for field parameters HG: Enter commit message. Lines beginning with 'HG:' are removed. HG: Remove all lines to abort the collapse operation. --- sw/source/core/crsr/bookmrk.cxx | 16 +++++++++++++--- sw/source/core/inc/bookmrk.hxx | 11 ----------- sw/source/core/text/inftxt.cxx | 4 ++-- sw/source/core/unocore/unobkm.cxx | 6 ++---- sw/source/filter/ww8/wrtw8nds.cxx | 1 + 5 files changed, 18 insertions(+), 20 deletions(-) (limited to 'sw') diff --git a/sw/source/core/crsr/bookmrk.cxx b/sw/source/core/crsr/bookmrk.cxx index df7b52b6be79..dd467185a9f8 100644 --- a/sw/source/core/crsr/bookmrk.cxx +++ b/sw/source/core/crsr/bookmrk.cxx @@ -44,11 +44,13 @@ #include #include #include +#include SV_IMPL_REF( SwServerObject ) using namespace ::sw::mark; +using namespace ::com::sun::star::uno; namespace { @@ -329,10 +331,18 @@ namespace sw { namespace mark // want this for checkboxes this->GetMarkEnd( ).nContent--; } - void CheckboxFieldmark::SetChecked(bool checked) - { m_isChecked = checked; } + { + (*GetParameters())[::rtl::OUString::createFromAscii(ODF_FORMCHECKBOX_RESULT)] = makeAny(checked); + } bool CheckboxFieldmark::IsChecked() const - { return m_isChecked; } + { + bool bResult = false; + parameter_map_t::const_iterator pResult = GetParameters()->find(::rtl::OUString::createFromAscii(ODF_FORMCHECKBOX_RESULT)); + if(pResult != GetParameters()->end()) + pResult->second >>= bResult; + return bResult; + } + }} diff --git a/sw/source/core/inc/bookmrk.hxx b/sw/source/core/inc/bookmrk.hxx index 1677b6d221e5..5cec63cd8a9e 100644 --- a/sw/source/core/inc/bookmrk.hxx +++ b/sw/source/core/inc/bookmrk.hxx @@ -109,7 +109,6 @@ namespace sw { namespace mark class NavigatorReminder : public MarkBase - , virtual public IMark { public: NavigatorReminder(const SwPaM& rPaM); @@ -213,8 +212,6 @@ namespace sw { namespace mark virtual void Invalidate(); virtual rtl::OUString ToString() const; private: - //int fftype; // Type: 0 = Text, 1 = Check Box, 2 = List - //bool ffprot; ::rtl::OUString m_aFieldname; ::rtl::OUString m_aFieldHelptext; IFieldmark::parameter_map_t m_vParams; @@ -228,9 +225,6 @@ namespace sw { namespace mark public: TextFieldmark(const SwPaM& rPaM); virtual void InitDoc(SwDoc* const io_pDoc); - private: - //int fftypetxt; // Type of text field: 0 = Regular text, 1 = Number, 2 = Date, 3 = Current date, 4 = Current time, 5 = Calculation - //int ffmaxlen; // Number of characters for text field. Zero means unlimited. }; class CheckboxFieldmark @@ -242,11 +236,6 @@ namespace sw { namespace mark virtual void InitDoc(SwDoc* const io_pDoc); bool IsChecked() const; void SetChecked(bool checked); - private: - bool m_isChecked; - //bool ffsize; // 0 = Auto, 1=Exact (see ffhps) - //bool ffrecalc; - //int ffhps; // Check box size (half-point sizes). }; }} diff --git a/sw/source/core/text/inftxt.cxx b/sw/source/core/text/inftxt.cxx index b8052fc50bd5..b5fd6946fc73 100644 --- a/sw/source/core/text/inftxt.cxx +++ b/sw/source/core/text/inftxt.cxx @@ -1225,7 +1225,7 @@ void SwTxtPaintInfo::_DrawBackBrush( const SwLinePortion &rPor ) const if(pFieldmark) { OSL_TRACE("Found Fieldmark"); #if DEBUG - rtl::OUString str = pFieldmark->toString( ); + rtl::OUString str = pFieldmark->ToString( ); fprintf( stderr, "%s\n", rtl::OUStringToOString( str, RTL_TEXTENCODING_UTF8 ).getStr( ) ); #endif } @@ -1236,7 +1236,7 @@ void SwTxtPaintInfo::_DrawBackBrush( const SwLinePortion &rPor ) const { OutputDevice* pOutDev = (OutputDevice*)GetOut(); pOutDev->Push( PUSH_LINECOLOR | PUSH_FILLCOLOR ); - pOutDev->SetFillColor( SwViewOption::GetFieldShadingsColor() ); + pOutDev->SetFillColor( SwViewOption::GetFieldShadingsColor() ); pOutDev->SetLineColor( ); pOutDev->DrawRect( aIntersect.SVRect() ); pOutDev->Pop(); diff --git a/sw/source/core/unocore/unobkm.cxx b/sw/source/core/unocore/unobkm.cxx index 7b2230710311..e34d15ad886c 100644 --- a/sw/source/core/unocore/unobkm.cxx +++ b/sw/source/core/unocore/unobkm.cxx @@ -361,8 +361,6 @@ void SwXFieldmarkParameters::insertByName(const OUString& aName, const Any& aEle IFieldmark::parameter_map_t* pParameters = getCoreParameters(); if(pParameters->find(aName) != pParameters->end()) throw ElementExistException(); - if(aElement.getValueType() != getElementType()) - throw IllegalArgumentException(); (*pParameters)[aName] = aElement; } @@ -393,7 +391,7 @@ Any SwXFieldmarkParameters::getByName(const OUString& aName) IFieldmark::parameter_map_t::iterator pEntry = pParameters->find(aName); if(pEntry == pParameters->end()) throw NoSuchElementException(); - return makeAny(pEntry->second); + return pEntry->second; } Sequence SwXFieldmarkParameters::getElementNames() @@ -419,7 +417,7 @@ Sequence SwXFieldmarkParameters::getElementNames() Type SwXFieldmarkParameters::getElementType() throw (RuntimeException) { - return ::cppu::UnoType::get(); + return ::cppu::UnoType< ::cppu::UnoVoidType>::get(); } ::sal_Bool SwXFieldmarkParameters::hasElements() diff --git a/sw/source/filter/ww8/wrtw8nds.cxx b/sw/source/filter/ww8/wrtw8nds.cxx index 051fdcba08b5..3781415e0fb3 100644 --- a/sw/source/filter/ww8/wrtw8nds.cxx +++ b/sw/source/filter/ww8/wrtw8nds.cxx @@ -106,6 +106,7 @@ #include #include + using namespace ::com::sun::star; using namespace ::com::sun::star::i18n; using namespace sw::util; -- cgit From 7bdea49583acf53b0982740db3e27bd00a659a90 Mon Sep 17 00:00:00 2001 From: Bjoern Michaelsen Date: Fri, 11 Dec 2009 19:06:46 +0100 Subject: cbosdo02: #i33737# formatting --- sw/inc/crsrsh.hxx | 2 +- sw/source/core/crsr/pam.cxx | 18 +++++++++--------- sw/source/core/unocore/unobkm.cxx | 2 +- sw/source/filter/ww8/ww8par3.cxx | 12 ------------ 4 files changed, 11 insertions(+), 23 deletions(-) (limited to 'sw') diff --git a/sw/inc/crsrsh.hxx b/sw/inc/crsrsh.hxx index 4e0eae0a9dfb..2b3e63f56f1e 100644 --- a/sw/inc/crsrsh.hxx +++ b/sw/inc/crsrsh.hxx @@ -112,7 +112,7 @@ struct SwContentAtPos SW_NUMLABEL = 0x0200, // #i23726# SW_CONTENT_CHECK = 0x0400, // --> FME 2005-05-13 #i43742# <-- SW_SMARTTAG = 0x0800, - SW_FORMCTRL = 0x1000 + SW_FORMCTRL = 0x1000 #ifndef PRODUCT ,SW_CURR_ATTRS = 0x4000 // nur zum Debuggen ,SW_TABLEBOXVALUE = 0x8000 // nur zum Debuggen diff --git a/sw/source/core/crsr/pam.cxx b/sw/source/core/crsr/pam.cxx index e91b8c1035d7..1df549ae4cd3 100644 --- a/sw/source/core/crsr/pam.cxx +++ b/sw/source/core/crsr/pam.cxx @@ -828,21 +828,21 @@ BOOL SwPaM::HasReadonlySel( bool bFormView ) const } //FIXME FieldBk // TODO: Form Protection when Enhanced Fields are enabled - if (!bRet) { - const SwDoc *pDoc = GetDoc(); + if (!bRet) { + const SwDoc *pDoc = GetDoc(); sw::mark::IMark* pA = NULL; sw::mark::IMark* pB = NULL; if ( pDoc ) { const IDocumentMarkAccess* pMarksAccess = pDoc->getIDocumentMarkAccess( ); - pA = GetPoint() ? pMarksAccess->getFieldmarkFor( *GetPoint( ) ) : NULL; - pB = GetMark( ) ? pMarksAccess->getFieldmarkFor( *GetMark( ) ) : pA; - bRet = ( pA != pB ); + pA = GetPoint() ? pMarksAccess->getFieldmarkFor( *GetPoint( ) ) : NULL; + pB = GetMark( ) ? pMarksAccess->getFieldmarkFor( *GetMark( ) ) : pA; + bRet = ( pA != pB ); } - bool bProtectForm = pDoc->get( IDocumentSettingAccess::PROTECT_FORM ); - if ( bProtectForm ) - bRet |= ( pA == NULL || pB == NULL ); - } + bool bProtectForm = pDoc->get( IDocumentSettingAccess::PROTECT_FORM ); + if ( bProtectForm ) + bRet |= ( pA == NULL || pB == NULL ); + } return bRet; } diff --git a/sw/source/core/unocore/unobkm.cxx b/sw/source/core/unocore/unobkm.cxx index e34d15ad886c..ea032b5e4dce 100644 --- a/sw/source/core/unocore/unobkm.cxx +++ b/sw/source/core/unocore/unobkm.cxx @@ -7,7 +7,7 @@ * OpenOffice.org - a multi-platform office productivity suite * * $RCSfile: unobkm.cxx,v $ - * $Revision: 1.16 $ + * $Revision: 1.17 $ * * This file is part of OpenOffice.org. * diff --git a/sw/source/filter/ww8/ww8par3.cxx b/sw/source/filter/ww8/ww8par3.cxx index 743061ec51b0..4e55fb5723ed 100644 --- a/sw/source/filter/ww8/ww8par3.cxx +++ b/sw/source/filter/ww8/ww8par3.cxx @@ -2140,18 +2140,6 @@ bool SwWW8ImplReader::ImportFormulaControl(WW8FormulaControl &aFormula, if((aPic.lcb > 0x3A) && !pDataStream->GetError() ) { -#if 0 // some debug fun; remove this later... - int len=aPic.lcb-aPic.cbHeader; - char *pBuf=(char*)malloc(len); - pDataStream->Read( pBuf, len); - static int _h=0; - char fname[255]; - sprintf(fname, "data%03i.data", _h++); - FILE *out=fopen(fname, "wb"); - fwrite(pBuf, len, 1, out); - fclose(out); - pDataStream->Seek( nPicLocFc + aPic.cbHeader ); -#endif aFormula.FormulaRead(nWhich,pDataStream); bRet = true; } -- cgit From f23ef949effa020f452172c25e363e388739fd73 Mon Sep 17 00:00:00 2001 From: Bjoern Michaelsen Date: Fri, 22 Jan 2010 15:07:11 +0100 Subject: cbosdo02: #i107658# disabling enhanced fields for now --- sw/source/filter/ww8/ww8par3.cxx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'sw') diff --git a/sw/source/filter/ww8/ww8par3.cxx b/sw/source/filter/ww8/ww8par3.cxx index 770ec6cfe2fb..fee4da44a57b 100644 --- a/sw/source/filter/ww8/ww8par3.cxx +++ b/sw/source/filter/ww8/ww8par3.cxx @@ -280,9 +280,7 @@ eF_ResT SwWW8ImplReader::Read_F_FormListBox( WW8FieldDesc* pF, String& rStr) } else { - //@TODO fix: copy pasting here!!!!!!!!!!!!!! - //REVIEW: don't let this throught.... sometime I forget to get rid of my proof of concept stuff. Please kindly remind me!!!!! - + // TODO: review me String aBookmarkName; WW8PLCFx_Book* pB = pPlcxMan->GetBook(); if (pB!=NULL) -- cgit From 8e5ce7a3a0703fb3af27da7ffea023830a340b04 Mon Sep 17 00:00:00 2001 From: Bjoern Michaelsen Date: Tue, 2 Feb 2010 14:05:24 +0100 Subject: cbosdo02: #i107658# fixing build breakers --- sw/source/filter/ww8/ww8par3.cxx | 2 +- sw/source/filter/ww8/ww8par5.cxx | 2 +- sw/source/ui/uiview/viewling.cxx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'sw') diff --git a/sw/source/filter/ww8/ww8par3.cxx b/sw/source/filter/ww8/ww8par3.cxx index fee4da44a57b..cb651de2f29d 100644 --- a/sw/source/filter/ww8/ww8par3.cxx +++ b/sw/source/filter/ww8/ww8par3.cxx @@ -312,7 +312,7 @@ eF_ResT SwWW8ImplReader::Read_F_FormListBox( WW8FieldDesc* pF, String& rStr) if ( pFieldmark != NULL ) { uno::Sequence< ::rtl::OUString > vListEntries(aFormula.maListEntries.size()); - copy(aFormula.maListEntries.begin(), aFormula.maListEntries.end(), ::comphelper::stl_begin(vListEntries)); + ::std::copy(aFormula.maListEntries.begin(), aFormula.maListEntries.end(), ::comphelper::stl_begin(vListEntries)); (*pFieldmark->GetParameters())[::rtl::OUString::createFromAscii(ODF_FORMDROPDOWN_LISTENTRY)] = uno::makeAny(vListEntries); sal_Int32 nIndex = aFormula.fDropdownIndex < aFormula.maListEntries.size() ? aFormula.fDropdownIndex : 0; (*pFieldmark->GetParameters())[::rtl::OUString::createFromAscii(ODF_FORMDROPDOWN_RESULT)] = uno::makeAny(nIndex); diff --git a/sw/source/filter/ww8/ww8par5.cxx b/sw/source/filter/ww8/ww8par5.cxx index 25b11bca016a..aa2ed3d167a5 100644 --- a/sw/source/filter/ww8/ww8par5.cxx +++ b/sw/source/filter/ww8/ww8par5.cxx @@ -95,7 +95,7 @@ #include "ww8par2.hxx" #include "writerhelper.hxx" #include "fields.hxx" -#include +#include #include // #i24377# diff --git a/sw/source/ui/uiview/viewling.cxx b/sw/source/ui/uiview/viewling.cxx index 5b46f15946e5..b6eb60360eb8 100644 --- a/sw/source/ui/uiview/viewling.cxx +++ b/sw/source/ui/uiview/viewling.cxx @@ -1062,7 +1062,7 @@ BOOL SwView::ExecFieldPopup( const Point& rPt, IFieldmark *fieldBM ) aFldDlg.SetPosPixel(pEditWin->OutputToScreenPixel(aPixPos)); /*short ret=*/aFldDlg.Execute(); - int selection=aFldDlg.getSelection(); + sal_Int32 selection=aFldDlg.getSelection(); if (selection>=0) { (*fieldBM->GetParameters())[::rtl::OUString::createFromAscii(ODF_FORMDROPDOWN_RESULT)] = makeAny(selection); } -- cgit From 24cb175c2b698e9a72257a436e5b71de74d977f2 Mon Sep 17 00:00:00 2001 From: Bjoern Michaelsen Date: Tue, 9 Feb 2010 18:39:47 +0100 Subject: cbosdo02: merge fixes --- sw/inc/unobookmark.hxx | 44 +++-- sw/source/core/crsr/bookmrk.cxx | 11 -- sw/source/core/unocore/unobkm.cxx | 390 ++++++++++++++++++++++---------------- sw/source/ui/docvw/edtwin.cxx | 8 +- 4 files changed, 264 insertions(+), 189 deletions(-) (limited to 'sw') diff --git a/sw/inc/unobookmark.hxx b/sw/inc/unobookmark.hxx index 46d0054551b7..bdf829ea16e9 100644 --- a/sw/inc/unobookmark.hxx +++ b/sw/inc/unobookmark.hxx @@ -202,6 +202,34 @@ public: }; +class SwXFieldmarkParameters + : public ::cppu::WeakImplHelper1< ::com::sun::star::container::XNameContainer> + , private SwClient +{ + public: + SwXFieldmarkParameters(::sw::mark::IFieldmark* const pFieldmark) + { + pFieldmark->Add(this); + } + + // XNameContainer + virtual void SAL_CALL insertByName( const ::rtl::OUString& aName, const ::com::sun::star::uno::Any& aElement ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::container::ElementExistException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeByName( const ::rtl::OUString& Name ) throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + // XNameReplace + virtual void SAL_CALL replaceByName( const ::rtl::OUString& aName, const ::com::sun::star::uno::Any& aElement ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + // XNameAccess + virtual ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName ) throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames( ) throw (::com::sun::star::uno::RuntimeException); + virtual ::sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName ) throw (::com::sun::star::uno::RuntimeException); + // XElementAccess + virtual ::com::sun::star::uno::Type SAL_CALL getElementType( ) throw (::com::sun::star::uno::RuntimeException); + virtual ::sal_Bool SAL_CALL hasElements( ) throw (::com::sun::star::uno::RuntimeException); + //SwClient + virtual void Modify(SfxPoolItem *pOld, SfxPoolItem *pNew); + private: + ::sw::mark::IFieldmark::parameter_map_t* getCoreParameters() throw (::com::sun::star::uno::RuntimeException); +}; + typedef cppu::ImplInheritanceHelper1< SwXBookmark, ::com::sun::star::text::XFormField > SwXFieldmark_Base; @@ -223,19 +251,11 @@ public: ::com::sun::star::text::XTextRange > & xTextRange) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); - - virtual ::rtl::OUString SAL_CALL getDescription() - throw (::com::sun::star::uno::RuntimeException); - virtual ::sal_Int16 SAL_CALL getType() - throw (::com::sun::star::uno::RuntimeException); - virtual ::sal_Int16 SAL_CALL getRes() - throw (::com::sun::star::uno::RuntimeException); - - virtual void SAL_CALL setDescription(const ::rtl::OUString& rDescription) - throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setType(::sal_Int16 fieldType) + virtual ::rtl::OUString SAL_CALL getFieldType(void) + throw( ::com::sun::star::uno::RuntimeException ); + virtual void SAL_CALL setFieldType(const ::rtl::OUString& description ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setRes(::sal_Int16 res) + virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > SAL_CALL getParameters( ) throw (::com::sun::star::uno::RuntimeException); }; diff --git a/sw/source/core/crsr/bookmrk.cxx b/sw/source/core/crsr/bookmrk.cxx index 385d4fb85f04..2228c4e21352 100644 --- a/sw/source/core/crsr/bookmrk.cxx +++ b/sw/source/core/crsr/bookmrk.cxx @@ -271,17 +271,6 @@ namespace sw { namespace mark uno::Reference< rdf::XMetadatable > Bookmark::MakeUnoObject() { - // re-use existing SwXBookmark - SwClientIter iter( *this ); - SwClient * pClient( iter.First( TYPE( SwXBookmark ) ) ); - while (pClient) { - SwXBookmark *const pBookmark( dynamic_cast(pClient) ); - if (pBookmark && pBookmark->GetCoreObject() == this) { - return pBookmark; - } - pClient = iter.Next(); - } - // create new SwXBookmark SwDoc *const pDoc( GetMarkPos().GetDoc() ); OSL_ENSURE(pDoc, "Bookmark::MakeUnoObject: no doc?"); diff --git a/sw/source/core/unocore/unobkm.cxx b/sw/source/core/unocore/unobkm.cxx index 9ad0a1051b7b..da0f334befc7 100644 --- a/sw/source/core/unocore/unobkm.cxx +++ b/sw/source/core/unocore/unobkm.cxx @@ -55,7 +55,7 @@ using namespace ::sw::mark; using namespace ::com::sun::star; using ::rtl::OUString; -using ::rtl::OUStringBuffer; + namespace { @@ -202,15 +202,15 @@ const uno::Sequence< sal_Int8 > & SwXBookmark::getUnoTunnelId() sal_Int64 SAL_CALL SwXBookmark::getSomething(const uno::Sequence< sal_Int8 >& rId) - throw(uno::RuntimeException) +throw (uno::RuntimeException) { return ::sw::UnoTunnelImpl(rId, this); - } +} void SwXBookmark::attachToRangeEx( const uno::Reference< text::XTextRange > & xTextRange, IDocumentMarkAccess::MarkType eType) - throw(lang::IllegalArgumentException, uno::RuntimeException) +throw (lang::IllegalArgumentException, uno::RuntimeException) { if (m_pImpl->m_pRegisteredBookmark) { @@ -232,116 +232,146 @@ void SwXBookmark::attachToRangeEx( (pRange) ? pRange->GetDoc() : ((pCursor) ? pCursor->GetDoc() : 0); if (!pDoc) { - m_pDoc = pDc; - SwUnoInternalPaM aPam(*m_pDoc); - SwXTextRange::XTextRangeToSwPaM(aPam, xTextRange); - UnoActionContext aCont(m_pDoc); - if(!m_aName.Len()) - m_aName = OUString::createFromAscii("Bookmark"); - if(eType == IDocumentMarkAccess::BOOKMARK && ::sw::mark::CrossRefNumItemBookmark::IsLegalName(m_aName)) - eType = IDocumentMarkAccess::CROSSREF_NUMITEM_BOOKMARK; - else if(eType == IDocumentMarkAccess::BOOKMARK && ::sw::mark::CrossRefHeadingBookmark::IsLegalName(m_aName)) - eType = IDocumentMarkAccess::CROSSREF_HEADING_BOOKMARK; - registerInMark(m_pDoc->getIDocumentMarkAccess()->makeMark(aPam, m_aName, eType)); - // --> OD 2007-10-23 #i81002# - // Check, if bookmark has been created. - // E.g., the creation of a cross-reference bookmark is suppress, - // if the PaM isn't a valid one for cross-reference bookmarks. - if(!m_pRegisteredBookmark) - { - OSL_ENSURE(false, - "" - " - could not create Mark."); - throw lang::IllegalArgumentException(); - } - // <-- + throw lang::IllegalArgumentException(); + } + + m_pImpl->m_pDoc = pDoc; + SwUnoInternalPaM aPam(*m_pImpl->m_pDoc); + ::sw::XTextRangeToSwPaM(aPam, xTextRange); + UnoActionContext aCont(m_pImpl->m_pDoc); + if (!m_pImpl->m_sMarkName.getLength()) + { + m_pImpl->m_sMarkName = OUString::createFromAscii("Bookmark"); + } + if ((eType == IDocumentMarkAccess::BOOKMARK) && + ::sw::mark::CrossRefNumItemBookmark::IsLegalName(m_pImpl->m_sMarkName)) + { + eType = IDocumentMarkAccess::CROSSREF_NUMITEM_BOOKMARK; + } + else if ((eType == IDocumentMarkAccess::BOOKMARK) && + ::sw::mark::CrossRefHeadingBookmark::IsLegalName(m_pImpl->m_sMarkName)) + { + eType = IDocumentMarkAccess::CROSSREF_HEADING_BOOKMARK; } - else + m_pImpl->registerInMark(*this, + m_pImpl->m_pDoc->getIDocumentMarkAccess()->makeMark( + aPam, m_pImpl->m_sMarkName, eType)); + // --> OD 2007-10-23 #i81002# + // Check, if bookmark has been created. + // E.g., the creation of a cross-reference bookmark is suppress, + // if the PaM isn't a valid one for cross-reference bookmarks. + if (!m_pImpl->m_pRegisteredBookmark) + { + OSL_ENSURE(false, + "" + " - could not create Mark."); throw lang::IllegalArgumentException(); + } + // <-- } -void SwXBookmark::attachToRange(const uno::Reference< text::XTextRange > & xTextRange) - throw( lang::IllegalArgumentException, uno::RuntimeException ) +void SwXBookmark::attachToRange( + const uno::Reference< text::XTextRange > & xTextRange) +throw (lang::IllegalArgumentException, uno::RuntimeException) { attachToRangeEx(xTextRange, IDocumentMarkAccess::BOOKMARK); } -void SwXBookmark::attach(const uno::Reference< text::XTextRange > & xTextRange) - throw( lang::IllegalArgumentException, uno::RuntimeException ) +void SAL_CALL +SwXBookmark::attach(const uno::Reference< text::XTextRange > & xTextRange) +throw (lang::IllegalArgumentException, uno::RuntimeException) { vos::OGuard aGuard(Application::GetSolarMutex()); attachToRange( xTextRange ); } -uno::Reference< text::XTextRange > SwXBookmark::getAnchor(void) - throw( uno::RuntimeException ) +uno::Reference< text::XTextRange > SAL_CALL +SwXBookmark::getAnchor() throw (uno::RuntimeException) { vos::OGuard aGuard(Application::GetSolarMutex()); - uno::Reference< text::XTextRange > aRet; - if(m_pRegisteredBookmark) - aRet = SwXTextRange::CreateTextRangeFromPosition( - m_pDoc, - m_pRegisteredBookmark->GetMarkPos(), - m_pRegisteredBookmark->IsExpanded() ? &m_pRegisteredBookmark->GetOtherMarkPos() : NULL); - else + + if (!m_pImpl->m_pRegisteredBookmark) + { throw uno::RuntimeException(); - return aRet; + } + return SwXTextRange::CreateXTextRange( + *m_pImpl->m_pDoc, + m_pImpl->m_pRegisteredBookmark->GetMarkPos(), + (m_pImpl->m_pRegisteredBookmark->IsExpanded()) + ? &m_pImpl->m_pRegisteredBookmark->GetOtherMarkPos() : NULL); } -void SwXBookmark::dispose(void) - throw( uno::RuntimeException ) +void SAL_CALL SwXBookmark::dispose() throw (uno::RuntimeException) { vos::OGuard aGuard(Application::GetSolarMutex()); - if(m_pRegisteredBookmark) - GetDoc()->getIDocumentMarkAccess()->deleteMark(m_pRegisteredBookmark); - else - throw uno::RuntimeException(); + if (m_pImpl->m_pRegisteredBookmark) + { + m_pImpl->m_pDoc->getIDocumentMarkAccess()->deleteMark( + m_pImpl->m_pRegisteredBookmark); + } } -void SwXBookmark::addEventListener(const uno::Reference< lang::XEventListener > & aListener) - throw( uno::RuntimeException ) +void SAL_CALL SwXBookmark::addEventListener( + const uno::Reference< lang::XEventListener > & xListener) +throw (uno::RuntimeException) { - if(!m_pRegisteredBookmark) + vos::OGuard g(Application::GetSolarMutex()); + + if (!m_pImpl->m_pRegisteredBookmark) + { throw uno::RuntimeException(); - m_aLstnrCntnr.AddListener(aListener); + } + m_pImpl->m_ListenerContainer.AddListener(xListener); } -void SwXBookmark::removeEventListener(const uno::Reference< lang::XEventListener > & aListener) - throw( uno::RuntimeException ) +void SAL_CALL SwXBookmark::removeEventListener( + const uno::Reference< lang::XEventListener > & xListener) +throw (uno::RuntimeException) { - if(!m_pRegisteredBookmark || !m_aLstnrCntnr.RemoveListener(aListener)) + vos::OGuard g(Application::GetSolarMutex()); + + if (!m_pImpl->m_pRegisteredBookmark || + !m_pImpl->m_ListenerContainer.RemoveListener(xListener)) + { throw uno::RuntimeException(); + } } -OUString SwXBookmark::getName(void) - throw(uno::RuntimeException) +OUString SAL_CALL SwXBookmark::getName() +throw (uno::RuntimeException) { vos::OGuard aGuard(Application::GetSolarMutex()); - OUString sRet; - if(m_pRegisteredBookmark) - sRet = m_pRegisteredBookmark->GetName(); - else - sRet = m_aName; - return sRet; + + return (m_pImpl->m_pRegisteredBookmark) + ? m_pImpl->m_pRegisteredBookmark->GetName() + : m_pImpl->m_sMarkName; } -void SwXBookmark::setName(const OUString& rName) - throw(uno::RuntimeException) +void SAL_CALL SwXBookmark::setName(const OUString& rName) +throw (uno::RuntimeException) { vos::OGuard aGuard(Application::GetSolarMutex()); - if(!m_pRegisteredBookmark) - m_aName = rName; - if(!m_pRegisteredBookmark || getName() == rName) + + if (!m_pImpl->m_pRegisteredBookmark) + { + m_pImpl->m_sMarkName = rName; + } + if (!m_pImpl->m_pRegisteredBookmark || (getName() == rName)) + { return; - IDocumentMarkAccess* const pMarkAccess = m_pDoc->getIDocumentMarkAccess(); + } + IDocumentMarkAccess *const pMarkAccess = + m_pImpl->m_pDoc->getIDocumentMarkAccess(); if(pMarkAccess->findMark(rName) != pMarkAccess->getMarksEnd()) + { throw uno::RuntimeException(); + } - SwPaM aPam(m_pRegisteredBookmark->GetMarkPos()); - if(m_pRegisteredBookmark->IsExpanded()) + SwPaM aPam(m_pImpl->m_pRegisteredBookmark->GetMarkPos()); + if (m_pImpl->m_pRegisteredBookmark->IsExpanded()) { aPam.SetMark(); - *aPam.GetMark() = m_pRegisteredBookmark->GetOtherMarkPos(); + *aPam.GetMark() = m_pImpl->m_pRegisteredBookmark->GetOtherMarkPos(); } SwRewriter aRewriter; @@ -349,162 +379,197 @@ void SwXBookmark::setName(const OUString& rName) aRewriter.AddRule(UNDO_ARG2, SW_RES(STR_YIELDS)); aRewriter.AddRule(UNDO_ARG3, lcl_QuoteName(rName)); - m_pDoc->StartUndo(UNDO_BOOKMARK_RENAME, &aRewriter); - pMarkAccess->renameMark(m_pRegisteredBookmark, rName); - m_pDoc->EndUndo(UNDO_BOOKMARK_RENAME, NULL); + m_pImpl->m_pDoc->StartUndo(UNDO_BOOKMARK_RENAME, &aRewriter); + pMarkAccess->renameMark(m_pImpl->m_pRegisteredBookmark, rName); + m_pImpl->m_pDoc->EndUndo(UNDO_BOOKMARK_RENAME, NULL); } -OUString SwXBookmark::getImplementationName(void) throw( uno::RuntimeException ) +OUString SAL_CALL +SwXBookmark::getImplementationName() throw (uno::RuntimeException) { return OUString::createFromAscii("SwXBookmark"); } -sal_Bool SwXBookmark::supportsService(const OUString& rServiceName) - throw( uno::RuntimeException ) +static char const*const g_ServicesBookmark[] = { - return !rServiceName.compareToAscii("com.sun.star.text.Bookmark") || - !rServiceName.compareToAscii("com.sun.star.document.LinkTarget") || - !rServiceName.compareToAscii("com.sun.star.text.TextContent"); -} + "com.sun.star.text.TextContent", + "com.sun.star.text.Bookmark", + "com.sun.star.document.LinkTarget", +}; +static const size_t g_nServicesBookmark( + sizeof(g_ServicesBookmark)/sizeof(g_ServicesBookmark[0])); -uno::Sequence< OUString > SwXBookmark::getSupportedServiceNames(void) - throw( uno::RuntimeException ) +sal_Bool SAL_CALL SwXBookmark::supportsService(const OUString& rServiceName) +throw (uno::RuntimeException) { - uno::Sequence< OUString > aRet(3); - aRet[0] = OUString::createFromAscii("com.sun.star.text.Bookmark"); - aRet[1] = OUString::createFromAscii("com.sun.star.document.LinkTarget"); - aRet[2] = OUString::createFromAscii("com.sun.star.text.TextContent"); - return aRet; + return ::sw::SupportsServiceImpl( + g_nServicesBookmark, g_ServicesBookmark, rServiceName); } -void SwXBookmark::Modify(SfxPoolItem *pOld, SfxPoolItem *pNew) +uno::Sequence< OUString > SAL_CALL +SwXBookmark::getSupportedServiceNames() throw (uno::RuntimeException) { - ClientModify(this, pOld, pNew); - if(!GetRegisteredIn()) - { - m_pRegisteredBookmark = NULL; - m_pDoc = NULL; - m_aLstnrCntnr.Disposing(); - } + return ::sw::GetSupportedServiceNamesImpl( + g_nServicesBookmark, g_ServicesBookmark); } // MetadatableMixin ::sfx2::Metadatable* SwXBookmark::GetCoreObject() { - return dynamic_cast< ::sfx2::Metadatable* >( GetBookmark() ); + return dynamic_cast< ::sfx2::Metadatable* >(m_pImpl->m_pRegisteredBookmark); } uno::Reference SwXBookmark::GetModel() { - if (GetDoc()) + if (m_pImpl->m_pDoc) { - SwDocShell const * const pShell( GetDoc()->GetDocShell() ); + SwDocShell const * const pShell( m_pImpl->m_pDoc->GetDocShell() ); return (pShell) ? pShell->GetModel() : 0; } return 0; } -uno::Reference< beans::XPropertySetInfo > SwXBookmark::getPropertySetInfo(void) - throw( uno::RuntimeException ) +uno::Reference< beans::XPropertySetInfo > SAL_CALL +SwXBookmark::getPropertySetInfo() throw (uno::RuntimeException) { - static uno::Reference< beans::XPropertySetInfo > aRef; - if(!aRef.is()) - { - aRef = aSwMapProvider.GetPropertySet(PROPERTY_MAP_BOOKMARK)->getPropertySetInfo(); - } - return aRef; + vos::OGuard g(Application::GetSolarMutex()); + + static uno::Reference< beans::XPropertySetInfo > xRef( + aSwMapProvider.GetPropertySet(PROPERTY_MAP_BOOKMARK) + ->getPropertySetInfo() ); + return xRef; } -void SwXBookmark::setPropertyValue(const OUString& PropertyName, const uno::Any& /*aValue*/) - throw( beans::UnknownPropertyException, - beans::PropertyVetoException, - lang::IllegalArgumentException, - lang::WrappedTargetException, - uno::RuntimeException ) +void SAL_CALL +SwXBookmark::setPropertyValue(const OUString& PropertyName, + const uno::Any& /*rValue*/) +throw (beans::UnknownPropertyException, beans::PropertyVetoException, + lang::IllegalArgumentException, lang::WrappedTargetException, + uno::RuntimeException) { // nothing to set here - throw IllegalArgumentException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Property is read-only: " ) ) + PropertyName, static_cast < cppu::OWeakObject * > ( this ), 0 ); + throw lang::IllegalArgumentException( ::rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM("Property is read-only: ")) + + PropertyName, static_cast< cppu::OWeakObject * >(this), 0 ); } -uno::Any SwXBookmark::getPropertyValue(const OUString& rPropertyName) - throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException ) +uno::Any SAL_CALL SwXBookmark::getPropertyValue(const OUString& rPropertyName) +throw (beans::UnknownPropertyException, lang::WrappedTargetException, + uno::RuntimeException) { + vos::OGuard g(Application::GetSolarMutex()); + uno::Any aRet; - if(!SwXParagraph::getDefaultTextContentValue(aRet, rPropertyName)) + if (! ::sw::GetDefaultTextContentValue(aRet, rPropertyName)) { if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_LINK_DISPLAY_NAME))) + { aRet <<= getName(); + } } return aRet; } -void SwXBookmark::addPropertyChangeListener(const OUString& /*PropertyName*/, - const uno::Reference< beans::XPropertyChangeListener > & /*aListener*/) - throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException ) -{ } +void SAL_CALL +SwXBookmark::addPropertyChangeListener( + const ::rtl::OUString& /*rPropertyName*/, + const uno::Reference< beans::XPropertyChangeListener >& /*xListener*/) +throw (beans::UnknownPropertyException, lang::WrappedTargetException, + uno::RuntimeException) +{ + OSL_ENSURE(false, + "SwXBookmark::addPropertyChangeListener(): not implemented"); +} -void SwXBookmark::removePropertyChangeListener(const OUString& /*PropertyName*/, - const uno::Reference< beans::XPropertyChangeListener > & /*aListener*/) - throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException ) -{ } +void SAL_CALL +SwXBookmark::removePropertyChangeListener( + const ::rtl::OUString& /*rPropertyName*/, + const uno::Reference< beans::XPropertyChangeListener >& /*xListener*/) +throw (beans::UnknownPropertyException, lang::WrappedTargetException, + uno::RuntimeException) +{ + OSL_ENSURE(false, + "SwXBookmark::removePropertyChangeListener(): not implemented"); +} -void SwXBookmark::addVetoableChangeListener(const OUString& /*PropertyName*/, - const uno::Reference< beans::XVetoableChangeListener > & /*aListener*/) - throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException ) -{ } +void SAL_CALL +SwXBookmark::addVetoableChangeListener( + const ::rtl::OUString& /*rPropertyName*/, + const uno::Reference< beans::XVetoableChangeListener >& /*xListener*/) +throw (beans::UnknownPropertyException, lang::WrappedTargetException, + uno::RuntimeException) +{ + OSL_ENSURE(false, + "SwXBookmark::addVetoableChangeListener(): not implemented"); +} -void SwXBookmark::removeVetoableChangeListener(const OUString& /*PropertyName*/, const uno::Reference< beans::XVetoableChangeListener > & /*aListener*/) - throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException ) -{ } +void SAL_CALL +SwXBookmark::removeVetoableChangeListener( + const ::rtl::OUString& /*rPropertyName*/, + const uno::Reference< beans::XVetoableChangeListener >& /*xListener*/) +throw (beans::UnknownPropertyException, lang::WrappedTargetException, + uno::RuntimeException) +{ + OSL_ENSURE(false, + "SwXBookmark::removeVetoableChangeListener(): not implemented"); +} +/****************************************************************** + * SwXFieldmark + ******************************************************************/ -void SwXFieldmarkParameters::insertByName(const OUString& aName, const Any& aElement) - throw (IllegalArgumentException, ElementExistException, WrappedTargetException, RuntimeException) +SwXFieldmark::SwXFieldmark(bool _isReplacementObject, ::sw::mark::IMark* pBkm, SwDoc* pDc) + : SwXFieldmark_Base(pBkm, pDc) + , isReplacementObject(_isReplacementObject) +{ } + +void SwXFieldmarkParameters::insertByName(const OUString& aName, const uno::Any& aElement) + throw (lang::IllegalArgumentException, container::ElementExistException, lang::WrappedTargetException, uno::RuntimeException) { vos::OGuard aGuard(Application::GetSolarMutex()); IFieldmark::parameter_map_t* pParameters = getCoreParameters(); if(pParameters->find(aName) != pParameters->end()) - throw ElementExistException(); + throw container::ElementExistException(); (*pParameters)[aName] = aElement; } void SwXFieldmarkParameters::removeByName(const OUString& aName) - throw (NoSuchElementException, WrappedTargetException, RuntimeException) + throw (container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException) { vos::OGuard aGuard(Application::GetSolarMutex()); if(!getCoreParameters()->erase(aName)) - throw NoSuchElementException(); + throw container::NoSuchElementException(); } -void SwXFieldmarkParameters::replaceByName(const OUString& aName, const Any& aElement) - throw (IllegalArgumentException, NoSuchElementException, WrappedTargetException, RuntimeException) +void SwXFieldmarkParameters::replaceByName(const OUString& aName, const uno::Any& aElement) + throw (lang::IllegalArgumentException, container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException) { vos::OGuard aGuard(Application::GetSolarMutex()); IFieldmark::parameter_map_t* pParameters = getCoreParameters(); IFieldmark::parameter_map_t::iterator pEntry = pParameters->find(aName); if(pEntry == pParameters->end()) - throw NoSuchElementException(); + throw container::NoSuchElementException(); pEntry->second = aElement; } -Any SwXFieldmarkParameters::getByName(const OUString& aName) - throw (NoSuchElementException, WrappedTargetException, RuntimeException) +uno::Any SwXFieldmarkParameters::getByName(const OUString& aName) + throw (container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException) { vos::OGuard aGuard(Application::GetSolarMutex()); IFieldmark::parameter_map_t* pParameters = getCoreParameters(); IFieldmark::parameter_map_t::iterator pEntry = pParameters->find(aName); if(pEntry == pParameters->end()) - throw NoSuchElementException(); + throw container::NoSuchElementException(); return pEntry->second; } -Sequence SwXFieldmarkParameters::getElementNames() - throw (RuntimeException) +uno::Sequence SwXFieldmarkParameters::getElementNames() + throw (uno::RuntimeException) { vos::OGuard aGuard(Application::GetSolarMutex()); IFieldmark::parameter_map_t* pParameters = getCoreParameters(); - Sequence vResult(pParameters->size()); + uno::Sequence vResult(pParameters->size()); OUString* pOutEntry = vResult.getArray(); for(IFieldmark::parameter_map_t::iterator pEntry = pParameters->begin(); pEntry!=pParameters->end(); ++pEntry, ++pOutEntry) *pOutEntry = pEntry->first; @@ -512,21 +577,21 @@ Sequence SwXFieldmarkParameters::getElementNames() } ::sal_Bool SwXFieldmarkParameters::hasByName(const OUString& aName) - throw (RuntimeException) + throw (uno::RuntimeException) { vos::OGuard aGuard(Application::GetSolarMutex()); IFieldmark::parameter_map_t* pParameters = getCoreParameters(); return (pParameters->find(aName) != pParameters->end()); } -Type SwXFieldmarkParameters::getElementType() - throw (RuntimeException) +uno::Type SwXFieldmarkParameters::getElementType() + throw (uno::RuntimeException) { return ::cppu::UnoType< ::cppu::UnoVoidType>::get(); } ::sal_Bool SwXFieldmarkParameters::hasElements() - throw (RuntimeException) + throw (uno::RuntimeException) { vos::OGuard aGuard(Application::GetSolarMutex()); return !getCoreParameters()->empty(); @@ -539,18 +604,14 @@ void SwXFieldmarkParameters::Modify(SfxPoolItem *pOld, SfxPoolItem *pNew) IFieldmark::parameter_map_t* SwXFieldmarkParameters::getCoreParameters() - throw (RuntimeException) + throw (uno::RuntimeException) { const IFieldmark* pFieldmark = dynamic_cast< const IFieldmark* >(GetRegisteredIn()); if(!pFieldmark) - throw RuntimeException(); + throw uno::RuntimeException(); return const_cast< IFieldmark* >(pFieldmark)->GetParameters(); } -SwXFieldmark::SwXFieldmark(bool _isReplacementObject, ::sw::mark::IMark* pBkm, SwDoc* pDc) - : SwXFieldmark_Base(pBkm, pDc) - , isReplacementObject(_isReplacementObject) -{ } void SwXFieldmark::attachToRange( const uno::Reference < text::XTextRange >& xTextRange ) throw(lang::IllegalArgumentException, uno::RuntimeException) @@ -565,7 +626,7 @@ void SwXFieldmark::attachToRange( const uno::Reference < text::XTextRange >& xTe vos::OGuard aGuard(Application::GetSolarMutex()); const IFieldmark *pBkm = dynamic_cast(GetBookmark()); if(!pBkm) - throw RuntimeException(); + throw uno::RuntimeException(); return pBkm->GetFieldname(); } @@ -573,18 +634,21 @@ void SwXFieldmark::setFieldType(const::rtl::OUString & fieldType) throw(uno::RuntimeException) { vos::OGuard aGuard(Application::GetSolarMutex()); - IFieldmark *pBkm = dynamic_cast(GetBookmark()); + IFieldmark *pBkm = const_cast( + dynamic_cast(GetBookmark())); if(!pBkm) - throw RuntimeException(); + throw uno::RuntimeException(); pBkm->SetFieldname(fieldType); } -Reference SwXFieldmark::getParameters() +uno::Reference SwXFieldmark::getParameters() throw (uno::RuntimeException) { vos::OGuard aGuard(Application::GetSolarMutex()); - IFieldmark *pBkm = dynamic_cast(GetBookmark()); + IFieldmark *pBkm = const_cast( + dynamic_cast(GetBookmark())); if(!pBkm) throw uno::RuntimeException(); - return Reference(new SwXFieldmarkParameters(pBkm)); + return uno::Reference(new SwXFieldmarkParameters(pBkm)); } + diff --git a/sw/source/ui/docvw/edtwin.cxx b/sw/source/ui/docvw/edtwin.cxx index e251db85da52..a1dc0432d35f 100644 --- a/sw/source/ui/docvw/edtwin.cxx +++ b/sw/source/ui/docvw/edtwin.cxx @@ -1083,11 +1083,13 @@ void SwEditWin::ChangeFly( BYTE nDir, BOOL bWeb ) rSh.StartAllAction(); if( bSet ) rSh.SetFlyFrmAttr( aSet ); - BOOL bSetPos = FLY_IN_CNTNT != eAnchorId; + BOOL bSetPos = (FLY_AS_CHAR != eAnchorId); if(bSetPos && bWeb) { - if(FLY_PAGE != eAnchorId) + if (FLY_AT_PAGE != eAnchorId) + { bSetPos = FALSE; + } else { bSetPos = (::GetHtmlMode(rView.GetDocShell()) & HTMLMODE_SOME_ABS_POS) ? @@ -4224,7 +4226,7 @@ void SwEditWin::MouseButtonUp(const MouseEvent& rMEvt) } } } - else // if ( SwContentAtPos::SW_INETATTR == aCntntAtPos.eCntntAtPos ) + else // if ( SwContentAtPos::SW_INETATTR == aCntntAtPos.eCntntAtPos ) { if ( bExecHyperlinks ) rSh.ClickToINetAttr( *(SwFmtINetFmt*)aCntntAtPos.aFnd.pAttr, nFilter ); -- cgit