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