diff options
Diffstat (limited to 'sw/source/core/crsr/bookmrk.cxx')
-rw-r--r-- | sw/source/core/crsr/bookmrk.cxx | 52 |
1 files changed, 38 insertions, 14 deletions
diff --git a/sw/source/core/crsr/bookmrk.cxx b/sw/source/core/crsr/bookmrk.cxx index 8586b911eb16..733fb9115915 100644 --- a/sw/source/core/crsr/bookmrk.cxx +++ b/sw/source/core/crsr/bookmrk.cxx @@ -1,3 +1,4 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /************************************************************************* * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -33,7 +34,6 @@ #include <IDocumentMarkAccess.hxx> #include <IDocumentUndoRedo.hxx> #include <doc.hxx> -#include <errhdl.hxx> #include <ndtxt.hxx> #include <pam.hxx> #include <swserv.hxx> @@ -84,17 +84,21 @@ namespace rStart.nNode.GetNode().GetTxtNode(); SwTxtNode const*const pEndTxtNode = rEnd.nNode.GetNode().GetTxtNode(); const sal_Unicode ch_start=pStartTxtNode->GetTxt().GetChar(rStart.nContent.GetIndex()); - const sal_Unicode ch_end=pEndTxtNode->GetTxt().GetChar(rEnd.nContent.GetIndex()-1); + xub_StrLen nEndPos = ( rEnd == rStart || rEnd.nContent.GetIndex() == 0 ) ? + rEnd.nContent.GetIndex() : rEnd.nContent.GetIndex() - 1; + const sal_Unicode ch_end=pEndTxtNode->GetTxt().GetChar( nEndPos ); SwPaM aStartPaM(rStart); SwPaM aEndPaM(rEnd); io_pDoc->GetIDocumentUndoRedo().StartUndo(UNDO_UI_REPLACE, NULL); - if(ch_start != aStartMark) + if( ( ch_start != aStartMark ) && ( aEndMark != CH_TXT_ATR_FORMELEMENT ) ) { io_pDoc->InsertString(aStartPaM, aStartMark); + rStart.nContent--; } - if ( aEndMark && ( ch_end != aEndMark ) && ( rStart != rEnd ) ) + if ( aEndMark && ( ch_end != aEndMark ) ) { io_pDoc->InsertString(aEndPaM, aEndMark); + rEnd.nContent++; } io_pDoc->GetIDocumentUndoRedo().EndUndo(UNDO_UI_REPLACE, NULL); }; @@ -118,19 +122,17 @@ namespace sw { namespace mark bool MarkBase::IsCoveringPosition(const SwPosition& rPos) const { - return GetMarkStart() <= rPos && rPos <= GetMarkEnd(); + return GetMarkStart() <= rPos && rPos < GetMarkEnd(); } void MarkBase::SetMarkPos(const SwPosition& rNewPos) { ::boost::scoped_ptr<SwPosition>(new SwPosition(rNewPos)).swap(m_pPos1); - //lcl_FixPosition(*m_pPos1); } void MarkBase::SetOtherMarkPos(const SwPosition& rNewPos) { ::boost::scoped_ptr<SwPosition>(new SwPosition(rNewPos)).swap(m_pPos2); - //lcl_FixPosition(*m_pPos2); } rtl::OUString MarkBase::ToString( ) const @@ -180,13 +182,13 @@ namespace sw { namespace mark : MarkBase(rPaM, our_sNamePrefix) { } - const ::rtl::OUString NavigatorReminder::our_sNamePrefix = ::rtl::OUString::createFromAscii("__NavigatorReminder__"); + const ::rtl::OUString NavigatorReminder::our_sNamePrefix(RTL_CONSTASCII_USTRINGPARAM("__NavigatorReminder__")); UnoMark::UnoMark(const SwPaM& aPaM) : MarkBase(aPaM, MarkBase::GenerateNewName(our_sNamePrefix)) { } - const ::rtl::OUString UnoMark::our_sNamePrefix = ::rtl::OUString::createFromAscii("__UnoMark__"); + const ::rtl::OUString UnoMark::our_sNamePrefix(RTL_CONSTASCII_USTRINGPARAM("__UnoMark__")); DdeBookmark::DdeBookmark(const SwPaM& aPaM) : MarkBase(aPaM, MarkBase::GenerateNewName(our_sNamePrefix)) @@ -198,7 +200,7 @@ namespace sw { namespace mark m_aRefObj = pObj; } - const ::rtl::OUString DdeBookmark::our_sNamePrefix = ::rtl::OUString::createFromAscii("__DdeLink__"); + const ::rtl::OUString DdeBookmark::our_sNamePrefix(RTL_CONSTASCII_USTRINGPARAM("__DdeLink__")); void DdeBookmark::DeregisterFromDoc(SwDoc* const pDoc) { @@ -308,7 +310,7 @@ namespace sw { namespace mark aPaM.InvalidatePaM(); } - const ::rtl::OUString Fieldmark::our_sNamePrefix = ::rtl::OUString::createFromAscii("__Fieldmark__"); + const ::rtl::OUString Fieldmark::our_sNamePrefix(RTL_CONSTASCII_USTRINGPARAM("__Fieldmark__")); TextFieldmark::TextFieldmark(const SwPaM& rPaM) : Fieldmark(rPaM) @@ -325,7 +327,7 @@ namespace sw { namespace mark void CheckboxFieldmark::InitDoc(SwDoc* const io_pDoc) { - lcl_AssureFieldMarksSet(this, io_pDoc, CH_TXT_ATR_FORMELEMENT, CH_TXT_ATR_FIELDEND); + lcl_AssureFieldMarksSet(this, io_pDoc, CH_TXT_ATR_FIELDSTART, CH_TXT_ATR_FORMELEMENT); // For some reason the end mark is moved from 1 by the Insert: we don't // want this for checkboxes @@ -333,16 +335,38 @@ namespace sw { namespace mark } void CheckboxFieldmark::SetChecked(bool checked) { - (*GetParameters())[::rtl::OUString::createFromAscii(ODF_FORMCHECKBOX_RESULT)] = makeAny(checked); + if ( IsChecked() != checked ) + { + (*GetParameters())[::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(ODF_FORMCHECKBOX_RESULT))] = makeAny(checked); + // mark document as modified + SwDoc *const pDoc( GetMarkPos().GetDoc() ); + if ( pDoc ) + pDoc->SetModified(); + } } bool CheckboxFieldmark::IsChecked() const { bool bResult = false; - parameter_map_t::const_iterator pResult = GetParameters()->find(::rtl::OUString::createFromAscii(ODF_FORMCHECKBOX_RESULT)); + parameter_map_t::const_iterator pResult = GetParameters()->find(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(ODF_FORMCHECKBOX_RESULT))); if(pResult != GetParameters()->end()) pResult->second >>= bResult; return bResult; } + rtl::OUString CheckboxFieldmark::toString( ) const + { + rtl::OUStringBuffer buf; + buf.appendAscii( "CheckboxFieldmark: ( Name, Type, [ Nd1, Id1 ], [ Nd2, Id2 ] ): ( " ); + buf.append( m_aName ).appendAscii( ", " ); + buf.append( GetFieldname() ).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( ); + } }} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |