xref: /trunk/main/sw/source/ui/wrtsh/wrtundo.cxx (revision cf6516809c57e1bb0a940545cca99cdad54d4ce2)
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 
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 }
174