xref: /aoo4110/main/sw/source/ui/wrtsh/wrtsh1.cxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_sw.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XChild.hpp>
28*b1cdbd2cSJim Jagielski #include <com/sun/star/embed/XVisualObject.hpp>
29*b1cdbd2cSJim Jagielski #include <com/sun/star/embed/EmbedMisc.hpp>
30*b1cdbd2cSJim Jagielski #include <com/sun/star/embed/EmbedStates.hpp>
31*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertySet.hpp>
32*b1cdbd2cSJim Jagielski #include <com/sun/star/embed/NoVisualAreaSizeException.hpp>
33*b1cdbd2cSJim Jagielski #include <com/sun/star/chart2/XChartDocument.hpp>
34*b1cdbd2cSJim Jagielski #include <com/sun/star/util/XModifiable.hpp>
35*b1cdbd2cSJim Jagielski 
36*b1cdbd2cSJim Jagielski #include <math.h>	// prevent conflict between exception and std::exception
37*b1cdbd2cSJim Jagielski #include <hintids.hxx>
38*b1cdbd2cSJim Jagielski #include <svx/svdview.hxx>
39*b1cdbd2cSJim Jagielski #include <sot/factory.hxx>
40*b1cdbd2cSJim Jagielski #include <svl/itemiter.hxx>
41*b1cdbd2cSJim Jagielski #include <vcl/sound.hxx>
42*b1cdbd2cSJim Jagielski #include <tools/bigint.hxx>
43*b1cdbd2cSJim Jagielski #include <sot/storage.hxx>
44*b1cdbd2cSJim Jagielski #include <svtools/insdlg.hxx>
45*b1cdbd2cSJim Jagielski #include <sfx2/frmdescr.hxx>
46*b1cdbd2cSJim Jagielski #include <sfx2/ipclient.hxx>
47*b1cdbd2cSJim Jagielski #include <svtools/ehdl.hxx>
48*b1cdbd2cSJim Jagielski #include <svtools/soerr.hxx>
49*b1cdbd2cSJim Jagielski #include <tools/cachestr.hxx>
50*b1cdbd2cSJim Jagielski #include <unotools/moduleoptions.hxx>
51*b1cdbd2cSJim Jagielski #include <editeng/sizeitem.hxx>
52*b1cdbd2cSJim Jagielski #include <editeng/brkitem.hxx>
53*b1cdbd2cSJim Jagielski #include <editeng/svxacorr.hxx>
54*b1cdbd2cSJim Jagielski #include <vcl/graph.hxx>
55*b1cdbd2cSJim Jagielski #include <sfx2/printer.hxx>
56*b1cdbd2cSJim Jagielski #include <unotools/charclass.hxx>
57*b1cdbd2cSJim Jagielski #include <comphelper/storagehelper.hxx>
58*b1cdbd2cSJim Jagielski #include <svx/svxdlg.hxx>
59*b1cdbd2cSJim Jagielski #include <svx/extrusionbar.hxx>
60*b1cdbd2cSJim Jagielski #include <svx/fontworkbar.hxx>
61*b1cdbd2cSJim Jagielski #include <frmfmt.hxx>
62*b1cdbd2cSJim Jagielski #include <fmtftn.hxx>
63*b1cdbd2cSJim Jagielski #include <fmtpdsc.hxx>
64*b1cdbd2cSJim Jagielski #include <wdocsh.hxx>
65*b1cdbd2cSJim Jagielski #include <basesh.hxx>
66*b1cdbd2cSJim Jagielski #include <swmodule.hxx>
67*b1cdbd2cSJim Jagielski #include <wrtsh.hxx>
68*b1cdbd2cSJim Jagielski #include <view.hxx>
69*b1cdbd2cSJim Jagielski #include <uitool.hxx>
70*b1cdbd2cSJim Jagielski #include <cmdid.h>
71*b1cdbd2cSJim Jagielski #include <cfgitems.hxx>
72*b1cdbd2cSJim Jagielski #include <pagedesc.hxx>
73*b1cdbd2cSJim Jagielski #include <frmmgr.hxx>
74*b1cdbd2cSJim Jagielski #include <shellio.hxx>
75*b1cdbd2cSJim Jagielski #include <uinums.hxx>  // fuer Anwenden einer
76*b1cdbd2cSJim Jagielski #include <swundo.hxx>  // fuer Undo-Ids
77*b1cdbd2cSJim Jagielski #include <swcli.hxx>
78*b1cdbd2cSJim Jagielski #include <poolfmt.hxx>
79*b1cdbd2cSJim Jagielski #include <wview.hxx>
80*b1cdbd2cSJim Jagielski #include <edtwin.hxx>
81*b1cdbd2cSJim Jagielski #include <fmtcol.hxx>
82*b1cdbd2cSJim Jagielski #include <swtable.hxx>
83*b1cdbd2cSJim Jagielski #include <caption.hxx>
84*b1cdbd2cSJim Jagielski #include <viscrs.hxx>
85*b1cdbd2cSJim Jagielski #include <swdtflvr.hxx>
86*b1cdbd2cSJim Jagielski #include <crsskip.hxx>
87*b1cdbd2cSJim Jagielski #include <doc.hxx>
88*b1cdbd2cSJim Jagielski #include <wrtsh.hrc>
89*b1cdbd2cSJim Jagielski #include <SwStyleNameMapper.hxx>
90*b1cdbd2cSJim Jagielski #include <sfx2/request.hxx>
91*b1cdbd2cSJim Jagielski #include <paratr.hxx>
92*b1cdbd2cSJim Jagielski #include <ndtxt.hxx>
93*b1cdbd2cSJim Jagielski #include <editeng/acorrcfg.hxx>
94*b1cdbd2cSJim Jagielski #include <IMark.hxx>
95*b1cdbd2cSJim Jagielski #include <sfx2/bindings.hxx>
96*b1cdbd2cSJim Jagielski 
97*b1cdbd2cSJim Jagielski // -> #111827#
98*b1cdbd2cSJim Jagielski #include <SwRewriter.hxx>
99*b1cdbd2cSJim Jagielski #include <comcore.hrc>
100*b1cdbd2cSJim Jagielski // <- #111827#
101*b1cdbd2cSJim Jagielski 
102*b1cdbd2cSJim Jagielski #include <toolkit/helper/vclunohelper.hxx>
103*b1cdbd2cSJim Jagielski #include <sfx2/viewfrm.hxx>
104*b1cdbd2cSJim Jagielski 
105*b1cdbd2cSJim Jagielski #include <editeng/acorrcfg.hxx>
106*b1cdbd2cSJim Jagielski 
107*b1cdbd2cSJim Jagielski #include "PostItMgr.hxx"
108*b1cdbd2cSJim Jagielski #include <sfx2/msgpool.hxx>
109*b1cdbd2cSJim Jagielski 
110*b1cdbd2cSJim Jagielski using namespace sw::mark;
111*b1cdbd2cSJim Jagielski using namespace com::sun::star;
112*b1cdbd2cSJim Jagielski 
113*b1cdbd2cSJim Jagielski #define COMMON_INI_LIST \
114*b1cdbd2cSJim Jagielski 		fnDrag(&SwWrtShell::BeginDrag),\
115*b1cdbd2cSJim Jagielski         fnSetCrsr(&SwWrtShell::SetCrsr),\
116*b1cdbd2cSJim Jagielski 		fnEndDrag(&SwWrtShell::EndDrag),\
117*b1cdbd2cSJim Jagielski 		fnKillSel(&SwWrtShell::Ignore),\
118*b1cdbd2cSJim Jagielski         pModeStack(0), \
119*b1cdbd2cSJim Jagielski         ePageMove(MV_NO),\
120*b1cdbd2cSJim Jagielski         pCrsrStack(0),  \
121*b1cdbd2cSJim Jagielski         rView(rShell),\
122*b1cdbd2cSJim Jagielski         bDestOnStack(sal_False), \
123*b1cdbd2cSJim Jagielski         fnLeaveSelect(&SwWrtShell::SttLeaveSelect)
124*b1cdbd2cSJim Jagielski 
125*b1cdbd2cSJim Jagielski #define BITFLD_INI_LIST \
126*b1cdbd2cSJim Jagielski 		bClearMark = \
127*b1cdbd2cSJim Jagielski 		bIns = sal_True;\
128*b1cdbd2cSJim Jagielski 		bAddMode = \
129*b1cdbd2cSJim Jagielski 		bBlockMode = \
130*b1cdbd2cSJim Jagielski 		bExtMode = \
131*b1cdbd2cSJim Jagielski 		bInSelect = \
132*b1cdbd2cSJim Jagielski 		bCopy = \
133*b1cdbd2cSJim Jagielski 		bLayoutMode = \
134*b1cdbd2cSJim Jagielski 		bNoEdit = \
135*b1cdbd2cSJim Jagielski 		bSelWrd = \
136*b1cdbd2cSJim Jagielski 		bSelLn = \
137*b1cdbd2cSJim Jagielski 		bIsInClickToEdit = \
138*b1cdbd2cSJim Jagielski 		mbRetainSelection = sal_False;
139*b1cdbd2cSJim Jagielski 
140*b1cdbd2cSJim Jagielski 
lcl_IsAutoCorr()141*b1cdbd2cSJim Jagielski SvxAutoCorrect* lcl_IsAutoCorr()
142*b1cdbd2cSJim Jagielski {
143*b1cdbd2cSJim Jagielski    	SvxAutoCorrect* pACorr = SvxAutoCorrCfg::Get()->GetAutoCorrect();
144*b1cdbd2cSJim Jagielski     if( pACorr && !pACorr->IsAutoCorrFlag( CptlSttSntnc | CptlSttWrd |
145*b1cdbd2cSJim Jagielski 							AddNonBrkSpace | ChgOrdinalNumber |
146*b1cdbd2cSJim Jagielski                             ChgToEnEmDash | SetINetAttr | Autocorrect ))
147*b1cdbd2cSJim Jagielski 		pACorr = 0;
148*b1cdbd2cSJim Jagielski 	return pACorr;
149*b1cdbd2cSJim Jagielski }
150*b1cdbd2cSJim Jagielski 
NoEdit(sal_Bool bHideCrsr)151*b1cdbd2cSJim Jagielski void SwWrtShell::NoEdit(sal_Bool bHideCrsr)
152*b1cdbd2cSJim Jagielski {
153*b1cdbd2cSJim Jagielski 	if(bHideCrsr)
154*b1cdbd2cSJim Jagielski 		HideCrsr();
155*b1cdbd2cSJim Jagielski 	bNoEdit = sal_True;
156*b1cdbd2cSJim Jagielski }
157*b1cdbd2cSJim Jagielski 
158*b1cdbd2cSJim Jagielski 
159*b1cdbd2cSJim Jagielski 
Edit()160*b1cdbd2cSJim Jagielski void SwWrtShell::Edit()
161*b1cdbd2cSJim Jagielski {
162*b1cdbd2cSJim Jagielski 	if (CanInsert())
163*b1cdbd2cSJim Jagielski 	{
164*b1cdbd2cSJim Jagielski 		ShowCrsr();
165*b1cdbd2cSJim Jagielski 		bNoEdit = sal_False;
166*b1cdbd2cSJim Jagielski 	}
167*b1cdbd2cSJim Jagielski }
168*b1cdbd2cSJim Jagielski 
169*b1cdbd2cSJim Jagielski 
170*b1cdbd2cSJim Jagielski 
IsEndWrd()171*b1cdbd2cSJim Jagielski sal_Bool SwWrtShell::IsEndWrd()
172*b1cdbd2cSJim Jagielski {
173*b1cdbd2cSJim Jagielski 	MV_KONTEXT(this);
174*b1cdbd2cSJim Jagielski 	if(IsEndPara() && !IsSttPara())
175*b1cdbd2cSJim Jagielski 		return sal_True;
176*b1cdbd2cSJim Jagielski 
177*b1cdbd2cSJim Jagielski 	return IsEndWord();
178*b1cdbd2cSJim Jagielski }
179*b1cdbd2cSJim Jagielski 
180*b1cdbd2cSJim Jagielski 
181*b1cdbd2cSJim Jagielski /*------------------------------------------------------------------------
182*b1cdbd2cSJim Jagielski  Beschreibung:	Abfrage, ob Einfuegen moeglich ist; gfs. Beep
183*b1cdbd2cSJim Jagielski ------------------------------------------------------------------------*/
184*b1cdbd2cSJim Jagielski 
_CanInsert()185*b1cdbd2cSJim Jagielski bool SwWrtShell::_CanInsert()
186*b1cdbd2cSJim Jagielski {
187*b1cdbd2cSJim Jagielski     if(!CanInsert())
188*b1cdbd2cSJim Jagielski     {
189*b1cdbd2cSJim Jagielski         Sound::Beep();
190*b1cdbd2cSJim Jagielski         return false;
191*b1cdbd2cSJim Jagielski     }
192*b1cdbd2cSJim Jagielski 
193*b1cdbd2cSJim Jagielski     return true;
194*b1cdbd2cSJim Jagielski }
195*b1cdbd2cSJim Jagielski 
196*b1cdbd2cSJim Jagielski /*------------------------------------------------------------------------
197*b1cdbd2cSJim Jagielski  Beschreibung:	String einfuegen
198*b1cdbd2cSJim Jagielski ------------------------------------------------------------------------*/
199*b1cdbd2cSJim Jagielski 
InsertByWord(const String & rStr)200*b1cdbd2cSJim Jagielski void SwWrtShell::InsertByWord( const String & rStr)
201*b1cdbd2cSJim Jagielski {
202*b1cdbd2cSJim Jagielski 	if( rStr.Len() )
203*b1cdbd2cSJim Jagielski 	{
204*b1cdbd2cSJim Jagielski 		sal_Bool bDelim = GetAppCharClass().isLetterNumeric( rStr, 0 );
205*b1cdbd2cSJim Jagielski 		xub_StrLen nPos = 0, nStt = 0;
206*b1cdbd2cSJim Jagielski 		for( ; nPos < rStr.Len(); nPos++ )
207*b1cdbd2cSJim Jagielski    		{
208*b1cdbd2cSJim Jagielski 			sal_Bool bTmpDelim = GetAppCharClass().isLetterNumeric( rStr, nPos );
209*b1cdbd2cSJim Jagielski 			if( bTmpDelim != bDelim )
210*b1cdbd2cSJim Jagielski 			{
211*b1cdbd2cSJim Jagielski 				Insert( rStr.Copy( nStt, nPos - nStt ));
212*b1cdbd2cSJim Jagielski 				nStt = nPos;
213*b1cdbd2cSJim Jagielski 			}
214*b1cdbd2cSJim Jagielski 		}
215*b1cdbd2cSJim Jagielski 		if( nStt != nPos )
216*b1cdbd2cSJim Jagielski 			Insert( rStr.Copy( nStt, nPos - nStt ));
217*b1cdbd2cSJim Jagielski 	}
218*b1cdbd2cSJim Jagielski }
219*b1cdbd2cSJim Jagielski 
220*b1cdbd2cSJim Jagielski 
Insert(const String & rStr)221*b1cdbd2cSJim Jagielski void SwWrtShell::Insert( const String &rStr )
222*b1cdbd2cSJim Jagielski {
223*b1cdbd2cSJim Jagielski 	ResetCursorStack();
224*b1cdbd2cSJim Jagielski 	if( !_CanInsert() )
225*b1cdbd2cSJim Jagielski 		return;
226*b1cdbd2cSJim Jagielski 
227*b1cdbd2cSJim Jagielski 	sal_Bool bStarted = sal_False, bHasSel = HasSelection(),
228*b1cdbd2cSJim Jagielski 		bCallIns = bIns /*|| bHasSel*/;
229*b1cdbd2cSJim Jagielski     bool bDeleted = false;
230*b1cdbd2cSJim Jagielski 
231*b1cdbd2cSJim Jagielski     if( bHasSel || ( !bIns && SelectHiddenRange() ) )
232*b1cdbd2cSJim Jagielski 	{
233*b1cdbd2cSJim Jagielski 			// nur hier klammern, da das normale Insert schon an der
234*b1cdbd2cSJim Jagielski 			// Editshell geklammert ist
235*b1cdbd2cSJim Jagielski 		StartAllAction();
236*b1cdbd2cSJim Jagielski 
237*b1cdbd2cSJim Jagielski         // #111827#
238*b1cdbd2cSJim Jagielski         SwRewriter aRewriter;
239*b1cdbd2cSJim Jagielski 
240*b1cdbd2cSJim Jagielski         aRewriter.AddRule(UNDO_ARG1, GetCrsrDescr());
241*b1cdbd2cSJim Jagielski         aRewriter.AddRule(UNDO_ARG2, String(SW_RES(STR_YIELDS)));
242*b1cdbd2cSJim Jagielski         {
243*b1cdbd2cSJim Jagielski             String aTmpStr;
244*b1cdbd2cSJim Jagielski             aTmpStr += String(SW_RES(STR_START_QUOTE));
245*b1cdbd2cSJim Jagielski             aTmpStr += rStr;
246*b1cdbd2cSJim Jagielski             aTmpStr += String(SW_RES(STR_END_QUOTE));
247*b1cdbd2cSJim Jagielski 
248*b1cdbd2cSJim Jagielski             aRewriter.AddRule(UNDO_ARG3, rStr);
249*b1cdbd2cSJim Jagielski         }
250*b1cdbd2cSJim Jagielski 
251*b1cdbd2cSJim Jagielski 		StartUndo(UNDO_REPLACE, &aRewriter);
252*b1cdbd2cSJim Jagielski 		bStarted = sal_True;
253*b1cdbd2cSJim Jagielski         bDeleted = DelRight() != 0;
254*b1cdbd2cSJim Jagielski 	}
255*b1cdbd2cSJim Jagielski 
256*b1cdbd2cSJim Jagielski     /*
257*b1cdbd2cSJim Jagielski JP 21.01.98: Ueberschreiben ueberschreibt nur die Selektion, nicht das
258*b1cdbd2cSJim Jagielski 			naechste Zeichen.
259*b1cdbd2cSJim Jagielski 	if( bHasSel && !bIns && 1 < rStr.Len() )
260*b1cdbd2cSJim Jagielski 	{
261*b1cdbd2cSJim Jagielski 		// falls mehrere Zeichen anstehen, nur das erste einfuegen,
262*b1cdbd2cSJim Jagielski 		// der Rest muss dann aber Ueberschrieben werden.
263*b1cdbd2cSJim Jagielski 		SwEditShell::Insert( rStr.GetChar( 0 ) );
264*b1cdbd2cSJim Jagielski 		SwEditShell::Overwrite( rStr.Copy( 1 ) );
265*b1cdbd2cSJim Jagielski 	}
266*b1cdbd2cSJim Jagielski 	else
267*b1cdbd2cSJim Jagielski */
268*b1cdbd2cSJim Jagielski     bCallIns ?
269*b1cdbd2cSJim Jagielski         SwEditShell::Insert2( rStr, bDeleted ) : SwEditShell::Overwrite( rStr );
270*b1cdbd2cSJim Jagielski 
271*b1cdbd2cSJim Jagielski 
272*b1cdbd2cSJim Jagielski 	if( bStarted )
273*b1cdbd2cSJim Jagielski 	{
274*b1cdbd2cSJim Jagielski 		EndAllAction();
275*b1cdbd2cSJim Jagielski         EndUndo();
276*b1cdbd2cSJim Jagielski 	}
277*b1cdbd2cSJim Jagielski //    delete pChgFlg;
278*b1cdbd2cSJim Jagielski }
279*b1cdbd2cSJim Jagielski 
280*b1cdbd2cSJim Jagielski /* Begrenzung auf maximale Hoehe geht nicht, da die maximale Hoehe
281*b1cdbd2cSJim Jagielski  * des aktuellen Frames nicht erfragt werden kann. */
282*b1cdbd2cSJim Jagielski 
283*b1cdbd2cSJim Jagielski 
284*b1cdbd2cSJim Jagielski 
Insert(const String & rPath,const String & rFilter,const Graphic & rGrf,SwFlyFrmAttrMgr * pFrmMgr,sal_Bool bRule)285*b1cdbd2cSJim Jagielski void SwWrtShell::Insert( const String &rPath, const String &rFilter,
286*b1cdbd2cSJim Jagielski 						 const Graphic &rGrf, SwFlyFrmAttrMgr *pFrmMgr,
287*b1cdbd2cSJim Jagielski 						 sal_Bool bRule )
288*b1cdbd2cSJim Jagielski {
289*b1cdbd2cSJim Jagielski 	ResetCursorStack();
290*b1cdbd2cSJim Jagielski 	if ( !_CanInsert() )
291*b1cdbd2cSJim Jagielski 		return;
292*b1cdbd2cSJim Jagielski 
293*b1cdbd2cSJim Jagielski 	StartAllAction();
294*b1cdbd2cSJim Jagielski 
295*b1cdbd2cSJim Jagielski     SwRewriter aRewriter;
296*b1cdbd2cSJim Jagielski     aRewriter.AddRule(UNDO_ARG1, SW_RES(STR_GRAPHIC));
297*b1cdbd2cSJim Jagielski 
298*b1cdbd2cSJim Jagielski 	StartUndo(UNDO_INSERT, &aRewriter);
299*b1cdbd2cSJim Jagielski 
300*b1cdbd2cSJim Jagielski 	if ( HasSelection() )
301*b1cdbd2cSJim Jagielski 		DelRight();
302*b1cdbd2cSJim Jagielski 		// eingefuegte Grafik in eigenen Absatz, falls am Ende
303*b1cdbd2cSJim Jagielski 		// eines nichtleeren Absatzes
304*b1cdbd2cSJim Jagielski 	//For i120928,avoid to split node
305*b1cdbd2cSJim Jagielski 	//if ( IsEndPara() && !IsSttPara() )
306*b1cdbd2cSJim Jagielski 	//	SwFEShell::SplitNode();
307*b1cdbd2cSJim Jagielski 
308*b1cdbd2cSJim Jagielski 	EnterSelFrmMode();
309*b1cdbd2cSJim Jagielski 
310*b1cdbd2cSJim Jagielski 	sal_Bool bSetGrfSize = sal_True;
311*b1cdbd2cSJim Jagielski 	sal_Bool bOwnMgr	 = sal_False;
312*b1cdbd2cSJim Jagielski 
313*b1cdbd2cSJim Jagielski 	if ( !pFrmMgr )
314*b1cdbd2cSJim Jagielski 	{
315*b1cdbd2cSJim Jagielski 		bOwnMgr = sal_True;
316*b1cdbd2cSJim Jagielski 		pFrmMgr = new SwFlyFrmAttrMgr( sal_True, this, FRMMGR_TYPE_GRF );
317*b1cdbd2cSJim Jagielski 
318*b1cdbd2cSJim Jagielski 		// VORSICHT
319*b1cdbd2cSJim Jagielski 		// GetAttrSet nimmt einen Abgleich vor
320*b1cdbd2cSJim Jagielski 		// Beim Einfuegen ist eine SwFrmSize vorhanden wegen der
321*b1cdbd2cSJim Jagielski 		// DEF-Rahmengroesse
322*b1cdbd2cSJim Jagielski 		// Diese muss fuer die optimale Groesse explizit entfernt werden
323*b1cdbd2cSJim Jagielski 		pFrmMgr->DelAttr(RES_FRM_SIZE);
324*b1cdbd2cSJim Jagielski 	}
325*b1cdbd2cSJim Jagielski 	else
326*b1cdbd2cSJim Jagielski 	{
327*b1cdbd2cSJim Jagielski 		Size aSz( pFrmMgr->GetSize() );
328*b1cdbd2cSJim Jagielski 		if ( !aSz.Width() || !aSz.Height() )
329*b1cdbd2cSJim Jagielski 		{
330*b1cdbd2cSJim Jagielski 			aSz.Width() = aSz.Height() = 567;
331*b1cdbd2cSJim Jagielski 			pFrmMgr->SetSize( aSz );
332*b1cdbd2cSJim Jagielski 		}
333*b1cdbd2cSJim Jagielski 		else if ( aSz.Width() != DFLT_WIDTH && aSz.Height() != DFLT_HEIGHT )
334*b1cdbd2cSJim Jagielski 			bSetGrfSize = sal_False;
335*b1cdbd2cSJim Jagielski 
336*b1cdbd2cSJim Jagielski         pFrmMgr->SetHeightSizeType(ATT_FIX_SIZE);
337*b1cdbd2cSJim Jagielski 
338*b1cdbd2cSJim Jagielski 	}
339*b1cdbd2cSJim Jagielski 
340*b1cdbd2cSJim Jagielski 	// Einfuegen der Grafik
341*b1cdbd2cSJim Jagielski 	SwFEShell::Insert(rPath, rFilter, &rGrf, &pFrmMgr->GetAttrSet());
342*b1cdbd2cSJim Jagielski 	if ( bOwnMgr )
343*b1cdbd2cSJim Jagielski 		pFrmMgr->UpdateAttrMgr();
344*b1cdbd2cSJim Jagielski 
345*b1cdbd2cSJim Jagielski 	if( bSetGrfSize && !bRule )
346*b1cdbd2cSJim Jagielski 	{
347*b1cdbd2cSJim Jagielski 		Size aGrfSize, aBound = GetGraphicDefaultSize();
348*b1cdbd2cSJim Jagielski 		GetGrfSize( aGrfSize );
349*b1cdbd2cSJim Jagielski 
350*b1cdbd2cSJim Jagielski 		//Die GrafikSize noch um die Randattribute vergroessern, denn die
351*b1cdbd2cSJim Jagielski 		//Zaehlen beim Rahmen mit.
352*b1cdbd2cSJim Jagielski 		aGrfSize.Width() += pFrmMgr->CalcWidthBorder();
353*b1cdbd2cSJim Jagielski 		aGrfSize.Height()+= pFrmMgr->CalcHeightBorder();
354*b1cdbd2cSJim Jagielski 
355*b1cdbd2cSJim Jagielski 		const BigInt aTempWidth( aGrfSize.Width() );
356*b1cdbd2cSJim Jagielski 		const BigInt aTempHeight( aGrfSize.Height());
357*b1cdbd2cSJim Jagielski 
358*b1cdbd2cSJim Jagielski 		// ggf. Breite anpassen, Hoehe dann proportional verkleinern
359*b1cdbd2cSJim Jagielski 		if( aGrfSize.Width() > aBound.Width() )
360*b1cdbd2cSJim Jagielski 		{
361*b1cdbd2cSJim Jagielski 			aGrfSize.Width()  = aBound.Width();
362*b1cdbd2cSJim Jagielski 			aGrfSize.Height() = ((BigInt)aBound.Width()) * aTempHeight / aTempWidth;
363*b1cdbd2cSJim Jagielski 		}
364*b1cdbd2cSJim Jagielski 		// ggf. Hoehe anpassen, Breite dann proportional verkleinern
365*b1cdbd2cSJim Jagielski 		if( aGrfSize.Height() > aBound.Height() )
366*b1cdbd2cSJim Jagielski 		{
367*b1cdbd2cSJim Jagielski 			aGrfSize.Height() = aBound.Height();
368*b1cdbd2cSJim Jagielski 			aGrfSize.Width() =  ((BigInt)aBound.Height()) * aTempWidth / aTempHeight;
369*b1cdbd2cSJim Jagielski 		}
370*b1cdbd2cSJim Jagielski 		pFrmMgr->SetSize( aGrfSize );
371*b1cdbd2cSJim Jagielski 		pFrmMgr->UpdateFlyFrm();
372*b1cdbd2cSJim Jagielski 	}
373*b1cdbd2cSJim Jagielski 	if ( bOwnMgr )
374*b1cdbd2cSJim Jagielski 		delete pFrmMgr;
375*b1cdbd2cSJim Jagielski 
376*b1cdbd2cSJim Jagielski     EndUndo();
377*b1cdbd2cSJim Jagielski 	EndAllAction();
378*b1cdbd2cSJim Jagielski }
379*b1cdbd2cSJim Jagielski 
380*b1cdbd2cSJim Jagielski 
381*b1cdbd2cSJim Jagielski /*------------------------------------------------------------------------
382*b1cdbd2cSJim Jagielski    Beschreibung: Fuegt ein OLE-Objekt in die CORE ein.
383*b1cdbd2cSJim Jagielski 				 Wenn kein Object uebergeben wird, so wird eins erzeugt.
384*b1cdbd2cSJim Jagielski ------------------------------------------------------------------------*/
385*b1cdbd2cSJim Jagielski 
386*b1cdbd2cSJim Jagielski 
InsertObject(const svt::EmbeddedObjectRef & xRef,SvGlobalName * pName,sal_Bool bActivate,sal_uInt16 nSlotId)387*b1cdbd2cSJim Jagielski void SwWrtShell::InsertObject( const svt::EmbeddedObjectRef& xRef, SvGlobalName *pName,
388*b1cdbd2cSJim Jagielski                             sal_Bool bActivate, sal_uInt16 nSlotId )
389*b1cdbd2cSJim Jagielski {
390*b1cdbd2cSJim Jagielski 	ResetCursorStack();
391*b1cdbd2cSJim Jagielski 	if( !_CanInsert() )
392*b1cdbd2cSJim Jagielski 		return;
393*b1cdbd2cSJim Jagielski 
394*b1cdbd2cSJim Jagielski     if( !xRef.is() )
395*b1cdbd2cSJim Jagielski 	{
396*b1cdbd2cSJim Jagielski         // temporary storage
397*b1cdbd2cSJim Jagielski         svt::EmbeddedObjectRef xObj;
398*b1cdbd2cSJim Jagielski         uno::Reference < embed::XStorage > xStor = comphelper::OStorageHelper::GetTemporaryStorage();
399*b1cdbd2cSJim Jagielski 		sal_Bool bDoVerb = sal_True;
400*b1cdbd2cSJim Jagielski 		if ( pName )
401*b1cdbd2cSJim Jagielski 		{
402*b1cdbd2cSJim Jagielski             comphelper::EmbeddedObjectContainer aCnt( xStor );
403*b1cdbd2cSJim Jagielski             ::rtl::OUString aName;
404*b1cdbd2cSJim Jagielski             // TODO/LATER: get aspect?
405*b1cdbd2cSJim Jagielski             xObj.Assign( aCnt.CreateEmbeddedObject( pName->GetByteSequence(), aName ), embed::Aspects::MSOLE_CONTENT );
406*b1cdbd2cSJim Jagielski 		}
407*b1cdbd2cSJim Jagielski 		else
408*b1cdbd2cSJim Jagielski 		{
409*b1cdbd2cSJim Jagielski             SvObjectServerList aServerList;
410*b1cdbd2cSJim Jagielski 			switch (nSlotId)
411*b1cdbd2cSJim Jagielski 			{
412*b1cdbd2cSJim Jagielski 				case SID_INSERT_OBJECT:
413*b1cdbd2cSJim Jagielski 				{
414*b1cdbd2cSJim Jagielski                     aServerList.FillInsertObjects();
415*b1cdbd2cSJim Jagielski                     aServerList.Remove( SwDocShell::Factory().GetClassId() );
416*b1cdbd2cSJim Jagielski                     // Intentionally no break!
417*b1cdbd2cSJim Jagielski 				}
418*b1cdbd2cSJim Jagielski 
419*b1cdbd2cSJim Jagielski                 // TODO/LATER: recording! Convert properties to items
420*b1cdbd2cSJim Jagielski                 case SID_INSERT_PLUGIN:
421*b1cdbd2cSJim Jagielski                 case SID_INSERT_FLOATINGFRAME:
422*b1cdbd2cSJim Jagielski                 {
423*b1cdbd2cSJim Jagielski                     SfxSlotPool* pSlotPool = SW_MOD()->GetSlotPool();
424*b1cdbd2cSJim Jagielski                     const SfxSlot* pSlot = pSlotPool->GetSlot(nSlotId);
425*b1cdbd2cSJim Jagielski                     rtl::OString aCmd(".uno:");
426*b1cdbd2cSJim Jagielski                     aCmd += pSlot->GetUnoName();
427*b1cdbd2cSJim Jagielski                     SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
428*b1cdbd2cSJim Jagielski                     SfxAbstractInsertObjectDialog* pDlg =
429*b1cdbd2cSJim Jagielski                             pFact->CreateInsertObjectDialog( GetWin(), rtl::OStringToOUString( aCmd, RTL_TEXTENCODING_UTF8 ), xStor, &aServerList );
430*b1cdbd2cSJim Jagielski                     if ( pDlg )
431*b1cdbd2cSJim Jagielski                     {
432*b1cdbd2cSJim Jagielski                         pDlg->Execute();
433*b1cdbd2cSJim Jagielski                         bDoVerb = pDlg->IsCreateNew();
434*b1cdbd2cSJim Jagielski 						::rtl::OUString aIconMediaType;
435*b1cdbd2cSJim Jagielski 						uno::Reference< io::XInputStream > xIconMetaFile = pDlg->GetIconIfIconified( &aIconMediaType );
436*b1cdbd2cSJim Jagielski                         xObj.Assign( pDlg->GetObject(),
437*b1cdbd2cSJim Jagielski 									 xIconMetaFile.is() ? embed::Aspects::MSOLE_ICON : embed::Aspects::MSOLE_CONTENT );
438*b1cdbd2cSJim Jagielski 						if ( xIconMetaFile.is() )
439*b1cdbd2cSJim Jagielski 							xObj.SetGraphicStream( xIconMetaFile, aIconMediaType );
440*b1cdbd2cSJim Jagielski 
441*b1cdbd2cSJim Jagielski                         DELETEZ( pDlg );
442*b1cdbd2cSJim Jagielski                     }
443*b1cdbd2cSJim Jagielski 
444*b1cdbd2cSJim Jagielski                     break;
445*b1cdbd2cSJim Jagielski                 }
446*b1cdbd2cSJim Jagielski 
447*b1cdbd2cSJim Jagielski 				default:
448*b1cdbd2cSJim Jagielski 					break;
449*b1cdbd2cSJim Jagielski 			}
450*b1cdbd2cSJim Jagielski 		}
451*b1cdbd2cSJim Jagielski 
452*b1cdbd2cSJim Jagielski         if ( xObj.is() )
453*b1cdbd2cSJim Jagielski 		{
454*b1cdbd2cSJim Jagielski             if( InsertOleObject( xObj ) && bActivate && bDoVerb )
455*b1cdbd2cSJim Jagielski 			{
456*b1cdbd2cSJim Jagielski                 SfxInPlaceClient* pClient = GetView().FindIPClient( xObj.GetObject(), &GetView().GetEditWin() );
457*b1cdbd2cSJim Jagielski                 if ( !pClient )
458*b1cdbd2cSJim Jagielski 				{
459*b1cdbd2cSJim Jagielski                     pClient = new SwOleClient( &GetView(), &GetView().GetEditWin(), xObj );
460*b1cdbd2cSJim Jagielski 					SetCheckForOLEInCaption( sal_True );
461*b1cdbd2cSJim Jagielski 				}
462*b1cdbd2cSJim Jagielski 
463*b1cdbd2cSJim Jagielski 				if ( xObj.GetViewAspect() == embed::Aspects::MSOLE_ICON )
464*b1cdbd2cSJim Jagielski 				{
465*b1cdbd2cSJim Jagielski 					SwRect aArea = GetAnyCurRect( RECT_FLY_PRT_EMBEDDED, 0, xObj.GetObject() );
466*b1cdbd2cSJim Jagielski 					aArea.Pos() += GetAnyCurRect( RECT_FLY_EMBEDDED, 0, xObj.GetObject() ).Pos();
467*b1cdbd2cSJim Jagielski 					MapMode aMapMode( MAP_TWIP );
468*b1cdbd2cSJim Jagielski 					Size aSize = xObj.GetSize( &aMapMode );
469*b1cdbd2cSJim Jagielski 					aArea.Width( aSize.Width() );
470*b1cdbd2cSJim Jagielski 					aArea.Height( aSize.Height() );
471*b1cdbd2cSJim Jagielski 					RequestObjectResize( aArea, xObj.GetObject() );
472*b1cdbd2cSJim Jagielski 				}
473*b1cdbd2cSJim Jagielski 				else
474*b1cdbd2cSJim Jagielski                 	CalcAndSetScale( xObj );
475*b1cdbd2cSJim Jagielski 
476*b1cdbd2cSJim Jagielski                 //#50270# Error brauchen wir nicht handeln, das erledigt das
477*b1cdbd2cSJim Jagielski                 //DoVerb in der SfxViewShell
478*b1cdbd2cSJim Jagielski                 pClient->DoVerb( SVVERB_SHOW );
479*b1cdbd2cSJim Jagielski 
480*b1cdbd2cSJim Jagielski                 // TODO/LATER: set document name - should be done in Client
481*b1cdbd2cSJim Jagielski                 //if ( !ERRCODE_TOERROR( nErr ) )
482*b1cdbd2cSJim Jagielski                 //    xIPObj->SetDocumentName( GetView().GetDocShell()->GetTitle() );
483*b1cdbd2cSJim Jagielski 			}
484*b1cdbd2cSJim Jagielski 		}
485*b1cdbd2cSJim Jagielski 	}
486*b1cdbd2cSJim Jagielski 	else
487*b1cdbd2cSJim Jagielski 	{
488*b1cdbd2cSJim Jagielski 		if( HasSelection() )
489*b1cdbd2cSJim Jagielski 			DelRight();
490*b1cdbd2cSJim Jagielski         InsertOleObject( xRef );
491*b1cdbd2cSJim Jagielski 	}
492*b1cdbd2cSJim Jagielski }
493*b1cdbd2cSJim Jagielski 
494*b1cdbd2cSJim Jagielski /*------------------------------------------------------------------------
495*b1cdbd2cSJim Jagielski  Beschreibung:	 Object in die Core einfuegen.
496*b1cdbd2cSJim Jagielski 				 Vom ClipBoard oder Insert
497*b1cdbd2cSJim Jagielski ------------------------------------------------------------------------*/
498*b1cdbd2cSJim Jagielski 
InsertOleObject(const svt::EmbeddedObjectRef & xRef,SwFlyFrmFmt ** pFlyFrmFmt)499*b1cdbd2cSJim Jagielski sal_Bool SwWrtShell::InsertOleObject( const svt::EmbeddedObjectRef& xRef, SwFlyFrmFmt **pFlyFrmFmt )
500*b1cdbd2cSJim Jagielski {
501*b1cdbd2cSJim Jagielski     ResetCursorStack();
502*b1cdbd2cSJim Jagielski 	StartAllAction();
503*b1cdbd2cSJim Jagielski 
504*b1cdbd2cSJim Jagielski 	StartUndo(UNDO_INSERT);
505*b1cdbd2cSJim Jagielski 
506*b1cdbd2cSJim Jagielski 	//Some differences between StarMath and any other objects:
507*b1cdbd2cSJim Jagielski 	//1. Selections should be deleted. For StarMath the Text should be
508*b1cdbd2cSJim Jagielski 	//   passed to the Object
509*b1cdbd2cSJim Jagielski 	//2. If the cursor is at the end of an non empty paragraph a paragraph
510*b1cdbd2cSJim Jagielski 	//   break should be insertet. StarMath objects are character bound and
511*b1cdbd2cSJim Jagielski 	//   no break should be inserted.
512*b1cdbd2cSJim Jagielski 	//3. If an selektion is passed to a StarMath object, this object should
513*b1cdbd2cSJim Jagielski 	//   not be activated. sal_False should be returned then.
514*b1cdbd2cSJim Jagielski     sal_Bool bStarMath = sal_True;
515*b1cdbd2cSJim Jagielski     sal_Bool bActivate = sal_True;
516*b1cdbd2cSJim Jagielski 
517*b1cdbd2cSJim Jagielski 	// set parent to get correct VisArea(in case of object needing parent printer)
518*b1cdbd2cSJim Jagielski 	uno::Reference < container::XChild > xChild( xRef.GetObject(), uno::UNO_QUERY );
519*b1cdbd2cSJim Jagielski 	if ( xChild.is() )
520*b1cdbd2cSJim Jagielski 		xChild->setParent( pDoc->GetDocShell()->GetModel() );
521*b1cdbd2cSJim Jagielski 
522*b1cdbd2cSJim Jagielski 	SvGlobalName aCLSID( xRef->getClassID() );
523*b1cdbd2cSJim Jagielski 	bStarMath = ( SotExchange::IsMath( aCLSID ) != 0 );
524*b1cdbd2cSJim Jagielski 	if( IsSelection() )
525*b1cdbd2cSJim Jagielski 	{
526*b1cdbd2cSJim Jagielski 		if( bStarMath )
527*b1cdbd2cSJim Jagielski 		{
528*b1cdbd2cSJim Jagielski 			String aMathData;
529*b1cdbd2cSJim Jagielski 			GetSelectedText( aMathData, GETSELTXT_PARABRK_TO_ONLYCR );
530*b1cdbd2cSJim Jagielski 
531*b1cdbd2cSJim Jagielski 			if( aMathData.Len() && svt::EmbeddedObjectRef::TryRunningState( xRef.GetObject() ) )
532*b1cdbd2cSJim Jagielski 			{
533*b1cdbd2cSJim Jagielski 				uno::Reference < beans::XPropertySet > xSet( xRef->getComponent(), uno::UNO_QUERY );
534*b1cdbd2cSJim Jagielski 				if ( xSet.is() )
535*b1cdbd2cSJim Jagielski 				{
536*b1cdbd2cSJim Jagielski 					try
537*b1cdbd2cSJim Jagielski 					{
538*b1cdbd2cSJim Jagielski 						xSet->setPropertyValue( ::rtl::OUString::createFromAscii("Formula"), uno::makeAny( ::rtl::OUString( aMathData ) ) );
539*b1cdbd2cSJim Jagielski                         bActivate = sal_False;
540*b1cdbd2cSJim Jagielski 					}
541*b1cdbd2cSJim Jagielski 					catch ( uno::Exception& )
542*b1cdbd2cSJim Jagielski 					{
543*b1cdbd2cSJim Jagielski 					}
544*b1cdbd2cSJim Jagielski 				}
545*b1cdbd2cSJim Jagielski 			}
546*b1cdbd2cSJim Jagielski 		}
547*b1cdbd2cSJim Jagielski 		DelRight();
548*b1cdbd2cSJim Jagielski 	}
549*b1cdbd2cSJim Jagielski 
550*b1cdbd2cSJim Jagielski 	if ( !bStarMath )
551*b1cdbd2cSJim Jagielski 		SwFEShell::SplitNode( sal_False, sal_False );
552*b1cdbd2cSJim Jagielski 
553*b1cdbd2cSJim Jagielski 	EnterSelFrmMode();
554*b1cdbd2cSJim Jagielski 
555*b1cdbd2cSJim Jagielski 	SwFlyFrmAttrMgr aFrmMgr( sal_True, this, FRMMGR_TYPE_OLE );
556*b1cdbd2cSJim Jagielski 	aFrmMgr.SetHeightSizeType(ATT_FIX_SIZE);
557*b1cdbd2cSJim Jagielski 
558*b1cdbd2cSJim Jagielski 	SwRect aBound;
559*b1cdbd2cSJim Jagielski 	CalcBoundRect( aBound, aFrmMgr.GetAnchor() );
560*b1cdbd2cSJim Jagielski 
561*b1cdbd2cSJim Jagielski 	//The Size should be suggested by the OLE server
562*b1cdbd2cSJim Jagielski 	MapMode aMapMode( MAP_TWIP );
563*b1cdbd2cSJim Jagielski 	Size aSz = xRef.GetSize( &aMapMode );
564*b1cdbd2cSJim Jagielski 
565*b1cdbd2cSJim Jagielski 	//Object size can be limited
566*b1cdbd2cSJim Jagielski 	if ( aSz.Width() > aBound.Width() )
567*b1cdbd2cSJim Jagielski 	{
568*b1cdbd2cSJim Jagielski 		//Immer proportional begrenzen.
569*b1cdbd2cSJim Jagielski 		aSz.Height() = aSz.Height() * aBound.Width() / aSz.Width();
570*b1cdbd2cSJim Jagielski 		aSz.Width() = aBound.Width();
571*b1cdbd2cSJim Jagielski 	}
572*b1cdbd2cSJim Jagielski 	aFrmMgr.SetSize( aSz );
573*b1cdbd2cSJim Jagielski     SwFlyFrmFmt *pFmt = SwFEShell::InsertObject( xRef, &aFrmMgr.GetAttrSet() );
574*b1cdbd2cSJim Jagielski 
575*b1cdbd2cSJim Jagielski     // --> #i972#
576*b1cdbd2cSJim Jagielski     if ( bStarMath && pDoc->get( IDocumentSettingAccess::MATH_BASELINE_ALIGNMENT ) )
577*b1cdbd2cSJim Jagielski         AlignFormulaToBaseline( xRef.GetObject() );
578*b1cdbd2cSJim Jagielski     // <--
579*b1cdbd2cSJim Jagielski 
580*b1cdbd2cSJim Jagielski     if (pFlyFrmFmt)
581*b1cdbd2cSJim Jagielski         *pFlyFrmFmt = pFmt;
582*b1cdbd2cSJim Jagielski 
583*b1cdbd2cSJim Jagielski     if ( SotExchange::IsChart( aCLSID ) )
584*b1cdbd2cSJim Jagielski     {
585*b1cdbd2cSJim Jagielski         uno::Reference< embed::XEmbeddedObject > xEmbeddedObj( xRef.GetObject(), uno::UNO_QUERY );
586*b1cdbd2cSJim Jagielski         if ( xEmbeddedObj.is() )
587*b1cdbd2cSJim Jagielski         {
588*b1cdbd2cSJim Jagielski             bool bDisableDataTableDialog = false;
589*b1cdbd2cSJim Jagielski             svt::EmbeddedObjectRef::TryRunningState( xEmbeddedObj );
590*b1cdbd2cSJim Jagielski             uno::Reference< beans::XPropertySet > xProps( xEmbeddedObj->getComponent(), uno::UNO_QUERY );
591*b1cdbd2cSJim Jagielski             if ( xProps.is() &&
592*b1cdbd2cSJim Jagielski                  ( xProps->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DisableDataTableDialog" ) ) ) >>= bDisableDataTableDialog ) &&
593*b1cdbd2cSJim Jagielski                  bDisableDataTableDialog )
594*b1cdbd2cSJim Jagielski             {
595*b1cdbd2cSJim Jagielski                 xProps->setPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DisableDataTableDialog" ) ),
596*b1cdbd2cSJim Jagielski                     uno::makeAny( sal_False ) );
597*b1cdbd2cSJim Jagielski                 xProps->setPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DisableComplexChartTypes" ) ),
598*b1cdbd2cSJim Jagielski                     uno::makeAny( sal_False ) );
599*b1cdbd2cSJim Jagielski                 uno::Reference< util::XModifiable > xModifiable( xProps, uno::UNO_QUERY );
600*b1cdbd2cSJim Jagielski                 if ( xModifiable.is() )
601*b1cdbd2cSJim Jagielski                 {
602*b1cdbd2cSJim Jagielski                     xModifiable->setModified( sal_True );
603*b1cdbd2cSJim Jagielski                 }
604*b1cdbd2cSJim Jagielski             }
605*b1cdbd2cSJim Jagielski         }
606*b1cdbd2cSJim Jagielski     }
607*b1cdbd2cSJim Jagielski 
608*b1cdbd2cSJim Jagielski 	EndAllAction();
609*b1cdbd2cSJim Jagielski 	GetView().AutoCaption(OLE_CAP, &aCLSID);
610*b1cdbd2cSJim Jagielski 
611*b1cdbd2cSJim Jagielski     SwRewriter aRewriter;
612*b1cdbd2cSJim Jagielski 
613*b1cdbd2cSJim Jagielski 	if ( bStarMath )
614*b1cdbd2cSJim Jagielski 		aRewriter.AddRule(UNDO_ARG1, SW_RES(STR_MATH_FORMULA));
615*b1cdbd2cSJim Jagielski 	else if ( SotExchange::IsChart( aCLSID ) )
616*b1cdbd2cSJim Jagielski 		aRewriter.AddRule(UNDO_ARG1, SW_RES(STR_CHART));
617*b1cdbd2cSJim Jagielski 	else
618*b1cdbd2cSJim Jagielski 		aRewriter.AddRule(UNDO_ARG1, SW_RES(STR_OLE));
619*b1cdbd2cSJim Jagielski 
620*b1cdbd2cSJim Jagielski     EndUndo(UNDO_INSERT, &aRewriter);
621*b1cdbd2cSJim Jagielski 
622*b1cdbd2cSJim Jagielski     return bActivate;
623*b1cdbd2cSJim Jagielski }
624*b1cdbd2cSJim Jagielski 
625*b1cdbd2cSJim Jagielski /*------------------------------------------------------------------------
626*b1cdbd2cSJim Jagielski 	Beschreibung: Das aktuelle selektierte OLE-Objekt wird mit dem
627*b1cdbd2cSJim Jagielski 				  Verb in den Server geladen.
628*b1cdbd2cSJim Jagielski ------------------------------------------------------------------------*/
629*b1cdbd2cSJim Jagielski 
630*b1cdbd2cSJim Jagielski 
631*b1cdbd2cSJim Jagielski 
LaunchOLEObj(long nVerb)632*b1cdbd2cSJim Jagielski void SwWrtShell::LaunchOLEObj( long nVerb )
633*b1cdbd2cSJim Jagielski {
634*b1cdbd2cSJim Jagielski 	if ( GetCntType() == CNT_OLE &&
635*b1cdbd2cSJim Jagielski          !GetView().GetViewFrame()->GetFrame().IsInPlace() )
636*b1cdbd2cSJim Jagielski 	{
637*b1cdbd2cSJim Jagielski         svt::EmbeddedObjectRef& xRef = GetOLEObject();
638*b1cdbd2cSJim Jagielski         ASSERT( xRef.is(), "OLE not found" );
639*b1cdbd2cSJim Jagielski         SfxInPlaceClient* pCli=0;
640*b1cdbd2cSJim Jagielski 
641*b1cdbd2cSJim Jagielski         pCli = GetView().FindIPClient( xRef.GetObject(), &GetView().GetEditWin() );
642*b1cdbd2cSJim Jagielski         if ( !pCli )
643*b1cdbd2cSJim Jagielski             pCli = new SwOleClient( &GetView(), &GetView().GetEditWin(), xRef );
644*b1cdbd2cSJim Jagielski 
645*b1cdbd2cSJim Jagielski         ((SwOleClient*)pCli)->SetInDoVerb( sal_True );
646*b1cdbd2cSJim Jagielski 
647*b1cdbd2cSJim Jagielski         CalcAndSetScale( xRef );
648*b1cdbd2cSJim Jagielski         pCli->DoVerb( nVerb );
649*b1cdbd2cSJim Jagielski 
650*b1cdbd2cSJim Jagielski         ((SwOleClient*)pCli)->SetInDoVerb( sal_False );
651*b1cdbd2cSJim Jagielski         CalcAndSetScale( xRef );
652*b1cdbd2cSJim Jagielski 	}
653*b1cdbd2cSJim Jagielski }
654*b1cdbd2cSJim Jagielski 
MoveObjectIfActive(svt::EmbeddedObjectRef & xObj,const Point & rOffset)655*b1cdbd2cSJim Jagielski void SwWrtShell::MoveObjectIfActive( svt::EmbeddedObjectRef& xObj, const Point& rOffset )
656*b1cdbd2cSJim Jagielski {
657*b1cdbd2cSJim Jagielski     try
658*b1cdbd2cSJim Jagielski     {
659*b1cdbd2cSJim Jagielski         sal_Int32 nState = xObj->getCurrentState();
660*b1cdbd2cSJim Jagielski         if ( nState == ::com::sun::star::embed::EmbedStates::INPLACE_ACTIVE
661*b1cdbd2cSJim Jagielski           || nState == ::com::sun::star::embed::EmbedStates::UI_ACTIVE )
662*b1cdbd2cSJim Jagielski         {
663*b1cdbd2cSJim Jagielski             SfxInPlaceClient* pCli =
664*b1cdbd2cSJim Jagielski 				GetView().FindIPClient( xObj.GetObject(), &(GetView().GetEditWin()) );
665*b1cdbd2cSJim Jagielski             if ( pCli )
666*b1cdbd2cSJim Jagielski             {
667*b1cdbd2cSJim Jagielski                 Rectangle aArea = pCli->GetObjArea();
668*b1cdbd2cSJim Jagielski                 aArea += rOffset;
669*b1cdbd2cSJim Jagielski                 pCli->SetObjArea( aArea );
670*b1cdbd2cSJim Jagielski             }
671*b1cdbd2cSJim Jagielski         }
672*b1cdbd2cSJim Jagielski     }
673*b1cdbd2cSJim Jagielski     catch( uno::Exception& )
674*b1cdbd2cSJim Jagielski     {}
675*b1cdbd2cSJim Jagielski }
676*b1cdbd2cSJim Jagielski 
677*b1cdbd2cSJim Jagielski 
CalcAndSetScale(svt::EmbeddedObjectRef & xObj,const SwRect * pFlyPrtRect,const SwRect * pFlyFrmRect,const bool bNoTxtFrmPrtAreaChanged)678*b1cdbd2cSJim Jagielski void SwWrtShell::CalcAndSetScale( svt::EmbeddedObjectRef& xObj,
679*b1cdbd2cSJim Jagielski                                   const SwRect *pFlyPrtRect,
680*b1cdbd2cSJim Jagielski                                   const SwRect *pFlyFrmRect,
681*b1cdbd2cSJim Jagielski                                   const bool bNoTxtFrmPrtAreaChanged )
682*b1cdbd2cSJim Jagielski {
683*b1cdbd2cSJim Jagielski 	//Einstellen der Skalierung am Client. Diese ergibt sich aus der Differenz
684*b1cdbd2cSJim Jagielski 	//zwischen der VisArea des Objektes und der ObjArea.
685*b1cdbd2cSJim Jagielski     ASSERT( xObj.is(), "ObjectRef not  valid" );
686*b1cdbd2cSJim Jagielski 
687*b1cdbd2cSJim Jagielski     sal_Int64 nAspect = xObj.GetViewAspect();
688*b1cdbd2cSJim Jagielski     if ( nAspect == embed::Aspects::MSOLE_ICON )
689*b1cdbd2cSJim Jagielski         return; // the replacement image is completely controlled by container in this case
690*b1cdbd2cSJim Jagielski 
691*b1cdbd2cSJim Jagielski     sal_Int64 nMisc = 0;
692*b1cdbd2cSJim Jagielski     sal_Bool bLinkingChart = sal_False;
693*b1cdbd2cSJim Jagielski 
694*b1cdbd2cSJim Jagielski     try
695*b1cdbd2cSJim Jagielski     {
696*b1cdbd2cSJim Jagielski         nMisc = xObj->getStatus( nAspect );
697*b1cdbd2cSJim Jagielski 
698*b1cdbd2cSJim Jagielski         //Das kann ja wohl nur ein nicht aktives Objekt sein. Diese bekommen
699*b1cdbd2cSJim Jagielski         //auf Wunsch die neue Groesse als VisArea gesetzt (StarChart)
700*b1cdbd2cSJim Jagielski         if( embed::EmbedMisc::MS_EMBED_RECOMPOSEONRESIZE & nMisc )
701*b1cdbd2cSJim Jagielski         {
702*b1cdbd2cSJim Jagielski             // TODO/MBA: testing
703*b1cdbd2cSJim Jagielski             SwRect aRect( pFlyPrtRect ? *pFlyPrtRect
704*b1cdbd2cSJim Jagielski                         : GetAnyCurRect( RECT_FLY_PRT_EMBEDDED, 0, xObj.GetObject() ));
705*b1cdbd2cSJim Jagielski             if( !aRect.IsEmpty() )
706*b1cdbd2cSJim Jagielski             {
707*b1cdbd2cSJim Jagielski                 // TODO/LEAN: getMapUnit can switch object to running state
708*b1cdbd2cSJim Jagielski                 // xObj.TryRunningState();
709*b1cdbd2cSJim Jagielski 
710*b1cdbd2cSJim Jagielski                 MapUnit aUnit = VCLUnoHelper::UnoEmbed2VCLMapUnit( xObj->getMapUnit( nAspect ) );
711*b1cdbd2cSJim Jagielski 
712*b1cdbd2cSJim Jagielski                 // TODO/LATER: needs complete VisArea?!
713*b1cdbd2cSJim Jagielski                 Size aSize( OutputDevice::LogicToLogic( aRect.SVRect(), MAP_TWIP, aUnit ).GetSize() );
714*b1cdbd2cSJim Jagielski                 awt::Size aSz;
715*b1cdbd2cSJim Jagielski                 aSz.Width = aSize.Width();
716*b1cdbd2cSJim Jagielski                 aSz.Height = aSize.Height();
717*b1cdbd2cSJim Jagielski                 xObj->setVisualAreaSize( nAspect, aSz );
718*b1cdbd2cSJim Jagielski                 // --> OD 2005-05-02 #i48419# - action 'UpdateReplacement' doesn't
719*b1cdbd2cSJim Jagielski                 // have to change the modified state of the document.
720*b1cdbd2cSJim Jagielski                 // This is only a workaround for the defect, that this action
721*b1cdbd2cSJim Jagielski                 // modifies a document after load, because unnecessarily the
722*b1cdbd2cSJim Jagielski                 // replacement graphic is updated, in spite of the fact that
723*b1cdbd2cSJim Jagielski                 // nothing has been changed.
724*b1cdbd2cSJim Jagielski                 // If the replacement graphic changes by this action, the document
725*b1cdbd2cSJim Jagielski                 // will be already modified via other mechanisms.
726*b1cdbd2cSJim Jagielski                 {
727*b1cdbd2cSJim Jagielski                     bool bResetEnableSetModified(false);
728*b1cdbd2cSJim Jagielski                     if ( GetDoc()->GetDocShell()->IsEnableSetModified() )
729*b1cdbd2cSJim Jagielski                     {
730*b1cdbd2cSJim Jagielski                         GetDoc()->GetDocShell()->EnableSetModified( sal_False );
731*b1cdbd2cSJim Jagielski                         bResetEnableSetModified = true;
732*b1cdbd2cSJim Jagielski                     }
733*b1cdbd2cSJim Jagielski 
734*b1cdbd2cSJim Jagielski                     //#i79576# don't destroy chart replacement images on load
735*b1cdbd2cSJim Jagielski                     //#i79578# don't request a new replacement image for charts to often
736*b1cdbd2cSJim Jagielski                     //a chart sends a modified call to the framework if it was changed
737*b1cdbd2cSJim Jagielski                     //thus the replacement update is already handled elsewhere
738*b1cdbd2cSJim Jagielski                     if ( !SotExchange::IsChart( xObj->getClassID() ) )
739*b1cdbd2cSJim Jagielski                         xObj.UpdateReplacement();
740*b1cdbd2cSJim Jagielski 
741*b1cdbd2cSJim Jagielski                     if ( bResetEnableSetModified )
742*b1cdbd2cSJim Jagielski                     {
743*b1cdbd2cSJim Jagielski                         GetDoc()->GetDocShell()->EnableSetModified( sal_True );
744*b1cdbd2cSJim Jagielski                     }
745*b1cdbd2cSJim Jagielski                 }
746*b1cdbd2cSJim Jagielski                 // <--
747*b1cdbd2cSJim Jagielski             }
748*b1cdbd2cSJim Jagielski 
749*b1cdbd2cSJim Jagielski             // TODO/LATER: this is only a workaround,
750*b1cdbd2cSJim Jagielski             uno::Reference< chart2::XChartDocument > xChartDocument( xObj->getComponent(), uno::UNO_QUERY );
751*b1cdbd2cSJim Jagielski             bLinkingChart = ( xChartDocument.is() && !xChartDocument->hasInternalDataProvider() );
752*b1cdbd2cSJim Jagielski         }
753*b1cdbd2cSJim Jagielski     }
754*b1cdbd2cSJim Jagielski     catch ( uno::Exception& )
755*b1cdbd2cSJim Jagielski     {
756*b1cdbd2cSJim Jagielski         // TODO/LATER: handle the error
757*b1cdbd2cSJim Jagielski         return;
758*b1cdbd2cSJim Jagielski     }
759*b1cdbd2cSJim Jagielski 
760*b1cdbd2cSJim Jagielski     SfxInPlaceClient* pCli = GetView().FindIPClient( xObj.GetObject(), &GetView().GetEditWin() );
761*b1cdbd2cSJim Jagielski     if ( !pCli )
762*b1cdbd2cSJim Jagielski     {
763*b1cdbd2cSJim Jagielski         if ( (embed::EmbedMisc::EMBED_ACTIVATEIMMEDIATELY & nMisc)
764*b1cdbd2cSJim Jagielski              || bLinkingChart
765*b1cdbd2cSJim Jagielski             // TODO/LATER: ResizeOnPrinterChange
766*b1cdbd2cSJim Jagielski              //|| SVOBJ_MISCSTATUS_RESIZEONPRINTERCHANGE & xObj->GetMiscStatus()
767*b1cdbd2cSJim Jagielski              // --> OD #i117189# - refine condition for non-resizable objects
768*b1cdbd2cSJim Jagielski              // non-resizable objects need to be set the size back by this method
769*b1cdbd2cSJim Jagielski              || ( bNoTxtFrmPrtAreaChanged && nMisc & embed::EmbedMisc::EMBED_NEVERRESIZE ) )
770*b1cdbd2cSJim Jagielski         {
771*b1cdbd2cSJim Jagielski             pCli = new SwOleClient( &GetView(), &GetView().GetEditWin(), xObj );
772*b1cdbd2cSJim Jagielski         }
773*b1cdbd2cSJim Jagielski         else
774*b1cdbd2cSJim Jagielski             return;
775*b1cdbd2cSJim Jagielski     }
776*b1cdbd2cSJim Jagielski 
777*b1cdbd2cSJim Jagielski     // TODO/LEAN: getMapUnit can switch object to running state
778*b1cdbd2cSJim Jagielski     // xObj.TryRunningState();
779*b1cdbd2cSJim Jagielski 
780*b1cdbd2cSJim Jagielski     awt::Size aSize;
781*b1cdbd2cSJim Jagielski     try
782*b1cdbd2cSJim Jagielski     {
783*b1cdbd2cSJim Jagielski         aSize = xObj->getVisualAreaSize( nAspect );
784*b1cdbd2cSJim Jagielski     }
785*b1cdbd2cSJim Jagielski     catch( embed::NoVisualAreaSizeException& )
786*b1cdbd2cSJim Jagielski     {
787*b1cdbd2cSJim Jagielski         DBG_ERROR( "Can't get visual area size!\n" );
788*b1cdbd2cSJim Jagielski         // the scaling will not be done
789*b1cdbd2cSJim Jagielski     }
790*b1cdbd2cSJim Jagielski     catch( uno::Exception& )
791*b1cdbd2cSJim Jagielski     {
792*b1cdbd2cSJim Jagielski         // TODO/LATER: handle the error
793*b1cdbd2cSJim Jagielski         DBG_ERROR( "Can't get visual area size!\n" );
794*b1cdbd2cSJim Jagielski         return;
795*b1cdbd2cSJim Jagielski     }
796*b1cdbd2cSJim Jagielski 
797*b1cdbd2cSJim Jagielski     Size _aVisArea( aSize.Width, aSize.Height );
798*b1cdbd2cSJim Jagielski 
799*b1cdbd2cSJim Jagielski 	Fraction aScaleWidth( 1, 1 );
800*b1cdbd2cSJim Jagielski 	Fraction aScaleHeight( 1, 1 );
801*b1cdbd2cSJim Jagielski 
802*b1cdbd2cSJim Jagielski 	sal_Bool bUseObjectSize = sal_False;
803*b1cdbd2cSJim Jagielski 
804*b1cdbd2cSJim Jagielski 	// solange keine vernuenftige Size vom Object kommt, kann nichts
805*b1cdbd2cSJim Jagielski 	// skaliert werden
806*b1cdbd2cSJim Jagielski     if( _aVisArea.Width() && _aVisArea.Height() )
807*b1cdbd2cSJim Jagielski 	{
808*b1cdbd2cSJim Jagielski 		const MapMode aTmp( MAP_TWIP );
809*b1cdbd2cSJim Jagielski         MapUnit aUnit = VCLUnoHelper::UnoEmbed2VCLMapUnit( xObj->getMapUnit( nAspect ) );
810*b1cdbd2cSJim Jagielski         _aVisArea = OutputDevice::LogicToLogic( _aVisArea, aUnit, aTmp);
811*b1cdbd2cSJim Jagielski 		Size aObjArea;
812*b1cdbd2cSJim Jagielski 		if ( pFlyPrtRect )
813*b1cdbd2cSJim Jagielski 			aObjArea = pFlyPrtRect->SSize();
814*b1cdbd2cSJim Jagielski 		else
815*b1cdbd2cSJim Jagielski             aObjArea = GetAnyCurRect( RECT_FLY_PRT_EMBEDDED, 0, xObj.GetObject() ).SSize();
816*b1cdbd2cSJim Jagielski 
817*b1cdbd2cSJim Jagielski         // differ the aObjArea and _aVisArea by 1 Pixel then set new VisArea
818*b1cdbd2cSJim Jagielski 		long nX, nY;
819*b1cdbd2cSJim Jagielski 		SwSelPaintRects::Get1PixelInLogic( *this, &nX, &nY );
820*b1cdbd2cSJim Jagielski         if( !( _aVisArea.Width() - nX <= aObjArea.Width() &&
821*b1cdbd2cSJim Jagielski                _aVisArea.Width() + nX >= aObjArea.Width() &&
822*b1cdbd2cSJim Jagielski                _aVisArea.Height()- nY <= aObjArea.Height()&&
823*b1cdbd2cSJim Jagielski                _aVisArea.Height()+ nY >= aObjArea.Height() ))
824*b1cdbd2cSJim Jagielski 		{
825*b1cdbd2cSJim Jagielski             // TODO/LATER: MISCSTATUS_RESIZEONPRINTERCHANGE
826*b1cdbd2cSJim Jagielski             /*
827*b1cdbd2cSJim Jagielski             if( SVOBJ_MISCSTATUS_RESIZEONPRINTERCHANGE & nMisc )
828*b1cdbd2cSJim Jagielski 			{
829*b1cdbd2cSJim Jagielski 				//This type of objects should never be resized.
830*b1cdbd2cSJim Jagielski 				//If this request comes from the Writer core (inaktive Object
831*b1cdbd2cSJim Jagielski 				//ist resized), the Object should be resized too.
832*b1cdbd2cSJim Jagielski 				//If this request comes from the Object itself, the Frame
833*b1cdbd2cSJim Jagielski 				//in the Writer core should be resized.
834*b1cdbd2cSJim Jagielski 				if ( pFlyPrtRect )		//Request from core?
835*b1cdbd2cSJim Jagielski 				{
836*b1cdbd2cSJim Jagielski 					xObj->SetVisArea( OutputDevice::LogicToLogic(
837*b1cdbd2cSJim Jagielski 						pFlyPrtRect->SVRect(), MAP_TWIP, xObj->GetMapUnit() ));
838*b1cdbd2cSJim Jagielski 				}
839*b1cdbd2cSJim Jagielski 				else
840*b1cdbd2cSJim Jagielski 				{
841*b1cdbd2cSJim Jagielski                     SwRect aTmp( Point( LONG_MIN, LONG_MIN ), _aVisArea );
842*b1cdbd2cSJim Jagielski 					RequestObjectResize( aTmp, xObj );
843*b1cdbd2cSJim Jagielski 				}
844*b1cdbd2cSJim Jagielski 				//Der Rest erledigt sich, weil wir eh wiederkommen sollten, evtl.
845*b1cdbd2cSJim Jagielski 				//sogar rekursiv.
846*b1cdbd2cSJim Jagielski 				return;
847*b1cdbd2cSJim Jagielski 			}
848*b1cdbd2cSJim Jagielski             else*/
849*b1cdbd2cSJim Jagielski 
850*b1cdbd2cSJim Jagielski 			if ( nMisc & embed::EmbedMisc::EMBED_NEVERRESIZE )
851*b1cdbd2cSJim Jagielski 			{
852*b1cdbd2cSJim Jagielski 				// the object must not be scaled, the size stored in object must be used for restoring
853*b1cdbd2cSJim Jagielski 				bUseObjectSize = sal_True;
854*b1cdbd2cSJim Jagielski 			}
855*b1cdbd2cSJim Jagielski 			else
856*b1cdbd2cSJim Jagielski 			{
857*b1cdbd2cSJim Jagielski                 aScaleWidth = Fraction( aObjArea.Width(),   _aVisArea.Width() );
858*b1cdbd2cSJim Jagielski                 aScaleHeight = Fraction( aObjArea.Height(), _aVisArea.Height());
859*b1cdbd2cSJim Jagielski 			}
860*b1cdbd2cSJim Jagielski 		}
861*b1cdbd2cSJim Jagielski 	}
862*b1cdbd2cSJim Jagielski 
863*b1cdbd2cSJim Jagielski 	//Jetzt ist auch der guenstige Zeitpunkt die ObjArea einzustellen.
864*b1cdbd2cSJim Jagielski 	//Die Scalierung muss beruecksichtigt werden.
865*b1cdbd2cSJim Jagielski 	SwRect aArea;
866*b1cdbd2cSJim Jagielski 	if ( pFlyPrtRect )
867*b1cdbd2cSJim Jagielski 	{
868*b1cdbd2cSJim Jagielski 		aArea = *pFlyPrtRect;
869*b1cdbd2cSJim Jagielski 		aArea += pFlyFrmRect->Pos();
870*b1cdbd2cSJim Jagielski 	}
871*b1cdbd2cSJim Jagielski 	else
872*b1cdbd2cSJim Jagielski 	{
873*b1cdbd2cSJim Jagielski         aArea = GetAnyCurRect( RECT_FLY_PRT_EMBEDDED, 0, xObj.GetObject() );
874*b1cdbd2cSJim Jagielski         aArea.Pos() += GetAnyCurRect( RECT_FLY_EMBEDDED, 0, xObj.GetObject() ).Pos();
875*b1cdbd2cSJim Jagielski 	}
876*b1cdbd2cSJim Jagielski 
877*b1cdbd2cSJim Jagielski 	if ( bUseObjectSize )
878*b1cdbd2cSJim Jagielski 	{
879*b1cdbd2cSJim Jagielski         // --> this moves non-resizable object so that when adding borders the baseline remains the same
880*b1cdbd2cSJim Jagielski         const SwFlyFrmFmt *pFlyFrmFmt = dynamic_cast< const SwFlyFrmFmt * >( GetFlyFrmFmt() );
881*b1cdbd2cSJim Jagielski         ASSERT( pFlyFrmFmt, "Could not find fly frame." );
882*b1cdbd2cSJim Jagielski         if ( pFlyFrmFmt )
883*b1cdbd2cSJim Jagielski         {
884*b1cdbd2cSJim Jagielski             const Point &rPoint = pFlyFrmFmt->GetLastFlyFrmPrtRectPos();
885*b1cdbd2cSJim Jagielski             SwRect aRect( pFlyPrtRect ? *pFlyPrtRect
886*b1cdbd2cSJim Jagielski                         : GetAnyCurRect( RECT_FLY_PRT_EMBEDDED, 0, xObj.GetObject() ));
887*b1cdbd2cSJim Jagielski             aArea += rPoint - aRect.Pos(); // adjust area by diff of printing area position in order to keep baseline alignment correct.
888*b1cdbd2cSJim Jagielski         }
889*b1cdbd2cSJim Jagielski         // <--
890*b1cdbd2cSJim Jagielski         aArea.Width ( _aVisArea.Width() );
891*b1cdbd2cSJim Jagielski         aArea.Height( _aVisArea.Height() );
892*b1cdbd2cSJim Jagielski 		RequestObjectResize( aArea, xObj.GetObject() );
893*b1cdbd2cSJim Jagielski 	}
894*b1cdbd2cSJim Jagielski 	else
895*b1cdbd2cSJim Jagielski 	{
896*b1cdbd2cSJim Jagielski 		aArea.Width ( Fraction( aArea.Width()  ) / pCli->GetScaleWidth() );
897*b1cdbd2cSJim Jagielski 		aArea.Height( Fraction( aArea.Height() ) / pCli->GetScaleHeight());
898*b1cdbd2cSJim Jagielski 	}
899*b1cdbd2cSJim Jagielski 
900*b1cdbd2cSJim Jagielski     pCli->SetObjAreaAndScale( aArea.SVRect(), aScaleWidth, aScaleHeight );
901*b1cdbd2cSJim Jagielski }
902*b1cdbd2cSJim Jagielski 
903*b1cdbd2cSJim Jagielski 
904*b1cdbd2cSJim Jagielski 
ConnectObj(svt::EmbeddedObjectRef & xObj,const SwRect & rPrt,const SwRect & rFrm)905*b1cdbd2cSJim Jagielski void SwWrtShell::ConnectObj( svt::EmbeddedObjectRef& xObj, const SwRect &rPrt,
906*b1cdbd2cSJim Jagielski 							const SwRect &rFrm )
907*b1cdbd2cSJim Jagielski {
908*b1cdbd2cSJim Jagielski     SfxInPlaceClient* pCli = GetView().FindIPClient( xObj.GetObject(), &GetView().GetEditWin());
909*b1cdbd2cSJim Jagielski     if ( !pCli )
910*b1cdbd2cSJim Jagielski         pCli = new SwOleClient( &GetView(), &GetView().GetEditWin(), xObj );
911*b1cdbd2cSJim Jagielski     CalcAndSetScale( xObj, &rPrt, &rFrm );
912*b1cdbd2cSJim Jagielski }
913*b1cdbd2cSJim Jagielski 
914*b1cdbd2cSJim Jagielski /*------------------------------------------------------------------------
915*b1cdbd2cSJim Jagielski  Beschreibung:	Einfuegen harter Seitenumbruch;
916*b1cdbd2cSJim Jagielski 				Selektionen werden ueberschrieben
917*b1cdbd2cSJim Jagielski ------------------------------------------------------------------------*/
918*b1cdbd2cSJim Jagielski 
919*b1cdbd2cSJim Jagielski 
920*b1cdbd2cSJim Jagielski 
InsertPageBreak(const String * pPageDesc,sal_uInt16 nPgNum)921*b1cdbd2cSJim Jagielski void SwWrtShell::InsertPageBreak(const String *pPageDesc, sal_uInt16 nPgNum )
922*b1cdbd2cSJim Jagielski {
923*b1cdbd2cSJim Jagielski 	ResetCursorStack();
924*b1cdbd2cSJim Jagielski 	if( _CanInsert() )
925*b1cdbd2cSJim Jagielski 	{
926*b1cdbd2cSJim Jagielski 		ACT_KONTEXT(this);
927*b1cdbd2cSJim Jagielski         StartUndo(UNDO_UI_INSERT_PAGE_BREAK);
928*b1cdbd2cSJim Jagielski 
929*b1cdbd2cSJim Jagielski 		if ( !IsCrsrInTbl() )
930*b1cdbd2cSJim Jagielski 		{
931*b1cdbd2cSJim Jagielski 			if(HasSelection())
932*b1cdbd2cSJim Jagielski 				DelRight();
933*b1cdbd2cSJim Jagielski 			SwFEShell::SplitNode();
934*b1cdbd2cSJim Jagielski 		}
935*b1cdbd2cSJim Jagielski 
936*b1cdbd2cSJim Jagielski 		const SwPageDesc *pDesc = pPageDesc
937*b1cdbd2cSJim Jagielski 								? FindPageDescByName( *pPageDesc, sal_True ) : 0;
938*b1cdbd2cSJim Jagielski 		if( pDesc )
939*b1cdbd2cSJim Jagielski 		{
940*b1cdbd2cSJim Jagielski 			SwFmtPageDesc aDesc( pDesc );
941*b1cdbd2cSJim Jagielski 			aDesc.SetNumOffset( nPgNum );
942*b1cdbd2cSJim Jagielski 			SetAttrItem( aDesc );
943*b1cdbd2cSJim Jagielski 		}
944*b1cdbd2cSJim Jagielski 		else
945*b1cdbd2cSJim Jagielski             SetAttrItem( SvxFmtBreakItem(SVX_BREAK_PAGE_BEFORE, RES_BREAK) );
946*b1cdbd2cSJim Jagielski         EndUndo(UNDO_UI_INSERT_PAGE_BREAK);
947*b1cdbd2cSJim Jagielski 	}
948*b1cdbd2cSJim Jagielski }
949*b1cdbd2cSJim Jagielski /*------------------------------------------------------------------------
950*b1cdbd2cSJim Jagielski  Beschreibung:	Einfuegen harter Zeilenumbruch;
951*b1cdbd2cSJim Jagielski 				Selektionen werden ueberschrieben
952*b1cdbd2cSJim Jagielski ------------------------------------------------------------------------*/
953*b1cdbd2cSJim Jagielski 
954*b1cdbd2cSJim Jagielski 
InsertLineBreak()955*b1cdbd2cSJim Jagielski void SwWrtShell::InsertLineBreak()
956*b1cdbd2cSJim Jagielski {
957*b1cdbd2cSJim Jagielski 	ResetCursorStack();
958*b1cdbd2cSJim Jagielski 	if( _CanInsert() )
959*b1cdbd2cSJim Jagielski 	{
960*b1cdbd2cSJim Jagielski 		if(HasSelection())
961*b1cdbd2cSJim Jagielski 			DelRight();
962*b1cdbd2cSJim Jagielski 
963*b1cdbd2cSJim Jagielski 		const sal_Unicode cIns = 0x0A;
964*b1cdbd2cSJim Jagielski 		SvxAutoCorrect* pACorr = lcl_IsAutoCorr();
965*b1cdbd2cSJim Jagielski 	    if( pACorr )
966*b1cdbd2cSJim Jagielski 			AutoCorrect( *pACorr, cIns );
967*b1cdbd2cSJim Jagielski 		else
968*b1cdbd2cSJim Jagielski 			SwWrtShell::Insert( String( cIns ) );
969*b1cdbd2cSJim Jagielski 	}
970*b1cdbd2cSJim Jagielski }
971*b1cdbd2cSJim Jagielski /*------------------------------------------------------------------------
972*b1cdbd2cSJim Jagielski  Beschreibung:	Einfuegen harter Spaltenumbruch;
973*b1cdbd2cSJim Jagielski 				Selektionen werden ueberschrieben
974*b1cdbd2cSJim Jagielski ------------------------------------------------------------------------*/
975*b1cdbd2cSJim Jagielski 
976*b1cdbd2cSJim Jagielski 
InsertColumnBreak()977*b1cdbd2cSJim Jagielski void SwWrtShell::InsertColumnBreak()
978*b1cdbd2cSJim Jagielski {
979*b1cdbd2cSJim Jagielski 	ACT_KONTEXT(this);
980*b1cdbd2cSJim Jagielski 	ResetCursorStack();
981*b1cdbd2cSJim Jagielski 	if( _CanInsert() )
982*b1cdbd2cSJim Jagielski 	{
983*b1cdbd2cSJim Jagielski         StartUndo(UNDO_UI_INSERT_COLUMN_BREAK);
984*b1cdbd2cSJim Jagielski 
985*b1cdbd2cSJim Jagielski 		if ( !IsCrsrInTbl() )
986*b1cdbd2cSJim Jagielski 		{
987*b1cdbd2cSJim Jagielski 			if(HasSelection())
988*b1cdbd2cSJim Jagielski 				DelRight();
989*b1cdbd2cSJim Jagielski 			SwFEShell::SplitNode( sal_False, sal_False );
990*b1cdbd2cSJim Jagielski 		}
991*b1cdbd2cSJim Jagielski         SetAttrItem(SvxFmtBreakItem(SVX_BREAK_COLUMN_BEFORE, RES_BREAK));
992*b1cdbd2cSJim Jagielski 
993*b1cdbd2cSJim Jagielski         EndUndo(UNDO_UI_INSERT_COLUMN_BREAK);
994*b1cdbd2cSJim Jagielski 	}
995*b1cdbd2cSJim Jagielski }
996*b1cdbd2cSJim Jagielski 
997*b1cdbd2cSJim Jagielski /*------------------------------------------------------------------------
998*b1cdbd2cSJim Jagielski  Beschreibung:	Einfuegen Fussnote
999*b1cdbd2cSJim Jagielski  Parameter: 	rStr -- optionales Fussnotenzeichen
1000*b1cdbd2cSJim Jagielski ------------------------------------------------------------------------*/
1001*b1cdbd2cSJim Jagielski 
1002*b1cdbd2cSJim Jagielski 
InsertFootnote(const String & rStr,sal_Bool bEndNote,sal_Bool bEdit)1003*b1cdbd2cSJim Jagielski void SwWrtShell::InsertFootnote(const String &rStr, sal_Bool bEndNote, sal_Bool bEdit )
1004*b1cdbd2cSJim Jagielski {
1005*b1cdbd2cSJim Jagielski 	ResetCursorStack();
1006*b1cdbd2cSJim Jagielski 	if( _CanInsert() )
1007*b1cdbd2cSJim Jagielski 	{
1008*b1cdbd2cSJim Jagielski 		if(HasSelection())
1009*b1cdbd2cSJim Jagielski         {
1010*b1cdbd2cSJim Jagielski             //collapse cursor to the end
1011*b1cdbd2cSJim Jagielski             if(!IsCrsrPtAtEnd())
1012*b1cdbd2cSJim Jagielski                 SwapPam();
1013*b1cdbd2cSJim Jagielski             ClearMark();
1014*b1cdbd2cSJim Jagielski         }
1015*b1cdbd2cSJim Jagielski 
1016*b1cdbd2cSJim Jagielski 		SwFmtFtn aFootNote( bEndNote );
1017*b1cdbd2cSJim Jagielski 		if(rStr.Len())
1018*b1cdbd2cSJim Jagielski 			aFootNote.SetNumStr( rStr );
1019*b1cdbd2cSJim Jagielski 
1020*b1cdbd2cSJim Jagielski 		SetAttrItem(aFootNote);
1021*b1cdbd2cSJim Jagielski 
1022*b1cdbd2cSJim Jagielski 		if( bEdit )
1023*b1cdbd2cSJim Jagielski 		{
1024*b1cdbd2cSJim Jagielski 			// zur Bearbeiung des Fussnotentextes
1025*b1cdbd2cSJim Jagielski 			Left(CRSR_SKIP_CHARS, sal_False, 1, sal_False );
1026*b1cdbd2cSJim Jagielski 			GotoFtnTxt();
1027*b1cdbd2cSJim Jagielski 		}
1028*b1cdbd2cSJim Jagielski 	}
1029*b1cdbd2cSJim Jagielski }
1030*b1cdbd2cSJim Jagielski /*------------------------------------------------------------------------
1031*b1cdbd2cSJim Jagielski  Beschreibung:	SplitNode; hier auch, da
1032*b1cdbd2cSJim Jagielski 					- selektierter Inhalt geloescht wird;
1033*b1cdbd2cSJim Jagielski 					- der Cursorstack gfs. zurueckgesetzt wird.
1034*b1cdbd2cSJim Jagielski ------------------------------------------------------------------------*/
1035*b1cdbd2cSJim Jagielski 
1036*b1cdbd2cSJim Jagielski 
SplitNode(sal_Bool bAutoFmt,sal_Bool bCheckTableStart)1037*b1cdbd2cSJim Jagielski void SwWrtShell::SplitNode( sal_Bool bAutoFmt, sal_Bool bCheckTableStart )
1038*b1cdbd2cSJim Jagielski {
1039*b1cdbd2cSJim Jagielski 	ResetCursorStack();
1040*b1cdbd2cSJim Jagielski 	if( _CanInsert() )
1041*b1cdbd2cSJim Jagielski 	{
1042*b1cdbd2cSJim Jagielski 		ACT_KONTEXT(this);
1043*b1cdbd2cSJim Jagielski 
1044*b1cdbd2cSJim Jagielski         rView.GetEditWin().FlushInBuffer();
1045*b1cdbd2cSJim Jagielski 		sal_Bool bHasSel = HasSelection();
1046*b1cdbd2cSJim Jagielski 		if( bHasSel )
1047*b1cdbd2cSJim Jagielski 		{
1048*b1cdbd2cSJim Jagielski 			StartUndo( UNDO_INSERT );
1049*b1cdbd2cSJim Jagielski 			DelRight();
1050*b1cdbd2cSJim Jagielski 		}
1051*b1cdbd2cSJim Jagielski 
1052*b1cdbd2cSJim Jagielski 		SwFEShell::SplitNode( bAutoFmt, bCheckTableStart );
1053*b1cdbd2cSJim Jagielski 		if( bHasSel )
1054*b1cdbd2cSJim Jagielski 			EndUndo( UNDO_INSERT );
1055*b1cdbd2cSJim Jagielski 	}
1056*b1cdbd2cSJim Jagielski }
1057*b1cdbd2cSJim Jagielski 
1058*b1cdbd2cSJim Jagielski /*------------------------------------------------------------------------
1059*b1cdbd2cSJim Jagielski  Beschreibung:	Numerierung anschalten
1060*b1cdbd2cSJim Jagielski  Parameter: 	Optionale Angabe eines Namens fuer die benannte Liste;
1061*b1cdbd2cSJim Jagielski 				dieser bezeichnet eine Position, wenn er in eine
1062*b1cdbd2cSJim Jagielski 				Zahl konvertierbar ist und kleiner ist als nMaxRules.
1063*b1cdbd2cSJim Jagielski -------------------------------------------------------------------------*/
1064*b1cdbd2cSJim Jagielski 
1065*b1cdbd2cSJim Jagielski 
1066*b1cdbd2cSJim Jagielski // zum Testen der CharFormate an der Numerierung
1067*b1cdbd2cSJim Jagielski // extern void SetNumChrFmt( SwWrtShell*, SwNumRules& );
1068*b1cdbd2cSJim Jagielski 
1069*b1cdbd2cSJim Jagielski // -> #i40041#
1070*b1cdbd2cSJim Jagielski // --> OD 2005-10-25 #b6340308#
1071*b1cdbd2cSJim Jagielski // Preconditions (as far as OD has figured out):
1072*b1cdbd2cSJim Jagielski // - <SwEditShell::HasNumber()> is sal_False, if <bNum> is sal_True
1073*b1cdbd2cSJim Jagielski // - <SwEditShell::HasBullet()> is sal_False, if <bNum> is sal_False
1074*b1cdbd2cSJim Jagielski // Behavior of method is determined by the current situation at the current
1075*b1cdbd2cSJim Jagielski // cursor position in the document.
NumOrBulletOn(sal_Bool bNum)1076*b1cdbd2cSJim Jagielski void SwWrtShell::NumOrBulletOn(sal_Bool bNum)
1077*b1cdbd2cSJim Jagielski {
1078*b1cdbd2cSJim Jagielski     // determine numbering rule found at current cursor position in the docment.
1079*b1cdbd2cSJim Jagielski     const SwNumRule* pCurRule = GetCurNumRule();
1080*b1cdbd2cSJim Jagielski 
1081*b1cdbd2cSJim Jagielski     StartUndo(UNDO_NUMORNONUM);
1082*b1cdbd2cSJim Jagielski 
1083*b1cdbd2cSJim Jagielski     const SwNumRule * pNumRule = pCurRule;
1084*b1cdbd2cSJim Jagielski 
1085*b1cdbd2cSJim Jagielski     // --> OD 2005-10-25 #b6340308#
1086*b1cdbd2cSJim Jagielski     // - activate outline rule respectively turning on outline rule for
1087*b1cdbd2cSJim Jagielski     //   current text node. But, only for turning on a numbering (<bNum> == sal_True).
1088*b1cdbd2cSJim Jagielski     // - overwrite found numbering rule at current cursor position, if
1089*b1cdbd2cSJim Jagielski     //   no numbering rule can be retrieved from the paragraph style.
1090*b1cdbd2cSJim Jagielski     bool bContinueFoundNumRule( false );
1091*b1cdbd2cSJim Jagielski     bool bActivateOutlineRule( false );
1092*b1cdbd2cSJim Jagielski     int nActivateOutlineLvl( MAXLEVEL );    // only relevant, if <bActivateOutlineRule> == sal_True
1093*b1cdbd2cSJim Jagielski     SwTxtFmtColl * pColl = GetCurTxtFmtColl();
1094*b1cdbd2cSJim Jagielski     if ( pColl )
1095*b1cdbd2cSJim Jagielski     {
1096*b1cdbd2cSJim Jagielski         // --> OD 2005-10-25 #b6340308# - retrieve numbering rule at paragraph
1097*b1cdbd2cSJim Jagielski         // style, which is found at current cursor position in the document.
1098*b1cdbd2cSJim Jagielski         SwNumRule* pCollRule = pDoc->FindNumRulePtr(pColl->GetNumRule().GetValue());
1099*b1cdbd2cSJim Jagielski         // --> OD 2005-10-25 #125993# - The outline numbering rule isn't allowed
1100*b1cdbd2cSJim Jagielski         // to be derived from a parent paragraph style to a derived one.
1101*b1cdbd2cSJim Jagielski         // Thus check, if the found outline numbering rule is directly
1102*b1cdbd2cSJim Jagielski         // set at the paragraph style <pColl>. If not, set <pCollRule> to NULL
1103*b1cdbd2cSJim Jagielski         if ( pCollRule && pCollRule == GetDoc()->GetOutlineNumRule() )
1104*b1cdbd2cSJim Jagielski         {
1105*b1cdbd2cSJim Jagielski             const SwNumRule* pDirectCollRule =
1106*b1cdbd2cSJim Jagielski                     pDoc->FindNumRulePtr(pColl->GetNumRule( sal_False ).GetValue());
1107*b1cdbd2cSJim Jagielski             if ( !pDirectCollRule )
1108*b1cdbd2cSJim Jagielski             {
1109*b1cdbd2cSJim Jagielski                 pCollRule = 0;
1110*b1cdbd2cSJim Jagielski             }
1111*b1cdbd2cSJim Jagielski         }
1112*b1cdbd2cSJim Jagielski         // --> OD 2006-11-20 #i71764#
1113*b1cdbd2cSJim Jagielski         // Document setting OUTLINE_LEVEL_YIELDS_OUTLINE_RULE has no influence
1114*b1cdbd2cSJim Jagielski         // any more.
1115*b1cdbd2cSJim Jagielski //        if ( pCollRule == NULL &&
1116*b1cdbd2cSJim Jagielski //             NO_NUMBERING != pColl->GetOutlineLevel() &&
1117*b1cdbd2cSJim Jagielski //             GetDoc()->get(IDocumentSettingAccess::OUTLINE_LEVEL_YIELDS_OUTLINE_RULE) )
1118*b1cdbd2cSJim Jagielski //        {
1119*b1cdbd2cSJim Jagielski //            pCollRule = GetDoc()->GetOutlineNumRule();
1120*b1cdbd2cSJim Jagielski //        }
1121*b1cdbd2cSJim Jagielski         // <--
1122*b1cdbd2cSJim Jagielski 
1123*b1cdbd2cSJim Jagielski         // <--
1124*b1cdbd2cSJim Jagielski         // --> OD 2005-10-25 #b6340308#
1125*b1cdbd2cSJim Jagielski         if ( !pCollRule )
1126*b1cdbd2cSJim Jagielski         {
1127*b1cdbd2cSJim Jagielski             pNumRule = pCollRule;
1128*b1cdbd2cSJim Jagielski         }
1129*b1cdbd2cSJim Jagielski         // --> OD 2006-06-12 #b6435904#
1130*b1cdbd2cSJim Jagielski         // no activation or continuation of outline numbering in Writer/Web document
1131*b1cdbd2cSJim Jagielski         else if ( bNum &&
1132*b1cdbd2cSJim Jagielski                   !dynamic_cast<SwWebDocShell*>(GetDoc()->GetDocShell()) &&
1133*b1cdbd2cSJim Jagielski                   pCollRule == GetDoc()->GetOutlineNumRule() )
1134*b1cdbd2cSJim Jagielski         // <--
1135*b1cdbd2cSJim Jagielski         {
1136*b1cdbd2cSJim Jagielski             if ( pNumRule == pCollRule )
1137*b1cdbd2cSJim Jagielski             {
1138*b1cdbd2cSJim Jagielski                 // check, if text node at current cursor positioned is counted.
1139*b1cdbd2cSJim Jagielski                 // If not, let it been counted. Then it has to be checked,
1140*b1cdbd2cSJim Jagielski                 // of the outline numbering has to be activated or continued.
1141*b1cdbd2cSJim Jagielski                 SwTxtNode* pTxtNode =
1142*b1cdbd2cSJim Jagielski                             GetCrsr()->GetPoint()->nNode.GetNode().GetTxtNode();
1143*b1cdbd2cSJim Jagielski                 if ( pTxtNode && !pTxtNode->IsCountedInList() )
1144*b1cdbd2cSJim Jagielski                 {
1145*b1cdbd2cSJim Jagielski                     // check, if numbering of the outline level of the pararaph
1146*b1cdbd2cSJim Jagielski                     // style is active. If not, activate this outline level.
1147*b1cdbd2cSJim Jagielski 					nActivateOutlineLvl = pColl->GetAssignedOutlineStyleLevel();
1148*b1cdbd2cSJim Jagielski                     ASSERT( pColl->IsAssignedToListLevelOfOutlineStyle(),	//<-end,zhaojianwei
1149*b1cdbd2cSJim Jagielski                             "<SwWrtShell::NumOrBulletOn(..)> - paragraph style with outline rule, but no outline level" );
1150*b1cdbd2cSJim Jagielski                     if ( pColl->IsAssignedToListLevelOfOutlineStyle() &&		//<-end,zhaojianwei
1151*b1cdbd2cSJim Jagielski                          pCollRule->Get( static_cast<sal_uInt16>(nActivateOutlineLvl) ).GetNumberingType()
1152*b1cdbd2cSJim Jagielski                             == SVX_NUM_NUMBER_NONE )
1153*b1cdbd2cSJim Jagielski                     {
1154*b1cdbd2cSJim Jagielski                         // activate outline numbering
1155*b1cdbd2cSJim Jagielski                         bActivateOutlineRule = true;
1156*b1cdbd2cSJim Jagielski                     }
1157*b1cdbd2cSJim Jagielski                     else
1158*b1cdbd2cSJim Jagielski                     {
1159*b1cdbd2cSJim Jagielski                         // turning on outline numbering at current cursor position
1160*b1cdbd2cSJim Jagielski                         bContinueFoundNumRule = true;
1161*b1cdbd2cSJim Jagielski                     }
1162*b1cdbd2cSJim Jagielski                 }
1163*b1cdbd2cSJim Jagielski                 else
1164*b1cdbd2cSJim Jagielski                 {
1165*b1cdbd2cSJim Jagielski                     // --> OD 2009-08-27 #i101234#
1166*b1cdbd2cSJim Jagielski                     // activate outline numbering, because from the precondition
1167*b1cdbd2cSJim Jagielski                     // it's known, that <SwEdit::HasNumber()> == sal_False
1168*b1cdbd2cSJim Jagielski                     bActivateOutlineRule = true;
1169*b1cdbd2cSJim Jagielski 					nActivateOutlineLvl = pColl->GetAssignedOutlineStyleLevel();//<-end,zhaojianwei
1170*b1cdbd2cSJim Jagielski                 }
1171*b1cdbd2cSJim Jagielski             }
1172*b1cdbd2cSJim Jagielski             else if ( !pNumRule )
1173*b1cdbd2cSJim Jagielski             {
1174*b1cdbd2cSJim Jagielski                 // --> OD 2009-08-27 #i101234#
1175*b1cdbd2cSJim Jagielski                 // Check, if corresponding list level of the outline numbering
1176*b1cdbd2cSJim Jagielski                 // has already a numbering format set.
1177*b1cdbd2cSJim Jagielski                 nActivateOutlineLvl = pColl->GetAssignedOutlineStyleLevel();//<-end,zhaojianwei,need further consideration
1178*b1cdbd2cSJim Jagielski                 if ( pCollRule->Get( static_cast<sal_uInt16>(nActivateOutlineLvl) ).GetNumberingType()
1179*b1cdbd2cSJim Jagielski                                 == SVX_NUM_NUMBER_NONE )
1180*b1cdbd2cSJim Jagielski                 {
1181*b1cdbd2cSJim Jagielski                     // activate outline numbering, because from the precondition
1182*b1cdbd2cSJim Jagielski                     // it's known, that <SwEdit::HasNumber()> == sal_False
1183*b1cdbd2cSJim Jagielski                     bActivateOutlineRule = true;
1184*b1cdbd2cSJim Jagielski                 }
1185*b1cdbd2cSJim Jagielski                 else
1186*b1cdbd2cSJim Jagielski                 {
1187*b1cdbd2cSJim Jagielski                     // turning on outline numbering at current cursor position
1188*b1cdbd2cSJim Jagielski                     bContinueFoundNumRule = true;
1189*b1cdbd2cSJim Jagielski                 }
1190*b1cdbd2cSJim Jagielski                 // <--
1191*b1cdbd2cSJim Jagielski             }
1192*b1cdbd2cSJim Jagielski             else
1193*b1cdbd2cSJim Jagielski             {
1194*b1cdbd2cSJim Jagielski                 // check, if numbering of the outline level of the pararaph
1195*b1cdbd2cSJim Jagielski                 // style is active. If not, activate this outline level.
1196*b1cdbd2cSJim Jagielski 				nActivateOutlineLvl = pColl->GetAssignedOutlineStyleLevel();//#outline level,zhaojianwei
1197*b1cdbd2cSJim Jagielski                 ASSERT( pColl->IsAssignedToListLevelOfOutlineStyle(),//#outline level,zhaojianwei
1198*b1cdbd2cSJim Jagielski                         "<SwWrtShell::NumOrBulletOn(..)> - paragraph style with outline rule, but no outline level" );
1199*b1cdbd2cSJim Jagielski                 if ( pColl->IsAssignedToListLevelOfOutlineStyle() &&//#outline level,zhaojianwei
1200*b1cdbd2cSJim Jagielski                      pCollRule->Get( static_cast<sal_uInt16>(nActivateOutlineLvl) ).GetNumberingType()
1201*b1cdbd2cSJim Jagielski                         == SVX_NUM_NUMBER_NONE )
1202*b1cdbd2cSJim Jagielski                 {
1203*b1cdbd2cSJim Jagielski                     // activate outline numbering
1204*b1cdbd2cSJim Jagielski                     bActivateOutlineRule = true;
1205*b1cdbd2cSJim Jagielski                 }
1206*b1cdbd2cSJim Jagielski                 else
1207*b1cdbd2cSJim Jagielski                 {
1208*b1cdbd2cSJim Jagielski                     // turning on outline numbering at current cursor position
1209*b1cdbd2cSJim Jagielski                     bContinueFoundNumRule = true;
1210*b1cdbd2cSJim Jagielski                 }
1211*b1cdbd2cSJim Jagielski             }
1212*b1cdbd2cSJim Jagielski             pNumRule = pCollRule;
1213*b1cdbd2cSJim Jagielski         }
1214*b1cdbd2cSJim Jagielski     }
1215*b1cdbd2cSJim Jagielski 
1216*b1cdbd2cSJim Jagielski     // --> OD 2005-10-25 #b6340308#
1217*b1cdbd2cSJim Jagielski     // Only automatic numbering/bullet rules should be changed.
1218*b1cdbd2cSJim Jagielski     // Note: The outline numbering rule is also an automatic one. It's only
1219*b1cdbd2cSJim Jagielski     //       changed, if it has to be activated.
1220*b1cdbd2cSJim Jagielski     if ( pNumRule )
1221*b1cdbd2cSJim Jagielski     {
1222*b1cdbd2cSJim Jagielski         if ( !pNumRule->IsAutoRule() )
1223*b1cdbd2cSJim Jagielski         {
1224*b1cdbd2cSJim Jagielski             pNumRule = 0;
1225*b1cdbd2cSJim Jagielski         }
1226*b1cdbd2cSJim Jagielski         else if ( pNumRule == GetDoc()->GetOutlineNumRule() &&
1227*b1cdbd2cSJim Jagielski                   !bActivateOutlineRule && !bContinueFoundNumRule )
1228*b1cdbd2cSJim Jagielski         {
1229*b1cdbd2cSJim Jagielski             pNumRule = 0;
1230*b1cdbd2cSJim Jagielski         }
1231*b1cdbd2cSJim Jagielski     }
1232*b1cdbd2cSJim Jagielski     // <--
1233*b1cdbd2cSJim Jagielski 
1234*b1cdbd2cSJim Jagielski     // --> OD 2005-10-25 #b6340308#
1235*b1cdbd2cSJim Jagielski     // Search for a previous numbering/bullet rule to continue it.
1236*b1cdbd2cSJim Jagielski     // --> OD 2008-03-18 #refactorlists#
1237*b1cdbd2cSJim Jagielski     String sContinuedListId;
1238*b1cdbd2cSJim Jagielski     if ( !pNumRule )
1239*b1cdbd2cSJim Jagielski     {
1240*b1cdbd2cSJim Jagielski         pNumRule = GetDoc()->SearchNumRule( *GetCrsr()->GetPoint(),
1241*b1cdbd2cSJim Jagielski                                             false, bNum, false, 0,
1242*b1cdbd2cSJim Jagielski                                             sContinuedListId );
1243*b1cdbd2cSJim Jagielski         bContinueFoundNumRule = pNumRule != 0;
1244*b1cdbd2cSJim Jagielski     }
1245*b1cdbd2cSJim Jagielski     // <--
1246*b1cdbd2cSJim Jagielski 
1247*b1cdbd2cSJim Jagielski     if (pNumRule)
1248*b1cdbd2cSJim Jagielski     {
1249*b1cdbd2cSJim Jagielski         SwNumRule aNumRule(*pNumRule);
1250*b1cdbd2cSJim Jagielski 
1251*b1cdbd2cSJim Jagielski         // --> OD 2005-10-25 #b6340308#
1252*b1cdbd2cSJim Jagielski         // do not change found numbering/bullet rule, if it should only be continued.
1253*b1cdbd2cSJim Jagielski         if ( !bContinueFoundNumRule )
1254*b1cdbd2cSJim Jagielski         {
1255*b1cdbd2cSJim Jagielski             SwTxtNode * pTxtNode = GetCrsr()->GetPoint()->nNode.GetNode().GetTxtNode();
1256*b1cdbd2cSJim Jagielski 
1257*b1cdbd2cSJim Jagielski             if (pTxtNode)
1258*b1cdbd2cSJim Jagielski             {
1259*b1cdbd2cSJim Jagielski                 // --> OD 2005-10-26 #b6340308# - use above retrieve outline
1260*b1cdbd2cSJim Jagielski                 // level, if outline numbering has to be activated.
1261*b1cdbd2cSJim Jagielski                 int nLevel = bActivateOutlineRule  ////#outline level,zhaojianwei,need more consideration
1262*b1cdbd2cSJim Jagielski                               ? nActivateOutlineLvl
1263*b1cdbd2cSJim Jagielski                               : pTxtNode->GetActualListLevel();
1264*b1cdbd2cSJim Jagielski                 // <--
1265*b1cdbd2cSJim Jagielski 
1266*b1cdbd2cSJim Jagielski                 if (nLevel < 0)
1267*b1cdbd2cSJim Jagielski                     nLevel = 0;
1268*b1cdbd2cSJim Jagielski 
1269*b1cdbd2cSJim Jagielski                 if (nLevel >= MAXLEVEL)
1270*b1cdbd2cSJim Jagielski                     nLevel = MAXLEVEL - 1;
1271*b1cdbd2cSJim Jagielski 
1272*b1cdbd2cSJim Jagielski                 SwNumFmt aFmt(aNumRule.Get(static_cast<sal_uInt16>(nLevel)));
1273*b1cdbd2cSJim Jagielski 
1274*b1cdbd2cSJim Jagielski                 if (bNum)
1275*b1cdbd2cSJim Jagielski                     aFmt.SetNumberingType(SVX_NUM_ARABIC);
1276*b1cdbd2cSJim Jagielski                 else
1277*b1cdbd2cSJim Jagielski                 {
1278*b1cdbd2cSJim Jagielski                     // --> OD 2008-06-03 #i63395#
1279*b1cdbd2cSJim Jagielski                     // Only apply user defined default bullet font
1280*b1cdbd2cSJim Jagielski                     if ( numfunc::IsDefBulletFontUserDefined() )
1281*b1cdbd2cSJim Jagielski                     {
1282*b1cdbd2cSJim Jagielski                         const Font* pFnt = &numfunc::GetDefBulletFont();
1283*b1cdbd2cSJim Jagielski                         aFmt.SetBulletFont( pFnt );
1284*b1cdbd2cSJim Jagielski                     }
1285*b1cdbd2cSJim Jagielski                     // <--
1286*b1cdbd2cSJim Jagielski                     aFmt.SetBulletChar( numfunc::GetBulletChar(static_cast<sal_uInt8>(nLevel)));
1287*b1cdbd2cSJim Jagielski                     aFmt.SetNumberingType(SVX_NUM_CHAR_SPECIAL);
1288*b1cdbd2cSJim Jagielski                     // #i93908# clear suffix for bullet lists
1289*b1cdbd2cSJim Jagielski                     aFmt.SetPrefix(::rtl::OUString());
1290*b1cdbd2cSJim Jagielski                     aFmt.SetSuffix(::rtl::OUString());
1291*b1cdbd2cSJim Jagielski                 }
1292*b1cdbd2cSJim Jagielski                 aNumRule.Set(static_cast<sal_uInt16>(nLevel), aFmt);
1293*b1cdbd2cSJim Jagielski             }
1294*b1cdbd2cSJim Jagielski         }
1295*b1cdbd2cSJim Jagielski         // <--
1296*b1cdbd2cSJim Jagielski 
1297*b1cdbd2cSJim Jagielski         // --> OD 2008-02-08 #newlistlevelattrs#
1298*b1cdbd2cSJim Jagielski         // reset indent attribute on applying list style
1299*b1cdbd2cSJim Jagielski         // --> OD 2008-03-27 #refactorlists#
1300*b1cdbd2cSJim Jagielski         SetCurNumRule( aNumRule, false, sContinuedListId, true );
1301*b1cdbd2cSJim Jagielski         // <--
1302*b1cdbd2cSJim Jagielski     }
1303*b1cdbd2cSJim Jagielski     else
1304*b1cdbd2cSJim Jagielski     {
1305*b1cdbd2cSJim Jagielski         // --> OD 2009-08-27 #i95907#
1306*b1cdbd2cSJim Jagielski         const SvxNumberFormat::SvxNumPositionAndSpaceMode ePosAndSpaceMode(
1307*b1cdbd2cSJim Jagielski                                     numfunc::GetDefaultPositionAndSpaceMode() );
1308*b1cdbd2cSJim Jagielski         // --> OD 2008-02-11 #newlistlevelattrs#
1309*b1cdbd2cSJim Jagielski         SwNumRule aNumRule( GetUniqueNumRuleName(), ePosAndSpaceMode );
1310*b1cdbd2cSJim Jagielski         // <--
1311*b1cdbd2cSJim Jagielski         // <--
1312*b1cdbd2cSJim Jagielski         // Zeichenvorlage an die Numerierung haengen
1313*b1cdbd2cSJim Jagielski         SwCharFmt* pChrFmt;
1314*b1cdbd2cSJim Jagielski         SwDocShell* pDocSh = GetView().GetDocShell();
1315*b1cdbd2cSJim Jagielski         // --> OD 2008-06-03 #i63395#
1316*b1cdbd2cSJim Jagielski         // Only apply user defined default bullet font
1317*b1cdbd2cSJim Jagielski         const Font* pFnt = numfunc::IsDefBulletFontUserDefined()
1318*b1cdbd2cSJim Jagielski                            ? &numfunc::GetDefBulletFont()
1319*b1cdbd2cSJim Jagielski                            : 0;
1320*b1cdbd2cSJim Jagielski         // <--
1321*b1cdbd2cSJim Jagielski 
1322*b1cdbd2cSJim Jagielski         if (bNum)
1323*b1cdbd2cSJim Jagielski         {
1324*b1cdbd2cSJim Jagielski             pChrFmt = GetCharFmtFromPool( RES_POOLCHR_NUM_LEVEL );
1325*b1cdbd2cSJim Jagielski         }
1326*b1cdbd2cSJim Jagielski         else
1327*b1cdbd2cSJim Jagielski         {
1328*b1cdbd2cSJim Jagielski             pChrFmt = GetCharFmtFromPool( RES_POOLCHR_BUL_LEVEL );
1329*b1cdbd2cSJim Jagielski         }
1330*b1cdbd2cSJim Jagielski 
1331*b1cdbd2cSJim Jagielski         const SwTxtNode* pTxtNode = GetCrsr()->GetPoint()->nNode.GetNode().GetTxtNode();
1332*b1cdbd2cSJim Jagielski         const SwTwips nWidthOfTabs = pTxtNode
1333*b1cdbd2cSJim Jagielski                                      ? pTxtNode->GetWidthOfLeadingTabs()
1334*b1cdbd2cSJim Jagielski                                      : 0;
1335*b1cdbd2cSJim Jagielski         GetDoc()->RemoveLeadingWhiteSpace( *GetCrsr()->GetPoint() );
1336*b1cdbd2cSJim Jagielski 
1337*b1cdbd2cSJim Jagielski         const bool bHtml = 0 != PTR_CAST(SwWebDocShell, pDocSh);
1338*b1cdbd2cSJim Jagielski         const bool bRightToLeft = IsInRightToLeftText();
1339*b1cdbd2cSJim Jagielski         for( sal_uInt8 nLvl = 0; nLvl < MAXLEVEL; ++nLvl )
1340*b1cdbd2cSJim Jagielski         {
1341*b1cdbd2cSJim Jagielski             SwNumFmt aFmt( aNumRule.Get( nLvl ) );
1342*b1cdbd2cSJim Jagielski             aFmt.SetCharFmt( pChrFmt );
1343*b1cdbd2cSJim Jagielski 
1344*b1cdbd2cSJim Jagielski             if (! bNum)
1345*b1cdbd2cSJim Jagielski             {
1346*b1cdbd2cSJim Jagielski                 // --> OD 2008-06-03 #i63395#
1347*b1cdbd2cSJim Jagielski                 // Only apply user defined default bullet font
1348*b1cdbd2cSJim Jagielski                 if ( pFnt )
1349*b1cdbd2cSJim Jagielski                 {
1350*b1cdbd2cSJim Jagielski                     aFmt.SetBulletFont( pFnt );
1351*b1cdbd2cSJim Jagielski                 }
1352*b1cdbd2cSJim Jagielski                 aFmt.SetBulletChar( numfunc::GetBulletChar(nLvl) );
1353*b1cdbd2cSJim Jagielski                 aFmt.SetNumberingType(SVX_NUM_CHAR_SPECIAL);
1354*b1cdbd2cSJim Jagielski                 // #i93908# clear suffix for bullet lists
1355*b1cdbd2cSJim Jagielski                 aFmt.SetPrefix(::rtl::OUString());
1356*b1cdbd2cSJim Jagielski                 aFmt.SetSuffix(::rtl::OUString());
1357*b1cdbd2cSJim Jagielski             }
1358*b1cdbd2cSJim Jagielski 
1359*b1cdbd2cSJim Jagielski             // --> OD 2009-08-26 #i95907#
1360*b1cdbd2cSJim Jagielski             if ( ePosAndSpaceMode == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
1361*b1cdbd2cSJim Jagielski             {
1362*b1cdbd2cSJim Jagielski                 if(bHtml && nLvl)
1363*b1cdbd2cSJim Jagielski                 {
1364*b1cdbd2cSJim Jagielski                     // 1/2" fuer HTML
1365*b1cdbd2cSJim Jagielski                     aFmt.SetLSpace(720);
1366*b1cdbd2cSJim Jagielski                     aFmt.SetAbsLSpace(nLvl * 720);
1367*b1cdbd2cSJim Jagielski                 }
1368*b1cdbd2cSJim Jagielski                 else if ( nWidthOfTabs > 0 )
1369*b1cdbd2cSJim Jagielski                 {
1370*b1cdbd2cSJim Jagielski                     aFmt.SetAbsLSpace(nWidthOfTabs + nLvl * 720);
1371*b1cdbd2cSJim Jagielski                 }
1372*b1cdbd2cSJim Jagielski             }
1373*b1cdbd2cSJim Jagielski             // <--
1374*b1cdbd2cSJim Jagielski 
1375*b1cdbd2cSJim Jagielski             // --> FME 2005-01-21 #i38904#  Default alignment for
1376*b1cdbd2cSJim Jagielski             // numbering/bullet should be rtl in rtl paragraph:
1377*b1cdbd2cSJim Jagielski             if ( bRightToLeft )
1378*b1cdbd2cSJim Jagielski             {
1379*b1cdbd2cSJim Jagielski                 aFmt.SetNumAdjust( SVX_ADJUST_RIGHT );
1380*b1cdbd2cSJim Jagielski             }
1381*b1cdbd2cSJim Jagielski             // <--
1382*b1cdbd2cSJim Jagielski 
1383*b1cdbd2cSJim Jagielski             aNumRule.Set( nLvl, aFmt );
1384*b1cdbd2cSJim Jagielski         }
1385*b1cdbd2cSJim Jagielski 
1386*b1cdbd2cSJim Jagielski         // --> OD 2009-08-26 #i95907#
1387*b1cdbd2cSJim Jagielski         if ( pTxtNode &&
1388*b1cdbd2cSJim Jagielski              ePosAndSpaceMode == SvxNumberFormat::LABEL_ALIGNMENT )
1389*b1cdbd2cSJim Jagielski         {
1390*b1cdbd2cSJim Jagielski             // --> OD 2010-01-05 #b6884103#
1391*b1cdbd2cSJim Jagielski //            short nTxtNodeFirstLineOffset( 0 );
1392*b1cdbd2cSJim Jagielski //            pTxtNode->GetFirstLineOfsWithNum( nTxtNodeFirstLineOffset );
1393*b1cdbd2cSJim Jagielski //            const SwTwips nTxtNodeIndent = pTxtNode->GetLeftMarginForTabCalculation() +
1394*b1cdbd2cSJim Jagielski //                                           nTxtNodeFirstLineOffset;
1395*b1cdbd2cSJim Jagielski             const SwTwips nTxtNodeIndent = pTxtNode->GetAdditionalIndentForStartingNewList();
1396*b1cdbd2cSJim Jagielski             // <--
1397*b1cdbd2cSJim Jagielski             if ( ( nTxtNodeIndent + nWidthOfTabs ) != 0 )
1398*b1cdbd2cSJim Jagielski             {
1399*b1cdbd2cSJim Jagielski                 // --> OD 2010-05-05 #i111172#
1400*b1cdbd2cSJim Jagielski                 // If text node is already inside a list, assure that the indents
1401*b1cdbd2cSJim Jagielski                 // are the same. Thus, adjust the indent change value by subtracting
1402*b1cdbd2cSJim Jagielski                 // indents of to be applied list style.
1403*b1cdbd2cSJim Jagielski                 SwTwips nIndentChange = nTxtNodeIndent + nWidthOfTabs;
1404*b1cdbd2cSJim Jagielski                 if ( pTxtNode->GetNumRule() )
1405*b1cdbd2cSJim Jagielski                 {
1406*b1cdbd2cSJim Jagielski                     const SwNumFmt aFmt( aNumRule.Get( 0 ) );
1407*b1cdbd2cSJim Jagielski                     if ( aFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT )
1408*b1cdbd2cSJim Jagielski                     {
1409*b1cdbd2cSJim Jagielski                         nIndentChange -= aFmt.GetIndentAt() + aFmt.GetFirstLineIndent();
1410*b1cdbd2cSJim Jagielski                     }
1411*b1cdbd2cSJim Jagielski                 }
1412*b1cdbd2cSJim Jagielski                 // <--
1413*b1cdbd2cSJim Jagielski                 aNumRule.ChangeIndent( nIndentChange );
1414*b1cdbd2cSJim Jagielski             }
1415*b1cdbd2cSJim Jagielski         }
1416*b1cdbd2cSJim Jagielski         // <--
1417*b1cdbd2cSJim Jagielski         // --> OD 2008-02-08 #newlistlevelattrs#
1418*b1cdbd2cSJim Jagielski         // reset indent attribute on applying list style
1419*b1cdbd2cSJim Jagielski         // --> OD 2008-03-17 #refactorlists#
1420*b1cdbd2cSJim Jagielski         // start new list
1421*b1cdbd2cSJim Jagielski         SetCurNumRule( aNumRule, true, String(), true );
1422*b1cdbd2cSJim Jagielski         // <--
1423*b1cdbd2cSJim Jagielski     }
1424*b1cdbd2cSJim Jagielski 
1425*b1cdbd2cSJim Jagielski     EndUndo(UNDO_NUMORNONUM);
1426*b1cdbd2cSJim Jagielski }
1427*b1cdbd2cSJim Jagielski // <- #i40041#
1428*b1cdbd2cSJim Jagielski 
NumOn()1429*b1cdbd2cSJim Jagielski void SwWrtShell::NumOn()
1430*b1cdbd2cSJim Jagielski {
1431*b1cdbd2cSJim Jagielski     NumOrBulletOn(sal_True);
1432*b1cdbd2cSJim Jagielski }
1433*b1cdbd2cSJim Jagielski 
NumOrBulletOff()1434*b1cdbd2cSJim Jagielski void SwWrtShell::NumOrBulletOff()
1435*b1cdbd2cSJim Jagielski {
1436*b1cdbd2cSJim Jagielski     const SwNumRule * pCurNumRule = GetCurNumRule();
1437*b1cdbd2cSJim Jagielski 
1438*b1cdbd2cSJim Jagielski     if (pCurNumRule)
1439*b1cdbd2cSJim Jagielski     {
1440*b1cdbd2cSJim Jagielski         if (pCurNumRule->IsOutlineRule())
1441*b1cdbd2cSJim Jagielski         {
1442*b1cdbd2cSJim Jagielski             SwNumRule aNumRule(*pCurNumRule);
1443*b1cdbd2cSJim Jagielski 
1444*b1cdbd2cSJim Jagielski             SwTxtNode * pTxtNode =
1445*b1cdbd2cSJim Jagielski                 GetCrsr()->GetPoint()->nNode.GetNode().GetTxtNode();
1446*b1cdbd2cSJim Jagielski 
1447*b1cdbd2cSJim Jagielski             if (pTxtNode)
1448*b1cdbd2cSJim Jagielski             {
1449*b1cdbd2cSJim Jagielski                 sal_uInt16 nLevel = sal::static_int_cast<sal_uInt16, sal_Int32>(pTxtNode->GetActualListLevel());
1450*b1cdbd2cSJim Jagielski                 SwNumFmt aFmt(aNumRule.Get(nLevel));
1451*b1cdbd2cSJim Jagielski 
1452*b1cdbd2cSJim Jagielski                 aFmt.SetNumberingType(SVX_NUM_NUMBER_NONE);
1453*b1cdbd2cSJim Jagielski                 aNumRule.Set(nLevel, aFmt);
1454*b1cdbd2cSJim Jagielski 
1455*b1cdbd2cSJim Jagielski                 // --> OD 2008-03-17 #refactorlists#
1456*b1cdbd2cSJim Jagielski                 // no start or continuation of a list - the outline style is only changed.
1457*b1cdbd2cSJim Jagielski                 SetCurNumRule( aNumRule, false );
1458*b1cdbd2cSJim Jagielski                 // <--
1459*b1cdbd2cSJim Jagielski             }
1460*b1cdbd2cSJim Jagielski         }
1461*b1cdbd2cSJim Jagielski         else
1462*b1cdbd2cSJim Jagielski         {
1463*b1cdbd2cSJim Jagielski             DelNumRules();
1464*b1cdbd2cSJim Jagielski         }
1465*b1cdbd2cSJim Jagielski 
1466*b1cdbd2cSJim Jagielski         // --> OD 2005-10-24 #126346# - Cursor can not be anymore in front of
1467*b1cdbd2cSJim Jagielski         // a label, because numbering/bullet is switched off.
1468*b1cdbd2cSJim Jagielski         SetInFrontOfLabel( sal_False );
1469*b1cdbd2cSJim Jagielski         // <--
1470*b1cdbd2cSJim Jagielski     }
1471*b1cdbd2cSJim Jagielski }
1472*b1cdbd2cSJim Jagielski // <- #i29560#
1473*b1cdbd2cSJim Jagielski 
1474*b1cdbd2cSJim Jagielski /*------------------------------------------------------------------------
1475*b1cdbd2cSJim Jagielski  Beschreibung:	Default-Bulletliste erfragen
1476*b1cdbd2cSJim Jagielski ------------------------------------------------------------------------*/
1477*b1cdbd2cSJim Jagielski 
BulletOn()1478*b1cdbd2cSJim Jagielski void SwWrtShell::BulletOn()
1479*b1cdbd2cSJim Jagielski {
1480*b1cdbd2cSJim Jagielski     NumOrBulletOn(sal_False);
1481*b1cdbd2cSJim Jagielski }
1482*b1cdbd2cSJim Jagielski 
1483*b1cdbd2cSJim Jagielski 
1484*b1cdbd2cSJim Jagielski /*--------------------------------------------------
1485*b1cdbd2cSJim Jagielski 
1486*b1cdbd2cSJim Jagielski --------------------------------------------------*/
GetSelectionType() const1487*b1cdbd2cSJim Jagielski SelectionType SwWrtShell::GetSelectionType() const
1488*b1cdbd2cSJim Jagielski {
1489*b1cdbd2cSJim Jagielski     // ContentType kann nicht ermittelt werden innerhalb einer
1490*b1cdbd2cSJim Jagielski     // Start-/Endactionklammerung.
1491*b1cdbd2cSJim Jagielski     // Da es keinen ungueltigen Wert gibt, wird TEXT geliefert.
1492*b1cdbd2cSJim Jagielski     // Der Wert ist egal, da in EndAction ohnehin aktualisiert wird.
1493*b1cdbd2cSJim Jagielski 
1494*b1cdbd2cSJim Jagielski     if ( BasicActionPend() )
1495*b1cdbd2cSJim Jagielski         return IsSelFrmMode() ? nsSelectionType::SEL_FRM : nsSelectionType::SEL_TXT;
1496*b1cdbd2cSJim Jagielski 
1497*b1cdbd2cSJim Jagielski     SwView &_rView = ((SwView&)GetView());
1498*b1cdbd2cSJim Jagielski     if (_rView.GetPostItMgr() && _rView.GetPostItMgr()->HasActiveSidebarWin() )
1499*b1cdbd2cSJim Jagielski         return nsSelectionType::SEL_POSTIT;
1500*b1cdbd2cSJim Jagielski 
1501*b1cdbd2cSJim Jagielski     int nCnt;
1502*b1cdbd2cSJim Jagielski     // Insertion of a text frame is not a DrawMode
1503*b1cdbd2cSJim Jagielski     if ( !_rView.GetEditWin().IsFrmAction() &&
1504*b1cdbd2cSJim Jagielski         (IsObjSelected() || (_rView.IsDrawMode() && !IsFrmSelected()) ))
1505*b1cdbd2cSJim Jagielski     {
1506*b1cdbd2cSJim Jagielski         if (GetDrawView()->IsTextEdit())
1507*b1cdbd2cSJim Jagielski             nCnt = nsSelectionType::SEL_DRW_TXT;
1508*b1cdbd2cSJim Jagielski         else
1509*b1cdbd2cSJim Jagielski         {
1510*b1cdbd2cSJim Jagielski             if (GetView().IsFormMode())	// Nur Forms selektiert
1511*b1cdbd2cSJim Jagielski                 nCnt = nsSelectionType::SEL_DRW_FORM;
1512*b1cdbd2cSJim Jagielski             else
1513*b1cdbd2cSJim Jagielski                 nCnt = nsSelectionType::SEL_DRW;            // Irgendein Draw-Objekt
1514*b1cdbd2cSJim Jagielski 
1515*b1cdbd2cSJim Jagielski             if (_rView.IsBezierEditMode())
1516*b1cdbd2cSJim Jagielski                 nCnt |= nsSelectionType::SEL_BEZ;
1517*b1cdbd2cSJim Jagielski             else if( GetDrawView()->GetContext() == SDRCONTEXT_MEDIA )
1518*b1cdbd2cSJim Jagielski                 nCnt |= nsSelectionType::SEL_MEDIA;
1519*b1cdbd2cSJim Jagielski 
1520*b1cdbd2cSJim Jagielski             if (svx::checkForSelectedCustomShapes(
1521*b1cdbd2cSJim Jagielski                 const_cast<SdrView *>(GetDrawView()),
1522*b1cdbd2cSJim Jagielski                 true /* bOnlyExtruded */ ))
1523*b1cdbd2cSJim Jagielski             {
1524*b1cdbd2cSJim Jagielski                 nCnt |= nsSelectionType::SEL_EXTRUDED_CUSTOMSHAPE;
1525*b1cdbd2cSJim Jagielski             }
1526*b1cdbd2cSJim Jagielski             sal_uInt32 nCheckStatus = 0;
1527*b1cdbd2cSJim Jagielski             if (svx::checkForSelectedFontWork(
1528*b1cdbd2cSJim Jagielski                 const_cast<SdrView *>(GetDrawView()), nCheckStatus ))
1529*b1cdbd2cSJim Jagielski             {
1530*b1cdbd2cSJim Jagielski                 nCnt |= nsSelectionType::SEL_FONTWORK;
1531*b1cdbd2cSJim Jagielski             }
1532*b1cdbd2cSJim Jagielski         }
1533*b1cdbd2cSJim Jagielski 
1534*b1cdbd2cSJim Jagielski         return nCnt;
1535*b1cdbd2cSJim Jagielski     }
1536*b1cdbd2cSJim Jagielski 
1537*b1cdbd2cSJim Jagielski     nCnt = GetCntType();
1538*b1cdbd2cSJim Jagielski 
1539*b1cdbd2cSJim Jagielski     if ( IsFrmSelected() )
1540*b1cdbd2cSJim Jagielski     {
1541*b1cdbd2cSJim Jagielski         if (_rView.IsDrawMode())
1542*b1cdbd2cSJim Jagielski             _rView.LeaveDrawCreate();   // Aufraeumen (Bug #45639)
1543*b1cdbd2cSJim Jagielski         if ( !(nCnt & (CNT_GRF | CNT_OLE)) )
1544*b1cdbd2cSJim Jagielski             return nsSelectionType::SEL_FRM;
1545*b1cdbd2cSJim Jagielski     }
1546*b1cdbd2cSJim Jagielski 
1547*b1cdbd2cSJim Jagielski     if ( IsCrsrInTbl() )
1548*b1cdbd2cSJim Jagielski         nCnt |= nsSelectionType::SEL_TBL;
1549*b1cdbd2cSJim Jagielski 
1550*b1cdbd2cSJim Jagielski     if ( IsTableMode() )
1551*b1cdbd2cSJim Jagielski         nCnt |= (nsSelectionType::SEL_TBL | nsSelectionType::SEL_TBL_CELLS);
1552*b1cdbd2cSJim Jagielski 
1553*b1cdbd2cSJim Jagielski     // Do not pop up numbering toolbar, if the text node has a numbering of type SVX_NUM_NUMBER_NONE.
1554*b1cdbd2cSJim Jagielski     const SwNumRule* pNumRule = GetCurNumRule();
1555*b1cdbd2cSJim Jagielski     if ( pNumRule )
1556*b1cdbd2cSJim Jagielski     {
1557*b1cdbd2cSJim Jagielski         const SwTxtNode* pTxtNd =
1558*b1cdbd2cSJim Jagielski             GetCrsr()->GetPoint()->nNode.GetNode().GetTxtNode();
1559*b1cdbd2cSJim Jagielski 
1560*b1cdbd2cSJim Jagielski         if ( pTxtNd && pTxtNd->IsInList() )
1561*b1cdbd2cSJim Jagielski         {
1562*b1cdbd2cSJim Jagielski             const SwNumFmt& rFmt = pNumRule->Get(sal::static_int_cast< sal_uInt8, sal_Int32>(pTxtNd->GetActualListLevel()));
1563*b1cdbd2cSJim Jagielski             if ( SVX_NUM_NUMBER_NONE != rFmt.GetNumberingType() )
1564*b1cdbd2cSJim Jagielski                 nCnt |= nsSelectionType::SEL_NUM;
1565*b1cdbd2cSJim Jagielski         }
1566*b1cdbd2cSJim Jagielski     }
1567*b1cdbd2cSJim Jagielski 
1568*b1cdbd2cSJim Jagielski     return nCnt;
1569*b1cdbd2cSJim Jagielski }
1570*b1cdbd2cSJim Jagielski 
1571*b1cdbd2cSJim Jagielski /*------------------------------------------------------------------------
1572*b1cdbd2cSJim Jagielski  Beschreibung:	Finden der TextCollection mit dem Name rCollname
1573*b1cdbd2cSJim Jagielski  Return:				Pointer auf die Collection oder 0, wenn keine
1574*b1cdbd2cSJim Jagielski 								TextCollection mit diesem Namen existiert oder
1575*b1cdbd2cSJim Jagielski 								diese eine Defaultvorlage ist.
1576*b1cdbd2cSJim Jagielski ------------------------------------------------------------------------*/
1577*b1cdbd2cSJim Jagielski 
1578*b1cdbd2cSJim Jagielski 
GetParaStyle(const String & rCollName,GetStyle eCreate)1579*b1cdbd2cSJim Jagielski SwTxtFmtColl *SwWrtShell::GetParaStyle(const String &rCollName, GetStyle eCreate )
1580*b1cdbd2cSJim Jagielski {
1581*b1cdbd2cSJim Jagielski 	SwTxtFmtColl* pColl = FindTxtFmtCollByName( rCollName );
1582*b1cdbd2cSJim Jagielski 	if( !pColl && GETSTYLE_NOCREATE != eCreate )
1583*b1cdbd2cSJim Jagielski 	{
1584*b1cdbd2cSJim Jagielski 		sal_uInt16 nId = SwStyleNameMapper::GetPoolIdFromUIName( rCollName, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL );
1585*b1cdbd2cSJim Jagielski 		if( USHRT_MAX != nId || GETSTYLE_CREATEANY == eCreate )
1586*b1cdbd2cSJim Jagielski 			pColl = GetTxtCollFromPool( nId );
1587*b1cdbd2cSJim Jagielski 	}
1588*b1cdbd2cSJim Jagielski 	return pColl;
1589*b1cdbd2cSJim Jagielski }
1590*b1cdbd2cSJim Jagielski /*------------------------------------------------------------------------
1591*b1cdbd2cSJim Jagielski  Beschreibung:	Finden der Zeichenvorlage mit dem Name rCollname
1592*b1cdbd2cSJim Jagielski  Return:				Pointer auf die Collection oder 0, wenn keine
1593*b1cdbd2cSJim Jagielski 								Zeichenvorlage mit diesem Namen existiert oder
1594*b1cdbd2cSJim Jagielski 								diese eine Defaultvorlage oder automatische Vorlage ist.
1595*b1cdbd2cSJim Jagielski ------------------------------------------------------------------------*/
1596*b1cdbd2cSJim Jagielski 
1597*b1cdbd2cSJim Jagielski 
1598*b1cdbd2cSJim Jagielski 
GetCharStyle(const String & rFmtName,GetStyle eCreate)1599*b1cdbd2cSJim Jagielski SwCharFmt *SwWrtShell::GetCharStyle(const String &rFmtName, GetStyle eCreate )
1600*b1cdbd2cSJim Jagielski {
1601*b1cdbd2cSJim Jagielski 	SwCharFmt* pFmt = FindCharFmtByName( rFmtName );
1602*b1cdbd2cSJim Jagielski 	if( !pFmt && GETSTYLE_NOCREATE != eCreate )
1603*b1cdbd2cSJim Jagielski 	{
1604*b1cdbd2cSJim Jagielski 		sal_uInt16 nId = SwStyleNameMapper::GetPoolIdFromUIName( rFmtName, nsSwGetPoolIdFromName::GET_POOLID_CHRFMT );
1605*b1cdbd2cSJim Jagielski 		if( USHRT_MAX != nId || GETSTYLE_CREATEANY == eCreate )
1606*b1cdbd2cSJim Jagielski 			pFmt = (SwCharFmt*)GetFmtFromPool( nId );
1607*b1cdbd2cSJim Jagielski 	}
1608*b1cdbd2cSJim Jagielski 	return pFmt;
1609*b1cdbd2cSJim Jagielski }
1610*b1cdbd2cSJim Jagielski 
1611*b1cdbd2cSJim Jagielski /*------------------------------------------------------------------------
1612*b1cdbd2cSJim Jagielski  Beschreibung:	Finden des Tabellenformates mit dem Name rFmtname
1613*b1cdbd2cSJim Jagielski  Return:				Pointer auf das Format oder 0, wenn kein
1614*b1cdbd2cSJim Jagielski 								Rahmenformat mit diesem Namen existiert oder
1615*b1cdbd2cSJim Jagielski 								dieses eine Defaultformat oder automatisches Format ist.
1616*b1cdbd2cSJim Jagielski ------------------------------------------------------------------------*/
1617*b1cdbd2cSJim Jagielski 
1618*b1cdbd2cSJim Jagielski 
1619*b1cdbd2cSJim Jagielski 
GetTblStyle(const String & rFmtName)1620*b1cdbd2cSJim Jagielski SwFrmFmt *SwWrtShell::GetTblStyle(const String &rFmtName)
1621*b1cdbd2cSJim Jagielski {
1622*b1cdbd2cSJim Jagielski 	SwFrmFmt *pFmt = 0;
1623*b1cdbd2cSJim Jagielski 	for( sal_uInt16 i = GetTblFrmFmtCount(); i; )
1624*b1cdbd2cSJim Jagielski 		if( !( pFmt = &GetTblFrmFmt( --i ) )->IsDefault() &&
1625*b1cdbd2cSJim Jagielski 			pFmt->GetName() == rFmtName && IsUsed( *pFmt ) )
1626*b1cdbd2cSJim Jagielski 			return pFmt;
1627*b1cdbd2cSJim Jagielski 	return 0;
1628*b1cdbd2cSJim Jagielski }
1629*b1cdbd2cSJim Jagielski 
1630*b1cdbd2cSJim Jagielski 
1631*b1cdbd2cSJim Jagielski /*------------------------------------------------------------------------
1632*b1cdbd2cSJim Jagielski  Beschreibung:	Anwenden der Vorlagen
1633*b1cdbd2cSJim Jagielski ------------------------------------------------------------------------*/
1634*b1cdbd2cSJim Jagielski 
1635*b1cdbd2cSJim Jagielski 
1636*b1cdbd2cSJim Jagielski 
SetPageStyle(const String & rCollName)1637*b1cdbd2cSJim Jagielski void SwWrtShell::SetPageStyle(const String &rCollName)
1638*b1cdbd2cSJim Jagielski {
1639*b1cdbd2cSJim Jagielski 	if( !SwCrsrShell::HasSelection() && !IsSelFrmMode() && !IsObjSelected() )
1640*b1cdbd2cSJim Jagielski 	{
1641*b1cdbd2cSJim Jagielski 		SwPageDesc* pDesc = FindPageDescByName( rCollName, sal_True );
1642*b1cdbd2cSJim Jagielski 		if( pDesc )
1643*b1cdbd2cSJim Jagielski 			ChgCurPageDesc( *pDesc );
1644*b1cdbd2cSJim Jagielski 	}
1645*b1cdbd2cSJim Jagielski }
1646*b1cdbd2cSJim Jagielski 
1647*b1cdbd2cSJim Jagielski /*------------------------------------------------------------------------
1648*b1cdbd2cSJim Jagielski  Beschreibung:	Zugriff Vorlagen
1649*b1cdbd2cSJim Jagielski ------------------------------------------------------------------------*/
1650*b1cdbd2cSJim Jagielski 
1651*b1cdbd2cSJim Jagielski 
1652*b1cdbd2cSJim Jagielski 
GetCurPageStyle(const sal_Bool bCalcFrm) const1653*b1cdbd2cSJim Jagielski String SwWrtShell::GetCurPageStyle( const sal_Bool bCalcFrm ) const
1654*b1cdbd2cSJim Jagielski {
1655*b1cdbd2cSJim Jagielski 	return GetPageDesc(GetCurPageDesc( bCalcFrm )).GetName();
1656*b1cdbd2cSJim Jagielski }
1657*b1cdbd2cSJim Jagielski 
1658*b1cdbd2cSJim Jagielski /*------------------------------------------------------------------------
1659*b1cdbd2cSJim Jagielski  Beschreibung:	Aktuelle Vorlage anhand der geltenden Attribute aendern
1660*b1cdbd2cSJim Jagielski ------------------------------------------------------------------------*/
1661*b1cdbd2cSJim Jagielski 
1662*b1cdbd2cSJim Jagielski 
QuickUpdateStyle()1663*b1cdbd2cSJim Jagielski void SwWrtShell::QuickUpdateStyle()
1664*b1cdbd2cSJim Jagielski {
1665*b1cdbd2cSJim Jagielski 	SwTxtFmtColl *pColl = GetCurTxtFmtColl();
1666*b1cdbd2cSJim Jagielski 
1667*b1cdbd2cSJim Jagielski 	// Standard kann nicht geaendert werden
1668*b1cdbd2cSJim Jagielski 	if(pColl && !pColl->IsDefault())
1669*b1cdbd2cSJim Jagielski 	{
1670*b1cdbd2cSJim Jagielski 		FillByEx(pColl);
1671*b1cdbd2cSJim Jagielski 			// Vorlage auch anwenden, um harte Attributierung
1672*b1cdbd2cSJim Jagielski 			// zu entfernen
1673*b1cdbd2cSJim Jagielski 		SetTxtFmtColl(pColl);
1674*b1cdbd2cSJim Jagielski 	}
1675*b1cdbd2cSJim Jagielski }
1676*b1cdbd2cSJim Jagielski 
1677*b1cdbd2cSJim Jagielski 
AutoUpdatePara(SwTxtFmtColl * pColl,const SfxItemSet & rStyleSet)1678*b1cdbd2cSJim Jagielski void SwWrtShell::AutoUpdatePara(SwTxtFmtColl* pColl, const SfxItemSet& rStyleSet)
1679*b1cdbd2cSJim Jagielski {
1680*b1cdbd2cSJim Jagielski 	SfxItemSet aCoreSet( GetAttrPool(),
1681*b1cdbd2cSJim Jagielski 			RES_CHRATR_BEGIN, 			RES_CHRATR_END - 1,
1682*b1cdbd2cSJim Jagielski 			RES_PARATR_BEGIN, 			RES_PARATR_END - 1,
1683*b1cdbd2cSJim Jagielski 			RES_FRMATR_BEGIN, 			RES_FRMATR_END - 1,
1684*b1cdbd2cSJim Jagielski 			SID_ATTR_TABSTOP_POS, 		SID_ATTR_TABSTOP_POS,
1685*b1cdbd2cSJim Jagielski 			SID_ATTR_TABSTOP_DEFAULTS, 	SID_ATTR_TABSTOP_DEFAULTS,
1686*b1cdbd2cSJim Jagielski 			SID_ATTR_TABSTOP_OFFSET, 	SID_ATTR_TABSTOP_OFFSET,
1687*b1cdbd2cSJim Jagielski 			SID_ATTR_BORDER_INNER,		SID_ATTR_BORDER_INNER,
1688*b1cdbd2cSJim Jagielski 			SID_ATTR_PARA_MODEL,		SID_ATTR_PARA_KEEP,
1689*b1cdbd2cSJim Jagielski 			SID_ATTR_PARA_PAGENUM,		SID_ATTR_PARA_PAGENUM,
1690*b1cdbd2cSJim Jagielski 			0	);
1691*b1cdbd2cSJim Jagielski     GetCurAttr( aCoreSet );
1692*b1cdbd2cSJim Jagielski 	sal_Bool bReset = sal_False;
1693*b1cdbd2cSJim Jagielski 	SfxItemIter aParaIter( aCoreSet );
1694*b1cdbd2cSJim Jagielski 	const SfxPoolItem* pParaItem = aParaIter.FirstItem();
1695*b1cdbd2cSJim Jagielski 	while( pParaItem )
1696*b1cdbd2cSJim Jagielski 	{
1697*b1cdbd2cSJim Jagielski 		if(!IsInvalidItem(pParaItem))
1698*b1cdbd2cSJim Jagielski 		{
1699*b1cdbd2cSJim Jagielski 			sal_uInt16 nWhich = pParaItem->Which();
1700*b1cdbd2cSJim Jagielski 			if(SFX_ITEM_SET == aCoreSet.GetItemState(nWhich) &&
1701*b1cdbd2cSJim Jagielski 			   SFX_ITEM_SET == rStyleSet.GetItemState(nWhich))
1702*b1cdbd2cSJim Jagielski 			{
1703*b1cdbd2cSJim Jagielski 				aCoreSet.ClearItem(nWhich);
1704*b1cdbd2cSJim Jagielski 				bReset = sal_True;
1705*b1cdbd2cSJim Jagielski 			}
1706*b1cdbd2cSJim Jagielski 		}
1707*b1cdbd2cSJim Jagielski 		pParaItem = aParaIter.NextItem();
1708*b1cdbd2cSJim Jagielski 	}
1709*b1cdbd2cSJim Jagielski 	StartAction();
1710*b1cdbd2cSJim Jagielski 	if(bReset)
1711*b1cdbd2cSJim Jagielski 	{
1712*b1cdbd2cSJim Jagielski 		ResetAttr();
1713*b1cdbd2cSJim Jagielski 		SetAttrSet(aCoreSet);
1714*b1cdbd2cSJim Jagielski 	}
1715*b1cdbd2cSJim Jagielski 	pDoc->ChgFmt(*pColl, rStyleSet );
1716*b1cdbd2cSJim Jagielski 	EndAction();
1717*b1cdbd2cSJim Jagielski }
1718*b1cdbd2cSJim Jagielski 
1719*b1cdbd2cSJim Jagielski /*-----------------12.03.97 12.24-------------------
1720*b1cdbd2cSJim Jagielski 
1721*b1cdbd2cSJim Jagielski --------------------------------------------------*/
1722*b1cdbd2cSJim Jagielski 
AutoUpdateFrame(SwFrmFmt * pFmt,const SfxItemSet & rStyleSet)1723*b1cdbd2cSJim Jagielski void SwWrtShell::AutoUpdateFrame( SwFrmFmt* pFmt, const SfxItemSet& rStyleSet )
1724*b1cdbd2cSJim Jagielski {
1725*b1cdbd2cSJim Jagielski 	StartAction();
1726*b1cdbd2cSJim Jagielski 
1727*b1cdbd2cSJim Jagielski 	ResetFlyFrmAttr( 0, &rStyleSet );
1728*b1cdbd2cSJim Jagielski     pFmt->SetFmtAttr( rStyleSet );
1729*b1cdbd2cSJim Jagielski 
1730*b1cdbd2cSJim Jagielski 	EndAction();
1731*b1cdbd2cSJim Jagielski }
1732*b1cdbd2cSJim Jagielski 
1733*b1cdbd2cSJim Jagielski 
AutoCorrect(SvxAutoCorrect & rACorr,sal_Unicode cChar)1734*b1cdbd2cSJim Jagielski void SwWrtShell::AutoCorrect( SvxAutoCorrect& rACorr, sal_Unicode cChar )
1735*b1cdbd2cSJim Jagielski {
1736*b1cdbd2cSJim Jagielski 	ResetCursorStack();
1737*b1cdbd2cSJim Jagielski 	if(_CanInsert())
1738*b1cdbd2cSJim Jagielski 	{
1739*b1cdbd2cSJim Jagielski 		sal_Bool bStarted = sal_False;
1740*b1cdbd2cSJim Jagielski 		if(HasSelection())
1741*b1cdbd2cSJim Jagielski 		{
1742*b1cdbd2cSJim Jagielski 				// nur hier klammern, da das normale Insert schon an der
1743*b1cdbd2cSJim Jagielski 				// Editshell geklammert ist
1744*b1cdbd2cSJim Jagielski 			StartAllAction();
1745*b1cdbd2cSJim Jagielski 			StartUndo(UNDO_INSERT);
1746*b1cdbd2cSJim Jagielski 			bStarted = sal_True;
1747*b1cdbd2cSJim Jagielski 			DelRight();
1748*b1cdbd2cSJim Jagielski 		}
1749*b1cdbd2cSJim Jagielski 		SwEditShell::AutoCorrect( rACorr, IsInsMode(), cChar );
1750*b1cdbd2cSJim Jagielski 
1751*b1cdbd2cSJim Jagielski 		if(bStarted)
1752*b1cdbd2cSJim Jagielski 		{
1753*b1cdbd2cSJim Jagielski 			EndAllAction();
1754*b1cdbd2cSJim Jagielski 			EndUndo(UNDO_INSERT);
1755*b1cdbd2cSJim Jagielski 		}
1756*b1cdbd2cSJim Jagielski 	}
1757*b1cdbd2cSJim Jagielski }
1758*b1cdbd2cSJim Jagielski 
1759*b1cdbd2cSJim Jagielski 
1760*b1cdbd2cSJim Jagielski /*
1761*b1cdbd2cSJim Jagielski  * eine Art kontrollierter copy ctor
1762*b1cdbd2cSJim Jagielski  */
1763*b1cdbd2cSJim Jagielski 
SwWrtShell(SwWrtShell & rSh,Window * _pWin,SwView & rShell)1764*b1cdbd2cSJim Jagielski SwWrtShell::SwWrtShell( SwWrtShell& rSh, Window *_pWin, SwView &rShell )
1765*b1cdbd2cSJim Jagielski     : SwFEShell( rSh, _pWin ),
1766*b1cdbd2cSJim Jagielski 	 COMMON_INI_LIST
1767*b1cdbd2cSJim Jagielski {
1768*b1cdbd2cSJim Jagielski 	BITFLD_INI_LIST
1769*b1cdbd2cSJim Jagielski 	SET_CURR_SHELL( this );
1770*b1cdbd2cSJim Jagielski 
1771*b1cdbd2cSJim Jagielski 	SetSfxViewShell( (SfxViewShell *)&rShell );
1772*b1cdbd2cSJim Jagielski 	SetFlyMacroLnk( LINK(this, SwWrtShell, ExecFlyMac) );
1773*b1cdbd2cSJim Jagielski 
1774*b1cdbd2cSJim Jagielski 	// place the cursor on the first field...
1775*b1cdbd2cSJim Jagielski 	IFieldmark *pBM = NULL;
1776*b1cdbd2cSJim Jagielski 	if ( IsFormProtected() && ( pBM = GetFieldmarkAfter( ) ) !=NULL ) {
1777*b1cdbd2cSJim Jagielski 	    GotoFieldmark(pBM);
1778*b1cdbd2cSJim Jagielski 	}
1779*b1cdbd2cSJim Jagielski }
1780*b1cdbd2cSJim Jagielski 
1781*b1cdbd2cSJim Jagielski 
1782*b1cdbd2cSJim Jagielski SwWrtShell::SwWrtShell( SwDoc& rDoc, Window *_pWin, SwView &rShell,
1783*b1cdbd2cSJim Jagielski                         const SwViewOption *pViewOpt )
1784*b1cdbd2cSJim Jagielski     : SwFEShell( rDoc, _pWin, pViewOpt),
1785*b1cdbd2cSJim Jagielski 	  COMMON_INI_LIST
1786*b1cdbd2cSJim Jagielski {
1787*b1cdbd2cSJim Jagielski 	BITFLD_INI_LIST
1788*b1cdbd2cSJim Jagielski 	SET_CURR_SHELL( this );
1789*b1cdbd2cSJim Jagielski 	SetSfxViewShell( (SfxViewShell *)&rShell );
1790*b1cdbd2cSJim Jagielski 	SetFlyMacroLnk( LINK(this, SwWrtShell, ExecFlyMac) );
1791*b1cdbd2cSJim Jagielski }
1792*b1cdbd2cSJim Jagielski 
1793*b1cdbd2cSJim Jagielski /*
1794*b1cdbd2cSJim Jagielski  * ctor
1795*b1cdbd2cSJim Jagielski  */
1796*b1cdbd2cSJim Jagielski 
1797*b1cdbd2cSJim Jagielski 
1798*b1cdbd2cSJim Jagielski 
1799*b1cdbd2cSJim Jagielski SwWrtShell::~SwWrtShell()
1800*b1cdbd2cSJim Jagielski {
1801*b1cdbd2cSJim Jagielski 	SET_CURR_SHELL( this );
1802*b1cdbd2cSJim Jagielski 	while(IsModePushed())
1803*b1cdbd2cSJim Jagielski 		PopMode();
1804*b1cdbd2cSJim Jagielski 	while(PopCrsr(sal_False))
1805*b1cdbd2cSJim Jagielski 		;
1806*b1cdbd2cSJim Jagielski 	SwTransferable::ClearSelection( *this );
1807*b1cdbd2cSJim Jagielski }
1808*b1cdbd2cSJim Jagielski 
Pop(sal_Bool bOldCrsr)1809*b1cdbd2cSJim Jagielski sal_Bool SwWrtShell::Pop( sal_Bool bOldCrsr )
1810*b1cdbd2cSJim Jagielski {
1811*b1cdbd2cSJim Jagielski 	sal_Bool bRet = SwCrsrShell::Pop( bOldCrsr );
1812*b1cdbd2cSJim Jagielski 	if( bRet && IsSelection() )
1813*b1cdbd2cSJim Jagielski 	{
1814*b1cdbd2cSJim Jagielski 		fnSetCrsr = &SwWrtShell::SetCrsrKillSel;
1815*b1cdbd2cSJim Jagielski 		fnKillSel = &SwWrtShell::ResetSelect;
1816*b1cdbd2cSJim Jagielski 	}
1817*b1cdbd2cSJim Jagielski 	return bRet;
1818*b1cdbd2cSJim Jagielski }
1819*b1cdbd2cSJim Jagielski 
1820*b1cdbd2cSJim Jagielski /*--------------------------------------------------------------------
1821*b1cdbd2cSJim Jagielski 	Beschreibung:
1822*b1cdbd2cSJim Jagielski  --------------------------------------------------------------------*/
CanInsert()1823*b1cdbd2cSJim Jagielski bool SwWrtShell::CanInsert()
1824*b1cdbd2cSJim Jagielski {
1825*b1cdbd2cSJim Jagielski     // #123922# The original expression looks sleek, but it is not. Using the mathematical or ('|')
1826*b1cdbd2cSJim Jagielski     // instead of the logical one ('||') forces the compiler to evaluate all conditions to allow or-ing
1827*b1cdbd2cSJim Jagielski     // them together (yes, he could do better). Using the logical or allows to return on the first
1828*b1cdbd2cSJim Jagielski     // failing statement instead.
1829*b1cdbd2cSJim Jagielski     //
1830*b1cdbd2cSJim Jagielski     // return (!(IsSelFrmMode() | IsObjSelected() | (GetView().GetDrawFuncPtr() != NULL) | (GetView().GetPostItMgr()->GetActiveSidebarWin()!= NULL)));
1831*b1cdbd2cSJim Jagielski 
1832*b1cdbd2cSJim Jagielski     if(IsSelFrmMode())
1833*b1cdbd2cSJim Jagielski     {
1834*b1cdbd2cSJim Jagielski         return false;
1835*b1cdbd2cSJim Jagielski     }
1836*b1cdbd2cSJim Jagielski 
1837*b1cdbd2cSJim Jagielski     if(IsObjSelected())
1838*b1cdbd2cSJim Jagielski     {
1839*b1cdbd2cSJim Jagielski         return false;
1840*b1cdbd2cSJim Jagielski     }
1841*b1cdbd2cSJim Jagielski 
1842*b1cdbd2cSJim Jagielski     if(GetView().GetDrawFuncPtr())
1843*b1cdbd2cSJim Jagielski     {
1844*b1cdbd2cSJim Jagielski         return false;
1845*b1cdbd2cSJim Jagielski     }
1846*b1cdbd2cSJim Jagielski 
1847*b1cdbd2cSJim Jagielski     if(GetView().GetPostItMgr()->GetActiveSidebarWin())
1848*b1cdbd2cSJim Jagielski     {
1849*b1cdbd2cSJim Jagielski         return false;
1850*b1cdbd2cSJim Jagielski     }
1851*b1cdbd2cSJim Jagielski 
1852*b1cdbd2cSJim Jagielski     return true;
1853*b1cdbd2cSJim Jagielski }
1854*b1cdbd2cSJim Jagielski 
1855*b1cdbd2cSJim Jagielski 
1856*b1cdbd2cSJim Jagielski // --------------
ChgDBData(const SwDBData & aDBData)1857*b1cdbd2cSJim Jagielski void SwWrtShell::ChgDBData(const SwDBData& aDBData)
1858*b1cdbd2cSJim Jagielski {
1859*b1cdbd2cSJim Jagielski     SwEditShell::ChgDBData(aDBData);
1860*b1cdbd2cSJim Jagielski     //notify the db-beamer if available
1861*b1cdbd2cSJim Jagielski     GetView().NotifyDBChanged();
1862*b1cdbd2cSJim Jagielski }
1863*b1cdbd2cSJim Jagielski 
GetSelDescr() const1864*b1cdbd2cSJim Jagielski String SwWrtShell::GetSelDescr() const
1865*b1cdbd2cSJim Jagielski {
1866*b1cdbd2cSJim Jagielski     String aResult;
1867*b1cdbd2cSJim Jagielski 
1868*b1cdbd2cSJim Jagielski     int nSelType = GetSelectionType();
1869*b1cdbd2cSJim Jagielski     switch (nSelType)
1870*b1cdbd2cSJim Jagielski     {
1871*b1cdbd2cSJim Jagielski     case nsSelectionType::SEL_GRF:
1872*b1cdbd2cSJim Jagielski         aResult = SW_RES(STR_GRAPHIC);
1873*b1cdbd2cSJim Jagielski 
1874*b1cdbd2cSJim Jagielski         break;
1875*b1cdbd2cSJim Jagielski     case nsSelectionType::SEL_FRM:
1876*b1cdbd2cSJim Jagielski         {
1877*b1cdbd2cSJim Jagielski             const SwFrmFmt * pFrmFmt = GetCurFrmFmt();
1878*b1cdbd2cSJim Jagielski 
1879*b1cdbd2cSJim Jagielski             if (pFrmFmt)
1880*b1cdbd2cSJim Jagielski                 aResult = pFrmFmt->GetDescription();
1881*b1cdbd2cSJim Jagielski         }
1882*b1cdbd2cSJim Jagielski         break;
1883*b1cdbd2cSJim Jagielski     case nsSelectionType::SEL_DRW:
1884*b1cdbd2cSJim Jagielski         {
1885*b1cdbd2cSJim Jagielski             aResult = SW_RES(STR_DRAWING_OBJECTS);
1886*b1cdbd2cSJim Jagielski         }
1887*b1cdbd2cSJim Jagielski         break;
1888*b1cdbd2cSJim Jagielski     default:
1889*b1cdbd2cSJim Jagielski         if (0 != pDoc)
1890*b1cdbd2cSJim Jagielski             aResult = GetCrsrDescr();
1891*b1cdbd2cSJim Jagielski     }
1892*b1cdbd2cSJim Jagielski 
1893*b1cdbd2cSJim Jagielski     return aResult;
1894*b1cdbd2cSJim Jagielski }
1895*b1cdbd2cSJim Jagielski 
ApplyViewOptions(const SwViewOption & rOpt)1896*b1cdbd2cSJim Jagielski void SwWrtShell::ApplyViewOptions( const SwViewOption &rOpt )
1897*b1cdbd2cSJim Jagielski {
1898*b1cdbd2cSJim Jagielski 	SwFEShell::ApplyViewOptions( rOpt );
1899*b1cdbd2cSJim Jagielski     //#i115062# invalidate meta character slot
1900*b1cdbd2cSJim Jagielski     GetView().GetViewFrame()->GetBindings().Invalidate( FN_VIEW_META_CHARS );
1901*b1cdbd2cSJim Jagielski }
1902*b1cdbd2cSJim Jagielski 
1903*b1cdbd2cSJim Jagielski 
1904