xref: /aoo41x/main/sw/source/ui/wrtsh/wrtundo.cxx (revision cdf0e10c)
1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
29*cdf0e10cSrcweir #include "precompiled_sw.hxx"
30*cdf0e10cSrcweir 
31*cdf0e10cSrcweir 
32*cdf0e10cSrcweir 
33*cdf0e10cSrcweir #define _SVSTDARR_STRINGSDTOR
34*cdf0e10cSrcweir #include <tools/resid.hxx>
35*cdf0e10cSrcweir #include <sfx2/app.hxx>
36*cdf0e10cSrcweir #include <svl/slstitm.hxx>
37*cdf0e10cSrcweir #include <wrtsh.hxx>
38*cdf0e10cSrcweir #include <swundo.hxx>               	// fuer Undo-Ids
39*cdf0e10cSrcweir #include <IDocumentUndoRedo.hxx>
40*cdf0e10cSrcweir #include <swdtflvr.hxx>
41*cdf0e10cSrcweir #include <svtools/svtdata.hxx>
42*cdf0e10cSrcweir #include <svtools/svtools.hrc>
43*cdf0e10cSrcweir #include <svtools/svtdata.hxx>
44*cdf0e10cSrcweir #include <wrtsh.hrc>
45*cdf0e10cSrcweir #include <sfx2/sfx.hrc>
46*cdf0e10cSrcweir 
47*cdf0e10cSrcweir 
48*cdf0e10cSrcweir // Undo beendet alle Modi. Falls eine Selektion durch das Undo entstanden
49*cdf0e10cSrcweir // ist, muss die fuer die weiteren Aktionen beruecksichtigt werden.
50*cdf0e10cSrcweir 
51*cdf0e10cSrcweir 
52*cdf0e10cSrcweir void SwWrtShell::Do( DoType eDoType, sal_uInt16 nCnt )
53*cdf0e10cSrcweir {
54*cdf0e10cSrcweir     // #105332# save current state of DoesUndo()
55*cdf0e10cSrcweir     sal_Bool bSaveDoesUndo = DoesUndo();
56*cdf0e10cSrcweir 
57*cdf0e10cSrcweir 	StartAllAction();
58*cdf0e10cSrcweir  	switch( eDoType )
59*cdf0e10cSrcweir 	{
60*cdf0e10cSrcweir 		case UNDO:
61*cdf0e10cSrcweir             DoUndo(sal_False); // #i21739#
62*cdf0e10cSrcweir 			// Modi zuruecksetzen
63*cdf0e10cSrcweir 			EnterStdMode();
64*cdf0e10cSrcweir             SwEditShell::Undo(nCnt);
65*cdf0e10cSrcweir 			break;
66*cdf0e10cSrcweir 		case REDO:
67*cdf0e10cSrcweir             DoUndo(sal_False); // #i21739#
68*cdf0e10cSrcweir 			// Modi zuruecksetzen
69*cdf0e10cSrcweir 			EnterStdMode();
70*cdf0e10cSrcweir 			SwEditShell::Redo( nCnt );
71*cdf0e10cSrcweir 			break;
72*cdf0e10cSrcweir 		case REPEAT:
73*cdf0e10cSrcweir             // #i21739# do not touch undo flag here !!!
74*cdf0e10cSrcweir 			SwEditShell::Repeat( nCnt );
75*cdf0e10cSrcweir 			break;
76*cdf0e10cSrcweir 	}
77*cdf0e10cSrcweir 	EndAllAction();
78*cdf0e10cSrcweir     // #105332# restore undo state
79*cdf0e10cSrcweir     DoUndo(bSaveDoesUndo);
80*cdf0e10cSrcweir 
81*cdf0e10cSrcweir 	sal_Bool bCreateXSelection = sal_False;
82*cdf0e10cSrcweir 	const sal_Bool bFrmSelected = IsFrmSelected() || IsObjSelected();
83*cdf0e10cSrcweir 	if ( IsSelection() )
84*cdf0e10cSrcweir 	{
85*cdf0e10cSrcweir 		if ( bFrmSelected )
86*cdf0e10cSrcweir 			UnSelectFrm();
87*cdf0e10cSrcweir 
88*cdf0e10cSrcweir 		// Funktionspointer fuer das Aufheben der Selektion setzen
89*cdf0e10cSrcweir 		// bei Cursor setzen
90*cdf0e10cSrcweir 		fnKillSel = &SwWrtShell::ResetSelect;
91*cdf0e10cSrcweir 		fnSetCrsr = &SwWrtShell::SetCrsrKillSel;
92*cdf0e10cSrcweir 		bCreateXSelection = sal_True;
93*cdf0e10cSrcweir 	}
94*cdf0e10cSrcweir 	else if ( bFrmSelected )
95*cdf0e10cSrcweir 	{
96*cdf0e10cSrcweir 		EnterSelFrmMode();
97*cdf0e10cSrcweir 		bCreateXSelection = sal_True;
98*cdf0e10cSrcweir 	}
99*cdf0e10cSrcweir 	else if( (CNT_GRF | CNT_OLE ) & GetCntType() )
100*cdf0e10cSrcweir 	{
101*cdf0e10cSrcweir 		SelectObj( GetCharRect().Pos() );
102*cdf0e10cSrcweir 		EnterSelFrmMode();
103*cdf0e10cSrcweir 		bCreateXSelection = sal_True;
104*cdf0e10cSrcweir 	}
105*cdf0e10cSrcweir 
106*cdf0e10cSrcweir 	if( bCreateXSelection )
107*cdf0e10cSrcweir 		SwTransferable::CreateSelection( *this );
108*cdf0e10cSrcweir 
109*cdf0e10cSrcweir 	// Bug 32918: nach loeschen der Numerierung bleibt die Obj. Leiste stehen
110*cdf0e10cSrcweir 	//			Warum wird hier nicht immer ein CallChgLink gerufen?
111*cdf0e10cSrcweir 	CallChgLnk();
112*cdf0e10cSrcweir }
113*cdf0e10cSrcweir 
114*cdf0e10cSrcweir 
115*cdf0e10cSrcweir String SwWrtShell::GetDoString( DoType eDoType ) const
116*cdf0e10cSrcweir {
117*cdf0e10cSrcweir     ::rtl::OUString aUndoStr;
118*cdf0e10cSrcweir     sal_uInt16 nResStr = STR_UNDO;
119*cdf0e10cSrcweir 	switch( eDoType )
120*cdf0e10cSrcweir 	{
121*cdf0e10cSrcweir 	case UNDO:
122*cdf0e10cSrcweir 		nResStr = STR_UNDO;
123*cdf0e10cSrcweir         GetLastUndoInfo(& aUndoStr, 0);
124*cdf0e10cSrcweir 		break;
125*cdf0e10cSrcweir 	case REDO:
126*cdf0e10cSrcweir 		nResStr = STR_REDO;
127*cdf0e10cSrcweir         GetFirstRedoInfo(& aUndoStr);
128*cdf0e10cSrcweir 		break;
129*cdf0e10cSrcweir     default:;//prevent warning
130*cdf0e10cSrcweir 	}
131*cdf0e10cSrcweir 
132*cdf0e10cSrcweir     ::rtl::OUStringBuffer buf = ::rtl::OUStringBuffer( String( SvtResId( nResStr ) ) );
133*cdf0e10cSrcweir     buf.append(aUndoStr);
134*cdf0e10cSrcweir 
135*cdf0e10cSrcweir     return buf.makeStringAndClear();
136*cdf0e10cSrcweir }
137*cdf0e10cSrcweir 
138*cdf0e10cSrcweir sal_uInt16 SwWrtShell::GetDoStrings( DoType eDoType, SfxStringListItem& rStrs ) const
139*cdf0e10cSrcweir {
140*cdf0e10cSrcweir     SwUndoComments_t comments;
141*cdf0e10cSrcweir 	switch( eDoType )
142*cdf0e10cSrcweir 	{
143*cdf0e10cSrcweir 	case UNDO:
144*cdf0e10cSrcweir         comments = GetIDocumentUndoRedo().GetUndoComments();
145*cdf0e10cSrcweir 		break;
146*cdf0e10cSrcweir 	case REDO:
147*cdf0e10cSrcweir         comments = GetIDocumentUndoRedo().GetRedoComments();
148*cdf0e10cSrcweir 		break;
149*cdf0e10cSrcweir     default:;//prevent warning
150*cdf0e10cSrcweir 	}
151*cdf0e10cSrcweir 
152*cdf0e10cSrcweir     ::rtl::OUStringBuffer buf;
153*cdf0e10cSrcweir     for (size_t i = 0; i < comments.size(); ++i)
154*cdf0e10cSrcweir     {
155*cdf0e10cSrcweir         OSL_ENSURE(comments[i].getLength(), "no Undo/Redo Text set");
156*cdf0e10cSrcweir         buf.append(comments[i]);
157*cdf0e10cSrcweir         buf.append(sal_Unicode('\n'));
158*cdf0e10cSrcweir     }
159*cdf0e10cSrcweir     rStrs.SetString(buf.makeStringAndClear());
160*cdf0e10cSrcweir     return static_cast<sal_uInt16>(comments.size());
161*cdf0e10cSrcweir }
162*cdf0e10cSrcweir 
163*cdf0e10cSrcweir 
164*cdf0e10cSrcweir String SwWrtShell::GetRepeatString() const
165*cdf0e10cSrcweir {
166*cdf0e10cSrcweir     ::rtl::OUString str;
167*cdf0e10cSrcweir     GetRepeatInfo(& str);
168*cdf0e10cSrcweir 
169*cdf0e10cSrcweir     if (str.getLength() == 0)
170*cdf0e10cSrcweir     {
171*cdf0e10cSrcweir         return str;
172*cdf0e10cSrcweir     }
173*cdf0e10cSrcweir 
174*cdf0e10cSrcweir     ::rtl::OUStringBuffer buf( String(SvtResId(STR_REPEAT)) );
175*cdf0e10cSrcweir     buf.append(str);
176*cdf0e10cSrcweir     return buf.makeStringAndClear();
177*cdf0e10cSrcweir }
178*cdf0e10cSrcweir 
179*cdf0e10cSrcweir 
180