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
10*efeef26fSAndrew Rist *
11*efeef26fSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*efeef26fSAndrew Rist *
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.
19*efeef26fSAndrew Rist *
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
Do(DoType eDoType,sal_uInt16 nCnt)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
GetDoString(DoType eDoType) const111cdf0e10cSrcweir 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
GetDoStrings(DoType eDoType,SfxStringListItem & rStrs) const134cdf0e10cSrcweir 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
GetRepeatString() const160cdf0e10cSrcweir 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