1*efeef26fSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*efeef26fSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*efeef26fSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*efeef26fSAndrew Rist * distributed with this work for additional information 6*efeef26fSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*efeef26fSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*efeef26fSAndrew Rist * "License"); you may not use this file except in compliance 9*efeef26fSAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*efeef26fSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*efeef26fSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*efeef26fSAndrew Rist * software distributed under the License is distributed on an 15*efeef26fSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*efeef26fSAndrew Rist * KIND, either express or implied. See the License for the 17*efeef26fSAndrew Rist * specific language governing permissions and limitations 18*efeef26fSAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*efeef26fSAndrew Rist *************************************************************/ 21*efeef26fSAndrew Rist 22*efeef26fSAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_sw.hxx" 26cdf0e10cSrcweir 27cdf0e10cSrcweir 28cdf0e10cSrcweir 29cdf0e10cSrcweir #define _SVSTDARR_STRINGSDTOR 30cdf0e10cSrcweir #include <tools/resid.hxx> 31cdf0e10cSrcweir #include <sfx2/app.hxx> 32cdf0e10cSrcweir #include <svl/slstitm.hxx> 33cdf0e10cSrcweir #include <wrtsh.hxx> 34cdf0e10cSrcweir #include <swundo.hxx> // fuer Undo-Ids 35cdf0e10cSrcweir #include <IDocumentUndoRedo.hxx> 36cdf0e10cSrcweir #include <swdtflvr.hxx> 37cdf0e10cSrcweir #include <svtools/svtdata.hxx> 38cdf0e10cSrcweir #include <svtools/svtools.hrc> 39cdf0e10cSrcweir #include <svtools/svtdata.hxx> 40cdf0e10cSrcweir #include <wrtsh.hrc> 41cdf0e10cSrcweir #include <sfx2/sfx.hrc> 42cdf0e10cSrcweir 43cdf0e10cSrcweir 44cdf0e10cSrcweir // Undo beendet alle Modi. Falls eine Selektion durch das Undo entstanden 45cdf0e10cSrcweir // ist, muss die fuer die weiteren Aktionen beruecksichtigt werden. 46cdf0e10cSrcweir 47cdf0e10cSrcweir 48cdf0e10cSrcweir void SwWrtShell::Do( DoType eDoType, sal_uInt16 nCnt ) 49cdf0e10cSrcweir { 50cdf0e10cSrcweir // #105332# save current state of DoesUndo() 51cdf0e10cSrcweir sal_Bool bSaveDoesUndo = DoesUndo(); 52cdf0e10cSrcweir 53cdf0e10cSrcweir StartAllAction(); 54cdf0e10cSrcweir switch( eDoType ) 55cdf0e10cSrcweir { 56cdf0e10cSrcweir case UNDO: 57cdf0e10cSrcweir DoUndo(sal_False); // #i21739# 58cdf0e10cSrcweir // Modi zuruecksetzen 59cdf0e10cSrcweir EnterStdMode(); 60cdf0e10cSrcweir SwEditShell::Undo(nCnt); 61cdf0e10cSrcweir break; 62cdf0e10cSrcweir case REDO: 63cdf0e10cSrcweir DoUndo(sal_False); // #i21739# 64cdf0e10cSrcweir // Modi zuruecksetzen 65cdf0e10cSrcweir EnterStdMode(); 66cdf0e10cSrcweir SwEditShell::Redo( nCnt ); 67cdf0e10cSrcweir break; 68cdf0e10cSrcweir case REPEAT: 69cdf0e10cSrcweir // #i21739# do not touch undo flag here !!! 70cdf0e10cSrcweir SwEditShell::Repeat( nCnt ); 71cdf0e10cSrcweir break; 72cdf0e10cSrcweir } 73cdf0e10cSrcweir EndAllAction(); 74cdf0e10cSrcweir // #105332# restore undo state 75cdf0e10cSrcweir DoUndo(bSaveDoesUndo); 76cdf0e10cSrcweir 77cdf0e10cSrcweir sal_Bool bCreateXSelection = sal_False; 78cdf0e10cSrcweir const sal_Bool bFrmSelected = IsFrmSelected() || IsObjSelected(); 79cdf0e10cSrcweir if ( IsSelection() ) 80cdf0e10cSrcweir { 81cdf0e10cSrcweir if ( bFrmSelected ) 82cdf0e10cSrcweir UnSelectFrm(); 83cdf0e10cSrcweir 84cdf0e10cSrcweir // Funktionspointer fuer das Aufheben der Selektion setzen 85cdf0e10cSrcweir // bei Cursor setzen 86cdf0e10cSrcweir fnKillSel = &SwWrtShell::ResetSelect; 87cdf0e10cSrcweir fnSetCrsr = &SwWrtShell::SetCrsrKillSel; 88cdf0e10cSrcweir bCreateXSelection = sal_True; 89cdf0e10cSrcweir } 90cdf0e10cSrcweir else if ( bFrmSelected ) 91cdf0e10cSrcweir { 92cdf0e10cSrcweir EnterSelFrmMode(); 93cdf0e10cSrcweir bCreateXSelection = sal_True; 94cdf0e10cSrcweir } 95cdf0e10cSrcweir else if( (CNT_GRF | CNT_OLE ) & GetCntType() ) 96cdf0e10cSrcweir { 97cdf0e10cSrcweir SelectObj( GetCharRect().Pos() ); 98cdf0e10cSrcweir EnterSelFrmMode(); 99cdf0e10cSrcweir bCreateXSelection = sal_True; 100cdf0e10cSrcweir } 101cdf0e10cSrcweir 102cdf0e10cSrcweir if( bCreateXSelection ) 103cdf0e10cSrcweir SwTransferable::CreateSelection( *this ); 104cdf0e10cSrcweir 105cdf0e10cSrcweir // Bug 32918: nach loeschen der Numerierung bleibt die Obj. Leiste stehen 106cdf0e10cSrcweir // Warum wird hier nicht immer ein CallChgLink gerufen? 107cdf0e10cSrcweir CallChgLnk(); 108cdf0e10cSrcweir } 109cdf0e10cSrcweir 110cdf0e10cSrcweir 111cdf0e10cSrcweir String SwWrtShell::GetDoString( DoType eDoType ) const 112cdf0e10cSrcweir { 113cdf0e10cSrcweir ::rtl::OUString aUndoStr; 114cdf0e10cSrcweir sal_uInt16 nResStr = STR_UNDO; 115cdf0e10cSrcweir switch( eDoType ) 116cdf0e10cSrcweir { 117cdf0e10cSrcweir case UNDO: 118cdf0e10cSrcweir nResStr = STR_UNDO; 119cdf0e10cSrcweir GetLastUndoInfo(& aUndoStr, 0); 120cdf0e10cSrcweir break; 121cdf0e10cSrcweir case REDO: 122cdf0e10cSrcweir nResStr = STR_REDO; 123cdf0e10cSrcweir GetFirstRedoInfo(& aUndoStr); 124cdf0e10cSrcweir break; 125cdf0e10cSrcweir default:;//prevent warning 126cdf0e10cSrcweir } 127cdf0e10cSrcweir 128cdf0e10cSrcweir ::rtl::OUStringBuffer buf = ::rtl::OUStringBuffer( String( SvtResId( nResStr ) ) ); 129cdf0e10cSrcweir buf.append(aUndoStr); 130cdf0e10cSrcweir 131cdf0e10cSrcweir return buf.makeStringAndClear(); 132cdf0e10cSrcweir } 133cdf0e10cSrcweir 134cdf0e10cSrcweir sal_uInt16 SwWrtShell::GetDoStrings( DoType eDoType, SfxStringListItem& rStrs ) const 135cdf0e10cSrcweir { 136cdf0e10cSrcweir SwUndoComments_t comments; 137cdf0e10cSrcweir switch( eDoType ) 138cdf0e10cSrcweir { 139cdf0e10cSrcweir case UNDO: 140cdf0e10cSrcweir comments = GetIDocumentUndoRedo().GetUndoComments(); 141cdf0e10cSrcweir break; 142cdf0e10cSrcweir case REDO: 143cdf0e10cSrcweir comments = GetIDocumentUndoRedo().GetRedoComments(); 144cdf0e10cSrcweir break; 145cdf0e10cSrcweir default:;//prevent warning 146cdf0e10cSrcweir } 147cdf0e10cSrcweir 148cdf0e10cSrcweir ::rtl::OUStringBuffer buf; 149cdf0e10cSrcweir for (size_t i = 0; i < comments.size(); ++i) 150cdf0e10cSrcweir { 151cdf0e10cSrcweir OSL_ENSURE(comments[i].getLength(), "no Undo/Redo Text set"); 152cdf0e10cSrcweir buf.append(comments[i]); 153cdf0e10cSrcweir buf.append(sal_Unicode('\n')); 154cdf0e10cSrcweir } 155cdf0e10cSrcweir rStrs.SetString(buf.makeStringAndClear()); 156cdf0e10cSrcweir return static_cast<sal_uInt16>(comments.size()); 157cdf0e10cSrcweir } 158cdf0e10cSrcweir 159cdf0e10cSrcweir 160cdf0e10cSrcweir String SwWrtShell::GetRepeatString() const 161cdf0e10cSrcweir { 162cdf0e10cSrcweir ::rtl::OUString str; 163cdf0e10cSrcweir GetRepeatInfo(& str); 164cdf0e10cSrcweir 165cdf0e10cSrcweir if (str.getLength() == 0) 166cdf0e10cSrcweir { 167cdf0e10cSrcweir return str; 168cdf0e10cSrcweir } 169cdf0e10cSrcweir 170cdf0e10cSrcweir ::rtl::OUStringBuffer buf( String(SvtResId(STR_REPEAT)) ); 171cdf0e10cSrcweir buf.append(str); 172cdf0e10cSrcweir return buf.makeStringAndClear(); 173cdf0e10cSrcweir } 174cdf0e10cSrcweir 175cdf0e10cSrcweir 176