xref: /aoo41x/main/sw/source/ui/wrtsh/wrtundo.cxx (revision efeef26f)
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