blob: 1b1c423ed65fcbb65df5d94ea70cbab7305339ab [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sw.hxx"
#define _SVSTDARR_STRINGSDTOR
#include <tools/resid.hxx>
#include <sfx2/app.hxx>
#include <svl/slstitm.hxx>
#include <wrtsh.hxx>
#include <swundo.hxx> // fuer Undo-Ids
#include <IDocumentUndoRedo.hxx>
#include <swdtflvr.hxx>
#include <svtools/svtdata.hxx>
#include <svtools/svtools.hrc>
#include <svtools/svtdata.hxx>
#include <wrtsh.hrc>
#include <sfx2/sfx.hrc>
// Undo beendet alle Modi. Falls eine Selektion durch das Undo entstanden
// ist, muss die fuer die weiteren Aktionen beruecksichtigt werden.
void SwWrtShell::Do( DoType eDoType, sal_uInt16 nCnt )
{
// #105332# save current state of DoesUndo()
sal_Bool bSaveDoesUndo = DoesUndo();
StartAllAction();
switch( eDoType )
{
case UNDO:
DoUndo(sal_False); // #i21739#
// Modi zuruecksetzen
EnterStdMode();
SwEditShell::Undo(nCnt);
break;
case REDO:
DoUndo(sal_False); // #i21739#
// Modi zuruecksetzen
EnterStdMode();
SwEditShell::Redo( nCnt );
break;
case REPEAT:
// #i21739# do not touch undo flag here !!!
SwEditShell::Repeat( nCnt );
break;
}
EndAllAction();
// #105332# restore undo state
DoUndo(bSaveDoesUndo);
sal_Bool bCreateXSelection = sal_False;
const sal_Bool bFrmSelected = IsFrmSelected() || IsObjSelected();
if ( IsSelection() )
{
if ( bFrmSelected )
UnSelectFrm();
// Funktionspointer fuer das Aufheben der Selektion setzen
// bei Cursor setzen
fnKillSel = &SwWrtShell::ResetSelect;
fnSetCrsr = &SwWrtShell::SetCrsrKillSel;
bCreateXSelection = sal_True;
}
else if ( bFrmSelected )
{
EnterSelFrmMode();
bCreateXSelection = sal_True;
}
else if( (CNT_GRF | CNT_OLE ) & GetCntType() )
{
SelectObj( GetCharRect().Pos() );
EnterSelFrmMode();
bCreateXSelection = sal_True;
}
if( bCreateXSelection )
SwTransferable::CreateSelection( *this );
// Bug 32918: nach loeschen der Numerierung bleibt die Obj. Leiste stehen
// Warum wird hier nicht immer ein CallChgLink gerufen?
CallChgLnk();
}
String SwWrtShell::GetDoString( DoType eDoType ) const
{
::rtl::OUString aUndoStr;
sal_uInt16 nResStr = STR_UNDO;
switch( eDoType )
{
case UNDO:
nResStr = STR_UNDO;
GetLastUndoInfo(& aUndoStr, 0);
break;
case REDO:
nResStr = STR_REDO;
GetFirstRedoInfo(& aUndoStr);
break;
default:;//prevent warning
}
::rtl::OUStringBuffer buf = ::rtl::OUStringBuffer( String( SvtResId( nResStr ) ) );
buf.append(aUndoStr);
return buf.makeStringAndClear();
}
sal_uInt16 SwWrtShell::GetDoStrings( DoType eDoType, SfxStringListItem& rStrs ) const
{
SwUndoComments_t comments;
switch( eDoType )
{
case UNDO:
comments = GetIDocumentUndoRedo().GetUndoComments();
break;
case REDO:
comments = GetIDocumentUndoRedo().GetRedoComments();
break;
default:;//prevent warning
}
::rtl::OUStringBuffer buf;
for (size_t i = 0; i < comments.size(); ++i)
{
OSL_ENSURE(comments[i].getLength(), "no Undo/Redo Text set");
buf.append(comments[i]);
buf.append(sal_Unicode('\n'));
}
rStrs.SetString(buf.makeStringAndClear());
return static_cast<sal_uInt16>(comments.size());
}
String SwWrtShell::GetRepeatString() const
{
::rtl::OUString str;
GetRepeatInfo(& str);
if (str.getLength() == 0)
{
return str;
}
::rtl::OUStringBuffer buf( String(SvtResId(STR_REPEAT)) );
buf.append(str);
return buf.makeStringAndClear();
}