Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include <com/sun/star/util/SearchOptions.hpp>
21 : #include <com/sun/star/util/SearchFlags.hpp>
22 : #include <com/sun/star/i18n/TransliterationModules.hpp>
23 : #include <vcl/graphicfilter.hxx>
24 : #include <com/sun/star/sdb/DatabaseContext.hpp>
25 : #include <com/sun/star/ui/dialogs/XFilePickerControlAccess.hpp>
26 : #include <com/sun/star/ui/dialogs/ExtendedFilePickerElementIds.hpp>
27 : #include <com/sun/star/ui/dialogs/ListboxControlActions.hpp>
28 : #include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
29 : #include <svl/aeitem.hxx>
30 : #include <SwStyleNameMapper.hxx>
31 : #include <docary.hxx>
32 : #include <hintids.hxx>
33 : #include <SwRewriter.hxx>
34 : #include <numrule.hxx>
35 : #include <swundo.hxx>
36 : #include <caption.hxx>
37 : #include <svl/PasswordHelper.hxx>
38 : #include <svl/urihelper.hxx>
39 : #include <svtools/miscopt.hxx>
40 : #include <sfx2/passwd.hxx>
41 : #include <sfx2/sfxdlg.hxx>
42 : #include <sfx2/filedlghelper.hxx>
43 : #include <sfx2/sfxhelp.hxx>
44 : #include <editeng/langitem.hxx>
45 : #include <svx/viewlayoutitem.hxx>
46 : #include <svx/zoomslideritem.hxx>
47 : #include <svtools/xwindowitem.hxx>
48 : #include <svx/linkwarn.hxx>
49 : #include <sfx2/htmlmode.hxx>
50 : #include <vcl/svapp.hxx>
51 : #include <vcl/wrkwin.hxx>
52 : #include <sfx2/app.hxx>
53 : #include <sfx2/request.hxx>
54 : #include <sfx2/bindings.hxx>
55 : #include <editeng/lrspitem.hxx>
56 : #include <unotools/textsearch.hxx>
57 : #include "editeng/unolingu.hxx"
58 : #include <vcl/msgbox.hxx>
59 : #include <editeng/tstpitem.hxx>
60 : #include <sfx2/event.hxx>
61 : #include <sfx2/docfile.hxx>
62 : #include <sfx2/docfilt.hxx>
63 : #include <sfx2/fcontnr.hxx>
64 : #include <editeng/sizeitem.hxx>
65 : #include <sfx2/dispatch.hxx>
66 : #include <svl/whiter.hxx>
67 : #include <svl/ptitem.hxx>
68 : #include <sfx2/linkmgr.hxx>
69 : #include <tools/errinf.hxx>
70 : #include <tools/urlobj.hxx>
71 : #include <svx/svdview.hxx>
72 : #include <swtypes.hxx>
73 : #include <swwait.hxx>
74 : #include <redlndlg.hxx>
75 : #include <view.hxx>
76 : #include <uivwimp.hxx>
77 : #include <docsh.hxx>
78 : #include <doc.hxx>
79 : #include <IDocumentUndoRedo.hxx>
80 : #include <wrtsh.hxx>
81 : #include <viewopt.hxx>
82 : #include <basesh.hxx>
83 : #include <swmodule.hxx>
84 : #include <uitool.hxx>
85 : #include <shellio.hxx>
86 : #include <fmtinfmt.hxx>
87 : #include <mdiexp.hxx>
88 : #include <drawbase.hxx>
89 : #include <frmmgr.hxx>
90 : #include <pagedesc.hxx>
91 : #include <section.hxx>
92 : #include <usrpref.hxx>
93 : #include <IMark.hxx>
94 : #include <navipi.hxx>
95 : #include <tox.hxx>
96 : #include <workctrl.hxx>
97 : #include <scroll.hxx>
98 : #include <edtwin.hxx>
99 : #include <wview.hxx>
100 : #include <textsh.hxx>
101 : #include <tabsh.hxx>
102 : #include <listsh.hxx>
103 : #include <cmdid.h>
104 : #include <comcore.hrc>
105 : #include <poolfmt.hrc>
106 : #include <statstr.hrc>
107 : #include <swerror.h>
108 : #include <globals.hrc>
109 : #include <shells.hrc>
110 : #include <web.hrc>
111 : #include <view.hrc>
112 : #include <app.hrc>
113 : #include <fmtclds.hxx>
114 : #include <helpid.h>
115 : #include <svtools/templdlg.hxx>
116 : #include <dbconfig.hxx>
117 : #include <dbmgr.hxx>
118 : #include <reffld.hxx>
119 :
120 : #include <PostItMgr.hxx>
121 :
122 : #include <ndtxt.hxx>
123 :
124 : #include <comphelper/processfactory.hxx>
125 : #include <comphelper/string.hxx>
126 :
127 : #include <svx/svxdlg.hxx>
128 : #include <svx/dialogs.hrc>
129 : #include "swabstdlg.hxx"
130 : #include <envelp.hrc>
131 : #include <fmthdft.hxx>
132 : #include <svx/ofaitem.hxx>
133 : #include <unomid.h>
134 : #include <unotextrange.hxx>
135 : #include <docstat.hxx>
136 : #include <wordcountdialog.hxx>
137 :
138 : #include <vcl/GraphicNativeTransform.hxx>
139 : #include <vcl/GraphicNativeMetadata.hxx>
140 : #include <vcl/settings.hxx>
141 :
142 : #include <boost/scoped_ptr.hpp>
143 :
144 : const char sStatusDelim[] = " : ";
145 : const char sStatusComma[] = " , ";
146 :
147 : using namespace sfx2;
148 : using namespace ::com::sun::star;
149 : using namespace ::com::sun::star::i18n;
150 : using namespace ::com::sun::star::util;
151 : using namespace ::com::sun::star::uno;
152 : using namespace ::com::sun::star::lang;
153 : using namespace ::com::sun::star::scanner;
154 : using namespace ::com::sun::star::beans;
155 : using namespace ::com::sun::star::container;
156 : using namespace ::com::sun::star::sdb;
157 : using namespace ::com::sun::star::ui::dialogs;
158 :
159 0 : static void lcl_SetAllTextToDefaultLanguage( SwWrtShell &rWrtSh, sal_uInt16 nWhichId )
160 : {
161 0 : if (nWhichId == RES_CHRATR_LANGUAGE ||
162 0 : nWhichId == RES_CHRATR_CJK_LANGUAGE ||
163 0 : nWhichId == RES_CHRATR_CTL_LANGUAGE)
164 : {
165 0 : rWrtSh.StartAction();
166 0 : rWrtSh.LockView( sal_True );
167 0 : rWrtSh.Push();
168 :
169 : // prepare to apply new language to all text in document
170 0 : rWrtSh.SelAll();
171 0 : rWrtSh.ExtendedSelectAll();
172 :
173 : // set language attribute to default for all text
174 0 : std::set<sal_uInt16> aAttribs;
175 0 : aAttribs.insert( nWhichId );
176 0 : rWrtSh.ResetAttr( aAttribs );
177 :
178 0 : rWrtSh.Pop( sal_False );
179 0 : rWrtSh.LockView( sal_False );
180 0 : rWrtSh.EndAction();
181 : }
182 0 : }
183 :
184 : /* Create string for showing of page in statusbar */
185 0 : OUString SwView::GetPageStr( sal_uInt16 nPg, sal_uInt16 nLogPg,
186 : const OUString& rDisplay )
187 : {
188 0 : OUString aStr( m_aPageStr );
189 0 : if( !rDisplay.isEmpty() )
190 0 : aStr += rDisplay;
191 : else
192 0 : aStr += OUString::number(nLogPg);
193 :
194 0 : if( nLogPg && nLogPg != nPg )
195 : {
196 0 : aStr += " ";
197 0 : aStr += OUString::number(nPg);
198 : }
199 0 : aStr += " / ";
200 0 : aStr += OUString::number( GetWrtShell().GetPageCnt() );
201 :
202 0 : return aStr;
203 : }
204 :
205 0 : int SwView::InsertGraphic( const OUString &rPath, const OUString &rFilter,
206 : sal_Bool bLink, GraphicFilter *pFilter,
207 : Graphic* pPreviewGrf, sal_Bool bRule )
208 : {
209 0 : SwWait aWait( *GetDocShell(), true );
210 :
211 0 : Graphic aGraphic;
212 0 : int aResult = GRFILTER_OK;
213 0 : if ( pPreviewGrf )
214 0 : aGraphic = *pPreviewGrf;
215 : else
216 : {
217 0 : if( !pFilter )
218 : {
219 0 : pFilter = &GraphicFilter::GetGraphicFilter();
220 : }
221 0 : aResult = GraphicFilter::LoadGraphic( rPath, rFilter, aGraphic, pFilter );
222 : }
223 :
224 0 : if( GRFILTER_OK == aResult )
225 : {
226 0 : GraphicNativeMetadata aMetadata;
227 0 : if ( aMetadata.read(aGraphic) )
228 : {
229 0 : sal_uInt16 aRotation = aMetadata.getRotation();
230 0 : if (aRotation != 0)
231 : {
232 0 : MessageDialog aQueryBox( GetWindow(),"QueryRotateIntoStandardOrientationDialog","modules/swriter/ui/queryrotateintostandarddialog.ui");
233 0 : if (aQueryBox.Execute() == RET_YES)
234 : {
235 0 : GraphicNativeTransform aTransform( aGraphic );
236 0 : aTransform.rotate( aRotation );
237 0 : }
238 : }
239 : }
240 :
241 0 : SwFlyFrmAttrMgr aFrameManager( sal_True, GetWrtShellPtr(), FRMMGR_TYPE_GRF );
242 0 : SwWrtShell& rShell = GetWrtShell();
243 :
244 : // #i123922# determine if we really want to insert or replace the graphic at a selected object
245 0 : const bool bReplaceMode(rShell.HasSelection() && nsSelectionType::SEL_FRM == rShell.GetSelectionType());
246 :
247 0 : if(bReplaceMode)
248 : {
249 : // #i123922# Do same as in D&D, ReRead graphic and all is done
250 : rShell.ReRead(
251 : bLink ? rPath : OUString(),
252 : bLink ? rFilter : OUString(),
253 0 : &aGraphic);
254 : }
255 : else
256 : {
257 0 : rShell.StartAction();
258 0 : if( bLink )
259 : {
260 0 : SwDocShell* pDocSh = GetDocShell();
261 : INetURLObject aTemp(
262 0 : pDocSh->HasName() ?
263 0 : pDocSh->GetMedium()->GetURLObject().GetMainURL( INetURLObject::NO_DECODE ) :
264 0 : OUString());
265 :
266 : OUString sURL = URIHelper::SmartRel2Abs(
267 0 : aTemp, rPath, URIHelper::GetMaybeFileHdl() );
268 :
269 : rShell.Insert( sURL,
270 0 : rFilter, aGraphic, &aFrameManager, bRule );
271 : }
272 : else
273 : {
274 0 : rShell.Insert( OUString(), OUString(), aGraphic, &aFrameManager );
275 : }
276 :
277 : // it is too late after "EndAction" because the Shell can already be destroyed.
278 0 : rShell.EndAction();
279 0 : }
280 : }
281 0 : return aResult;
282 : }
283 :
284 0 : sal_Bool SwView::InsertGraphicDlg( SfxRequest& rReq )
285 : {
286 0 : sal_Bool bReturn = sal_False;
287 0 : SwDocShell* pDocShell = GetDocShell();
288 0 : sal_uInt16 nHtmlMode = ::GetHtmlMode(pDocShell);
289 : // when in HTML mode insert only as a link
290 : boost::scoped_ptr<FileDialogHelper> pFileDlg(new FileDialogHelper(
291 : ui::dialogs::TemplateDescription::FILEOPEN_LINK_PREVIEW_IMAGE_TEMPLATE,
292 0 : SFXWB_GRAPHIC ));
293 0 : pFileDlg->SetTitle(SW_RESSTR(STR_INSERT_GRAPHIC ));
294 0 : pFileDlg->SetContext( FileDialogHelper::SW_INSERT_GRAPHIC );
295 0 : uno::Reference < XFilePicker > xFP = pFileDlg->GetFilePicker();
296 0 : uno::Reference < XFilePickerControlAccess > xCtrlAcc(xFP, UNO_QUERY);
297 0 : if(nHtmlMode & HTMLMODE_ON)
298 : {
299 0 : sal_Bool bTrue = sal_True;
300 0 : Any aVal(&bTrue, ::getBooleanCppuType());
301 0 : xCtrlAcc->setValue( ExtendedFilePickerElementIds::CHECKBOX_LINK, 0, aVal);
302 0 : xCtrlAcc->enableControl( ExtendedFilePickerElementIds::CHECKBOX_LINK, sal_False);
303 : }
304 :
305 0 : std::vector<OUString> aFormats;
306 0 : SwDoc* pDoc = pDocShell->GetDoc();
307 0 : const sal_uInt16 nArrLen = pDoc->GetFrmFmts()->size();
308 : sal_uInt16 i;
309 0 : for( i = 0; i < nArrLen; i++ )
310 : {
311 0 : SwFrmFmt* pFmt = (*pDoc->GetFrmFmts())[ i ];
312 0 : if(pFmt->IsDefault() || pFmt->IsAuto())
313 0 : continue;
314 0 : aFormats.push_back(pFmt->GetName());
315 : }
316 :
317 : // pool formats
318 :
319 : const ::std::vector<OUString>& rFrmPoolArr(
320 0 : SwStyleNameMapper::GetFrmFmtUINameArray());
321 0 : for( i = 0; i < rFrmPoolArr.size(); ++i )
322 : {
323 0 : aFormats.push_back(rFrmPoolArr[i]);
324 : }
325 :
326 0 : std::sort(aFormats.begin(), aFormats.end());
327 0 : aFormats.erase(std::unique(aFormats.begin(), aFormats.end()), aFormats.end());
328 :
329 0 : Sequence<OUString> aListBoxEntries(aFormats.size());
330 0 : OUString* pEntries = aListBoxEntries.getArray();
331 0 : sal_Int16 nSelect = 0;
332 0 : OUString sGraphicFormat = SW_RESSTR(STR_POOLFRM_GRAPHIC);
333 0 : for( i = 0; i < aFormats.size(); i++ )
334 : {
335 0 : pEntries[i] = aFormats[i];
336 0 : if(pEntries[i].equals(sGraphicFormat))
337 0 : nSelect = i;
338 : }
339 : try
340 : {
341 0 : Any aTemplates(&aListBoxEntries, ::getCppuType(&aListBoxEntries));
342 :
343 0 : xCtrlAcc->setValue( ExtendedFilePickerElementIds::LISTBOX_IMAGE_TEMPLATE,
344 0 : ListboxControlActions::ADD_ITEMS , aTemplates );
345 :
346 0 : Any aSelectPos(&nSelect, ::getCppuType(&nSelect));
347 0 : xCtrlAcc->setValue( ExtendedFilePickerElementIds::LISTBOX_IMAGE_TEMPLATE,
348 0 : ListboxControlActions::SET_SELECT_ITEM, aSelectPos );
349 : }
350 0 : catch (const Exception&)
351 : {
352 : OSL_FAIL("control acces failed");
353 : }
354 :
355 0 : SFX_REQUEST_ARG( rReq, pName, SfxStringItem, SID_INSERT_GRAPHIC , false );
356 0 : sal_Bool bShowError = !pName;
357 0 : if( pName || ERRCODE_NONE == pFileDlg->Execute() )
358 : {
359 :
360 0 : OUString aFileName, aFilterName;
361 0 : if ( pName )
362 : {
363 0 : aFileName = pName->GetValue();
364 0 : SFX_REQUEST_ARG( rReq, pFilter, SfxStringItem, FN_PARAM_FILTER , false );
365 0 : if ( pFilter )
366 0 : aFilterName = pFilter->GetValue();
367 : }
368 : else
369 : {
370 0 : aFileName = pFileDlg->GetPath();
371 0 : aFilterName = pFileDlg->GetCurrentFilter();
372 0 : rReq.AppendItem( SfxStringItem( SID_INSERT_GRAPHIC, aFileName ) );
373 0 : rReq.AppendItem( SfxStringItem( FN_PARAM_FILTER, aFilterName ) );
374 :
375 0 : sal_Bool bAsLink = sal_False;
376 0 : if(nHtmlMode & HTMLMODE_ON)
377 0 : bAsLink = sal_True;
378 : else
379 : {
380 : try
381 : {
382 0 : Any aVal = xCtrlAcc->getValue( ExtendedFilePickerElementIds::CHECKBOX_LINK, 0);
383 : OSL_ENSURE(aVal.hasValue(), "Value CBX_INSERT_AS_LINK not found");
384 0 : bAsLink = aVal.hasValue() ? *(sal_Bool*) aVal.getValue() : sal_True;
385 0 : Any aTemplateValue = xCtrlAcc->getValue(
386 : ExtendedFilePickerElementIds::LISTBOX_IMAGE_TEMPLATE,
387 0 : ListboxControlActions::GET_SELECTED_ITEM );
388 0 : OUString sTmpl;
389 0 : aTemplateValue >>= sTmpl;
390 0 : rReq.AppendItem( SfxStringItem( FN_PARAM_2, sTmpl) );
391 : }
392 0 : catch (const Exception&)
393 : {
394 : OSL_FAIL("control access failed");
395 : }
396 : }
397 0 : rReq.AppendItem( SfxBoolItem( FN_PARAM_1, bAsLink ) );
398 : }
399 :
400 0 : SFX_REQUEST_ARG( rReq, pAsLink, SfxBoolItem, FN_PARAM_1 , false );
401 0 : SFX_REQUEST_ARG( rReq, pStyle, SfxStringItem, FN_PARAM_2 , false );
402 :
403 0 : sal_Bool bAsLink = sal_False;
404 0 : if( nHtmlMode & HTMLMODE_ON )
405 0 : bAsLink = sal_True;
406 : else
407 : {
408 0 : if ( rReq.GetArgs() )
409 : {
410 0 : if ( pAsLink )
411 0 : bAsLink = pAsLink->GetValue();
412 0 : if ( pStyle && !pStyle->GetValue().isEmpty() )
413 0 : sGraphicFormat = pStyle->GetValue();
414 : }
415 : else
416 : {
417 0 : Any aVal = xCtrlAcc->getValue( ExtendedFilePickerElementIds::CHECKBOX_LINK, 0);
418 : OSL_ENSURE(aVal.hasValue(), "Value CBX_INSERT_AS_LINK not found");
419 0 : bAsLink = aVal.hasValue() ? *(sal_Bool*) aVal.getValue() : sal_True;
420 0 : Any aTemplateValue = xCtrlAcc->getValue(
421 : ExtendedFilePickerElementIds::LISTBOX_IMAGE_TEMPLATE,
422 0 : ListboxControlActions::GET_SELECTED_ITEM );
423 0 : OUString sTmpl;
424 0 : aTemplateValue >>= sTmpl;
425 0 : if( !sTmpl.isEmpty() )
426 0 : sGraphicFormat = sTmpl;
427 0 : rReq.AppendItem( SfxStringItem( FN_PARAM_2, sGraphicFormat ) );
428 0 : rReq.AppendItem( SfxBoolItem( FN_PARAM_1, bAsLink ) );
429 : }
430 :
431 : // really store as link only?
432 0 : if( bAsLink && SvtMiscOptions().ShowLinkWarningDialog() )
433 : {
434 0 : SvxLinkWarningDialog aWarnDlg(GetWindow(),pFileDlg->GetPath());
435 0 : if( aWarnDlg.Execute() != RET_OK )
436 0 : bAsLink=sal_False; // don't store as link
437 : }
438 : }
439 :
440 0 : SwWrtShell& rSh = GetWrtShell();
441 0 : rSh.LockPaint();
442 0 : rSh.StartAction();
443 :
444 0 : SwRewriter aRewriter;
445 0 : aRewriter.AddRule(UndoArg1, SW_RESSTR(STR_GRAPHIC_DEFNAME));
446 :
447 : // #i123922# determine if we really want to insert or replace the graphic at a selected object
448 0 : const bool bReplaceMode(rSh.HasSelection() && nsSelectionType::SEL_FRM == rSh.GetSelectionType());
449 :
450 0 : rSh.StartUndo(UNDO_INSERT, &aRewriter);
451 :
452 0 : int nError = InsertGraphic( aFileName, aFilterName, bAsLink, &GraphicFilter::GetGraphicFilter() );
453 :
454 : // format not equal to current filter (with autodetection)
455 0 : if( nError == GRFILTER_FORMATERROR )
456 0 : nError = InsertGraphic( aFileName, OUString(), bAsLink, &GraphicFilter::GetGraphicFilter() );
457 :
458 : // #i123922# no new FrameFormat for replace mode, only when new object was created,
459 : // else this would reset the current setting for the frame holding the graphic
460 0 : if ( !bReplaceMode && rSh.IsFrmSelected() )
461 : {
462 0 : SwFrmFmt* pFmt = pDoc->FindFrmFmtByName( sGraphicFormat );
463 0 : if(!pFmt)
464 : pFmt = pDoc->MakeFrmFmt(sGraphicFormat,
465 : pDocShell->GetDoc()->GetDfltFrmFmt(),
466 0 : true, false);
467 0 : rSh.SetFrmFmt( pFmt );
468 : }
469 :
470 0 : RESOURCE_TYPE nResId = 0;
471 0 : switch( nError )
472 : {
473 : case GRFILTER_OPENERROR:
474 0 : nResId = STR_GRFILTER_OPENERROR;
475 0 : break;
476 : case GRFILTER_IOERROR:
477 0 : nResId = STR_GRFILTER_IOERROR;
478 0 : break;
479 : case GRFILTER_FORMATERROR:
480 0 : nResId = STR_GRFILTER_FORMATERROR;
481 0 : break;
482 : case GRFILTER_VERSIONERROR:
483 0 : nResId = STR_GRFILTER_VERSIONERROR;
484 0 : break;
485 : case GRFILTER_FILTERERROR:
486 0 : nResId = STR_GRFILTER_FILTERERROR;
487 0 : break;
488 : case GRFILTER_TOOBIG:
489 0 : nResId = STR_GRFILTER_TOOBIG;
490 0 : break;
491 : }
492 :
493 0 : rSh.EndAction();
494 0 : rSh.UnlockPaint();
495 0 : if( nResId )
496 : {
497 0 : if( bShowError )
498 : {
499 0 : InfoBox aInfoBox( GetWindow(), SW_RESSTR( nResId ));
500 0 : aInfoBox.Execute();
501 : }
502 0 : rReq.Ignore();
503 : }
504 : else
505 : {
506 : // set the specific graphic attrbutes to the graphic
507 0 : bReturn = sal_True;
508 0 : AutoCaption( GRAPHIC_CAP );
509 0 : rReq.Done();
510 : }
511 :
512 0 : rSh.EndUndo(); // due to possible change of Shell
513 : }
514 :
515 0 : return bReturn;
516 : }
517 :
518 0 : void SwView::Execute(SfxRequest &rReq)
519 : {
520 0 : sal_uInt16 nSlot = rReq.GetSlot();
521 0 : const SfxItemSet* pArgs = rReq.GetArgs();
522 : const SfxPoolItem* pItem;
523 0 : sal_Bool bIgnore = sal_False;
524 0 : switch( nSlot )
525 : {
526 : case SID_CREATE_SW_DRAWVIEW:
527 0 : m_pWrtShell->getIDocumentDrawModelAccess()->GetOrCreateDrawModel();
528 0 : break;
529 :
530 : case FN_LINE_NUMBERING_DLG:
531 : {
532 0 : SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
533 : OSL_ENSURE(pFact, "Dialogdiet fail!");
534 0 : boost::scoped_ptr<VclAbstractDialog> pDlg(pFact->CreateVclSwViewDialog(*this));
535 : OSL_ENSURE(pDlg, "Dialogdiet fail!");
536 0 : pDlg->Execute();
537 0 : break;
538 : }
539 : case FN_EDIT_LINK_DLG:
540 0 : EditLinkDlg();
541 0 : break;
542 : case FN_REFRESH_VIEW:
543 0 : GetEditWin().Invalidate();
544 0 : break;
545 : case FN_PAGEUP:
546 : case FN_PAGEUP_SEL:
547 : case FN_PAGEDOWN:
548 : case FN_PAGEDOWN_SEL:
549 : {
550 0 : Rectangle aVis( GetVisArea() );
551 0 : SwEditWin& rTmpWin = GetEditWin();
552 0 : if ( FN_PAGEUP == nSlot || FN_PAGEUP_SEL == nSlot )
553 0 : PageUpCrsr(FN_PAGEUP_SEL == nSlot);
554 : else
555 0 : PageDownCrsr(FN_PAGEDOWN_SEL == nSlot);
556 :
557 : rReq.SetReturnValue(SfxBoolItem(nSlot,
558 0 : aVis != GetVisArea()));
559 : //#i42732# - notify the edit window that from now on we do not use the input language
560 0 : rTmpWin.SetUseInputLanguage( sal_False );
561 : }
562 0 : break;
563 : case FN_REDLINE_ON:
564 : {
565 0 : if( pArgs &&
566 0 : SFX_ITEM_SET == pArgs->GetItemState(nSlot, false, &pItem ))
567 : {
568 0 : IDocumentRedlineAccess* pIDRA = m_pWrtShell->getIDocumentRedlineAccess();
569 0 : Sequence <sal_Int8> aPasswd = pIDRA->GetRedlinePassword();
570 0 : if( aPasswd.getLength() )
571 : {
572 : OSL_ENSURE( !((const SfxBoolItem*)pItem)->GetValue(), "SwView::Execute(): password set an redlining off doesn't match!" );
573 : // xmlsec05: new password dialog
574 : Window* pParent;
575 : const SfxPoolItem* pParentItem;
576 0 : if( SFX_ITEM_SET == pArgs->GetItemState( SID_ATTR_XWINDOW, false, &pParentItem ) )
577 0 : pParent = ( ( const XWindowItem* ) pParentItem )->GetWindowPtr();
578 : else
579 0 : pParent = &GetViewFrame()->GetWindow();
580 0 : SfxPasswordDialog aPasswdDlg( pParent );
581 0 : aPasswdDlg.SetMinLen( 1 );
582 : //#i69751# the result of Execute() can be ignored
583 0 : aPasswdDlg.Execute();
584 0 : OUString sNewPasswd( aPasswdDlg.GetPassword() );
585 0 : Sequence <sal_Int8> aNewPasswd = pIDRA->GetRedlinePassword();
586 0 : SvPasswordHelper::GetHashPassword( aNewPasswd, sNewPasswd );
587 0 : if(SvPasswordHelper::CompareHashPassword(aPasswd, sNewPasswd))
588 0 : pIDRA->SetRedlinePassword(Sequence <sal_Int8> ());
589 : else
590 : { // xmlsec05: message box for wrong password
591 0 : break;
592 0 : }
593 : }
594 :
595 0 : sal_uInt16 nOn = ((const SfxBoolItem*)pItem)->GetValue() ? nsRedlineMode_t::REDLINE_ON : 0;
596 0 : sal_uInt16 nMode = m_pWrtShell->GetRedlineMode();
597 0 : m_pWrtShell->SetRedlineModeAndCheckInsMode( (nMode & ~nsRedlineMode_t::REDLINE_ON) | nOn);
598 : }
599 : }
600 0 : break;
601 : case FN_REDLINE_PROTECT :
602 : {
603 0 : IDocumentRedlineAccess* pIDRA = m_pWrtShell->getIDocumentRedlineAccess();
604 0 : Sequence <sal_Int8> aPasswd = pIDRA->GetRedlinePassword();
605 0 : if( pArgs && SFX_ITEM_SET == pArgs->GetItemState(nSlot, false, &pItem )
606 0 : && ((SfxBoolItem*)pItem)->GetValue() == ( aPasswd.getLength() != 0 ) )
607 0 : break;
608 :
609 : // xmlsec05: new password dialog
610 : // message box for wrong password
611 : Window* pParent;
612 : const SfxPoolItem* pParentItem;
613 0 : if( pArgs && SFX_ITEM_SET == pArgs->GetItemState( SID_ATTR_XWINDOW, false, &pParentItem ) )
614 0 : pParent = ( ( const XWindowItem* ) pParentItem )->GetWindowPtr();
615 : else
616 0 : pParent = &GetViewFrame()->GetWindow();
617 0 : SfxPasswordDialog aPasswdDlg( pParent );
618 0 : aPasswdDlg.SetMinLen( 1 );
619 0 : if(!aPasswd.getLength())
620 0 : aPasswdDlg.ShowExtras(SHOWEXTRAS_CONFIRM);
621 0 : if (aPasswdDlg.Execute())
622 : {
623 0 : sal_uInt16 nOn = nsRedlineMode_t::REDLINE_ON;
624 0 : OUString sNewPasswd( aPasswdDlg.GetPassword() );
625 : Sequence <sal_Int8> aNewPasswd =
626 0 : pIDRA->GetRedlinePassword();
627 0 : SvPasswordHelper::GetHashPassword( aNewPasswd, sNewPasswd );
628 0 : if(!aPasswd.getLength())
629 : {
630 0 : pIDRA->SetRedlinePassword(aNewPasswd);
631 : }
632 0 : else if(SvPasswordHelper::CompareHashPassword(aPasswd, sNewPasswd))
633 : {
634 0 : pIDRA->SetRedlinePassword(Sequence <sal_Int8> ());
635 0 : nOn = 0;
636 : }
637 0 : sal_uInt16 nMode = pIDRA->GetRedlineMode();
638 0 : m_pWrtShell->SetRedlineModeAndCheckInsMode( (nMode & ~nsRedlineMode_t::REDLINE_ON) | nOn);
639 0 : rReq.AppendItem( SfxBoolItem( FN_REDLINE_PROTECT, ((nMode&nsRedlineMode_t::REDLINE_ON)==0) ) );
640 : }
641 : else
642 0 : bIgnore = sal_True;
643 : }
644 0 : break;
645 : case FN_REDLINE_SHOW:
646 :
647 0 : if( pArgs &&
648 0 : SFX_ITEM_SET == pArgs->GetItemState(nSlot, false, &pItem))
649 : {
650 : sal_uInt16 nMode = ( ~(nsRedlineMode_t::REDLINE_SHOW_INSERT | nsRedlineMode_t::REDLINE_SHOW_DELETE)
651 0 : & m_pWrtShell->GetRedlineMode() ) | nsRedlineMode_t::REDLINE_SHOW_INSERT;
652 0 : if( ((const SfxBoolItem*)pItem)->GetValue() )
653 0 : nMode |= nsRedlineMode_t::REDLINE_SHOW_DELETE;
654 :
655 0 : m_pWrtShell->SetRedlineModeAndCheckInsMode( nMode );
656 : }
657 0 : break;
658 : case FN_MAILMERGE_SENDMAIL_CHILDWINDOW:
659 : case FN_REDLINE_ACCEPT:
660 0 : GetViewFrame()->ToggleChildWindow(nSlot);
661 0 : break;
662 : case FN_REDLINE_ACCEPT_DIRECT:
663 : case FN_REDLINE_REJECT_DIRECT:
664 : {
665 : // We check for a redline at the start of the selection/cursor, not the point.
666 : // This ensures we work properly with FN_REDLINE_NEXT_CHANGE, which leaves the
667 : // point at the *end* of the redline and the mark at the start (so GetRedline
668 : // would return NULL if called on the point)
669 0 : SwDoc *pDoc = m_pWrtShell->GetDoc();
670 0 : SwPaM *pCursor = m_pWrtShell->GetCrsr();
671 :
672 0 : sal_uInt16 nRedline = 0;
673 0 : const SwRangeRedline *pRedline = pDoc->GetRedline(*pCursor->Start(), &nRedline);
674 : assert(pRedline != 0);
675 0 : if (pRedline)
676 : {
677 0 : if (FN_REDLINE_ACCEPT_DIRECT == nSlot)
678 0 : m_pWrtShell->AcceptRedline(nRedline);
679 : else
680 0 : m_pWrtShell->RejectRedline(nRedline);
681 : }
682 : }
683 0 : break;
684 :
685 : case FN_REDLINE_NEXT_CHANGE:
686 : {
687 0 : const SwRangeRedline *pCurrent = m_pWrtShell->GetCurrRedline();
688 0 : const SwRangeRedline *pNext = m_pWrtShell->SelNextRedline();
689 :
690 : // FN_REDLINE_PREV_CHANGE leaves the selection point at the start of the redline.
691 : // In such cases, SelNextRedline (which starts searching from the selection point)
692 : // immediately finds the current redline and advances the selection point to its end.
693 :
694 : // This behavior means that PREV_CHANGE followed by NEXT_CHANGE would not change
695 : // the current redline, so we detect it and select the next redline again.
696 0 : if (pCurrent && pCurrent == pNext)
697 0 : pNext = m_pWrtShell->SelNextRedline();
698 :
699 0 : if (pNext)
700 0 : m_pWrtShell->SetInSelect();
701 : }
702 0 : break;
703 :
704 : case FN_REDLINE_PREV_CHANGE:
705 : {
706 0 : const SwPaM *pCursor = m_pWrtShell->GetCrsr();
707 0 : const SwPosition initialCursorStart = *pCursor->Start();
708 0 : const SwRangeRedline *pPrev = m_pWrtShell->SelPrevRedline();
709 :
710 0 : if (pPrev)
711 : {
712 : // FN_REDLINE_NEXT_CHANGE leaves the selection point at the end of the redline.
713 : // In such cases, SelPrevRedline (which starts searching from the selection point)
714 : // immediately finds the current redline and advances the selection point to its
715 : // start.
716 :
717 : // This behavior means that NEXT_CHANGE followed by PREV_CHANGE would not change
718 : // the current redline, so we detect it and move to the previous redline again.
719 0 : if (initialCursorStart == *pPrev->Start())
720 0 : pPrev = m_pWrtShell->SelPrevRedline();
721 : }
722 :
723 0 : if (pPrev)
724 0 : m_pWrtShell->SetInSelect();
725 : }
726 0 : break;
727 :
728 : case SID_DOCUMENT_COMPARE:
729 : case SID_DOCUMENT_MERGE:
730 : {
731 0 : OUString sFileName, sFilterName;
732 0 : sal_Int16 nVersion = 0;
733 0 : bool bHasFileName = false;
734 0 : m_pViewImpl->SetParam( 0 );
735 0 : bool bNoAcceptDialog = false;
736 :
737 0 : if( pArgs )
738 : {
739 0 : if( SFX_ITEM_SET == pArgs->GetItemState( SID_FILE_NAME, false, &pItem ))
740 0 : sFileName = ((const SfxStringItem*)pItem)->GetValue();
741 0 : bHasFileName = !sFileName.isEmpty();
742 :
743 0 : if( SFX_ITEM_SET == pArgs->GetItemState( SID_FILTER_NAME, false, &pItem ))
744 0 : sFilterName = ((const SfxStringItem*)pItem)->GetValue();
745 :
746 0 : if( SFX_ITEM_SET == pArgs->GetItemState( SID_VERSION, false, &pItem ))
747 : {
748 0 : nVersion = ((const SfxInt16Item *)pItem)->GetValue();
749 0 : m_pViewImpl->SetParam( nVersion );
750 : }
751 0 : if( SFX_ITEM_SET == pArgs->GetItemState( SID_NO_ACCEPT_DIALOG, false, &pItem ))
752 : {
753 0 : bNoAcceptDialog = ((const SfxBoolItem *)pItem)->GetValue();
754 : }
755 : }
756 :
757 0 : m_pViewImpl->InitRequest( rReq );
758 0 : long nFound = InsertDoc( nSlot, sFileName, sFilterName, nVersion );
759 :
760 0 : if ( bHasFileName )
761 : {
762 0 : rReq.SetReturnValue( SfxInt32Item( nSlot, nFound ));
763 :
764 0 : if (nFound > 0 && !bNoAcceptDialog) // show Redline browser
765 : {
766 0 : SfxViewFrame* pVFrame = GetViewFrame();
767 0 : pVFrame->ShowChildWindow(FN_REDLINE_ACCEPT);
768 :
769 : // re-initialize the Redline dialog
770 0 : sal_uInt16 nId = SwRedlineAcceptChild::GetChildWindowId();
771 : SwRedlineAcceptChild *pRed = (SwRedlineAcceptChild*)
772 0 : pVFrame->GetChildWindow(nId);
773 0 : if (pRed)
774 0 : pRed->ReInitDlg(GetDocShell());
775 : }
776 : }
777 : else
778 0 : bIgnore = sal_True;
779 : }
780 0 : break;
781 : case FN_SYNC_LABELS:
782 : case FN_MAILMERGE_CHILDWINDOW:
783 0 : GetViewFrame()->ShowChildWindow(nSlot, true);
784 0 : break;
785 : case FN_ESCAPE:
786 : {
787 0 : if ( m_pWrtShell->HasDrawView() && m_pWrtShell->GetDrawView()->IsDragObj() )
788 : {
789 0 : m_pWrtShell->BreakDrag();
790 0 : m_pWrtShell->EnterSelFrmMode();
791 : }
792 0 : else if ( m_pWrtShell->IsDrawCreate() )
793 : {
794 0 : GetDrawFuncPtr()->BreakCreate();
795 0 : AttrChangedNotify(m_pWrtShell); // shell change if needed
796 : }
797 0 : else if ( m_pWrtShell->HasSelection() || IsDrawMode() )
798 : {
799 0 : SdrView *pSdrView = m_pWrtShell->HasDrawView() ? m_pWrtShell->GetDrawView() : 0;
800 0 : if(pSdrView && pSdrView->AreObjectsMarked() &&
801 0 : pSdrView->GetHdlList().GetFocusHdl())
802 : {
803 0 : ((SdrHdlList&)pSdrView->GetHdlList()).ResetFocusHdl();
804 : }
805 : else
806 : {
807 0 : if(pSdrView)
808 : {
809 0 : LeaveDrawCreate();
810 0 : Point aPt(LONG_MIN, LONG_MIN);
811 : //go out of the frame
812 0 : m_pWrtShell->SelectObj(aPt, SW_LEAVE_FRAME);
813 0 : SfxBindings& rBind = GetViewFrame()->GetBindings();
814 0 : rBind.Invalidate( SID_ATTR_SIZE );
815 : }
816 0 : m_pWrtShell->EnterStdMode();
817 0 : AttrChangedNotify(m_pWrtShell); // shell change if necessary
818 : }
819 : }
820 0 : else if ( GetEditWin().GetApplyTemplate() )
821 : {
822 0 : GetEditWin().SetApplyTemplate(SwApplyTemplate());
823 : }
824 0 : else if( ((SfxObjectShell*)GetDocShell())->IsInPlaceActive() )
825 : {
826 0 : Escape();
827 : }
828 0 : else if ( GetEditWin().IsChainMode() )
829 : {
830 0 : GetEditWin().SetChainMode( sal_False );
831 : }
832 0 : else if( m_pWrtShell->GetFlyFrmFmt() )
833 : {
834 0 : const SwFrmFmt* pFmt = m_pWrtShell->GetFlyFrmFmt();
835 0 : if(m_pWrtShell->GotoFly( pFmt->GetName(), FLYCNTTYPE_FRM ))
836 : {
837 0 : m_pWrtShell->HideCrsr();
838 0 : m_pWrtShell->EnterSelFrmMode();
839 : }
840 : }
841 : else
842 : {
843 0 : SfxBoolItem aItem( SID_WIN_FULLSCREEN, false );
844 0 : GetViewFrame()->GetDispatcher()->Execute( SID_WIN_FULLSCREEN, SFX_CALLMODE_RECORD, &aItem, 0L );
845 0 : bIgnore = sal_True;
846 : }
847 : }
848 0 : break;
849 : case SID_ATTR_BORDER_INNER:
850 : case SID_ATTR_BORDER_OUTER:
851 : case SID_ATTR_BORDER_SHADOW:
852 0 : if(pArgs)
853 0 : m_pWrtShell->SetAttrSet(*pArgs);
854 0 : break;
855 :
856 : case SID_ATTR_PAGE:
857 : case SID_ATTR_PAGE_SIZE:
858 : case SID_ATTR_PAGE_MAXSIZE:
859 : case SID_ATTR_PAGE_PAPERBIN:
860 : case SID_ATTR_PAGE_EXT1:
861 : case FN_PARAM_FTN_INFO:
862 : {
863 0 : if(pArgs)
864 : {
865 0 : const sal_uInt16 nCurIdx = m_pWrtShell->GetCurPageDesc();
866 0 : SwPageDesc aPageDesc( m_pWrtShell->GetPageDesc( nCurIdx ) );
867 0 : ::ItemSetToPageDesc( *pArgs, aPageDesc );
868 : // change the descriptor of the core
869 0 : m_pWrtShell->ChgPageDesc( nCurIdx, aPageDesc );
870 : }
871 : }
872 0 : break;
873 : case FN_NAVIGATION_PI_GOTO_PAGE:
874 : {
875 0 : SfxViewFrame* pVFrame = GetViewFrame();
876 0 : SfxChildWindow* pCh = pVFrame->GetChildWindow( SID_NAVIGATOR );
877 0 : if(!pCh)
878 : {
879 0 : pVFrame->ToggleChildWindow( SID_NAVIGATOR );
880 0 : pCh = pVFrame->GetChildWindow( SID_NAVIGATOR );
881 :
882 : }
883 0 : ((SwNavigationPI*) pCh->GetContextWindow(SW_MOD()))->GotoPage();
884 : }
885 0 : break;
886 : case FN_EDIT_CURRENT_TOX:
887 : {
888 : GetViewFrame()->GetDispatcher()->Execute(
889 0 : FN_INSERT_MULTI_TOX, SFX_CALLMODE_ASYNCHRON);
890 : }
891 0 : break;
892 : case FN_UPDATE_CUR_TOX:
893 : {
894 0 : const SwTOXBase* pBase = m_pWrtShell->GetCurTOX();
895 0 : if(pBase)
896 : {
897 0 : m_pWrtShell->StartAction();
898 0 : if(TOX_INDEX == pBase->GetType())
899 0 : m_pWrtShell->ApplyAutoMark();
900 0 : m_pWrtShell->UpdateTableOf( *pBase );
901 0 : m_pWrtShell->EndAction();
902 : }
903 : }
904 0 : break;
905 : case FN_UPDATE_TOX:
906 : {
907 0 : m_pWrtShell->StartAction();
908 0 : m_pWrtShell->EnterStdMode();
909 0 : sal_Bool bOldCrsrInReadOnly = m_pWrtShell->IsReadOnlyAvailable();
910 0 : m_pWrtShell->SetReadOnlyAvailable( sal_True );
911 :
912 0 : for( sal_uInt16 i = 0; i < 2; ++i )
913 : {
914 0 : sal_uInt16 nCount = m_pWrtShell->GetTOXCount();
915 0 : if( 1 == nCount )
916 0 : ++i;
917 :
918 0 : while( m_pWrtShell->GotoPrevTOXBase() )
919 : ; // jump to the first "table of ..."
920 :
921 : // if we are not in one, jump to next
922 0 : const SwTOXBase* pBase = m_pWrtShell->GetCurTOX();
923 0 : if( !pBase )
924 : {
925 0 : m_pWrtShell->GotoNextTOXBase();
926 0 : pBase = m_pWrtShell->GetCurTOX();
927 : }
928 :
929 0 : sal_Bool bAutoMarkApplied = sal_False;
930 0 : while( pBase )
931 : {
932 0 : if(TOX_INDEX == pBase->GetType() && !bAutoMarkApplied)
933 : {
934 0 : m_pWrtShell->ApplyAutoMark();
935 0 : bAutoMarkApplied = sal_True;
936 : }
937 : // pBase is needed only for the interface. Should be changed in future! (JP 1996)
938 0 : m_pWrtShell->UpdateTableOf( *pBase );
939 :
940 0 : if( m_pWrtShell->GotoNextTOXBase() )
941 0 : pBase = m_pWrtShell->GetCurTOX();
942 : else
943 0 : pBase = 0;
944 : }
945 : }
946 0 : m_pWrtShell->SetReadOnlyAvailable( bOldCrsrInReadOnly );
947 0 : m_pWrtShell->EndAction();
948 : }
949 0 : break;
950 : case SID_ATTR_BRUSH:
951 : {
952 0 : if(pArgs && SFX_ITEM_SET == pArgs->GetItemState(RES_BACKGROUND, false, &pItem))
953 : {
954 0 : const sal_uInt16 nCurIdx = m_pWrtShell->GetCurPageDesc();
955 0 : SwPageDesc aDesc( m_pWrtShell->GetPageDesc( nCurIdx ));
956 0 : SwFrmFmt& rMaster = aDesc.GetMaster();
957 0 : rMaster.SetFmtAttr(*pItem);
958 0 : m_pWrtShell->ChgPageDesc( nCurIdx, aDesc);
959 : }
960 : }
961 0 : break;
962 : case SID_CLEARHISTORY:
963 : {
964 0 : m_pWrtShell->DelAllUndoObj();
965 : }
966 0 : break;
967 : case SID_UNDO:
968 : {
969 0 : m_pShell->ExecuteSlot(rReq);
970 : }
971 0 : break;
972 : case FN_INSERT_CTRL:
973 : case FN_INSERT_OBJ_CTRL:
974 : {
975 0 : if(pArgs && SFX_ITEM_SET == pArgs->GetItemState(nSlot, false, &pItem))
976 : {
977 0 : sal_uInt16 nValue = ((SfxUInt16Item*)pItem)->GetValue();
978 0 : switch ( nSlot )
979 : {
980 : case FN_INSERT_CTRL:
981 : {
982 0 : sal_Bool bWeb = 0 != PTR_CAST(SwWebView, this);
983 0 : if(bWeb)
984 0 : SwView::m_nWebInsertCtrlState = nValue;
985 : else
986 0 : SwView::m_nInsertCtrlState = nValue;
987 : }
988 0 : break;
989 0 : case FN_INSERT_OBJ_CTRL: SwView::m_nInsertObjectCtrlState = nValue ;break;
990 : }
991 :
992 : }
993 0 : GetViewFrame()->GetBindings().Invalidate( nSlot );
994 : }
995 0 : break;
996 : #if defined WNT || defined UNX
997 : case SID_TWAIN_SELECT:
998 : case SID_TWAIN_TRANSFER:
999 0 : GetViewImpl()->ExecuteScan( rReq );
1000 0 : break;
1001 : #endif
1002 :
1003 : case SID_ATTR_DEFTABSTOP:
1004 : {
1005 0 : if(pArgs && SFX_ITEM_SET == pArgs->GetItemState(SID_ATTR_DEFTABSTOP, false, &pItem))
1006 : {
1007 0 : SvxTabStopItem aDefTabs( 0, 0, SVX_TAB_ADJUST_DEFAULT, RES_PARATR_TABSTOP );
1008 0 : sal_uInt16 nTab = ((const SfxUInt16Item*)pItem)->GetValue();
1009 0 : MakeDefTabs( nTab, aDefTabs );
1010 0 : m_pWrtShell->SetDefault( aDefTabs );
1011 : }
1012 : }
1013 0 : break;
1014 : case SID_ATTR_LANGUAGE :
1015 0 : if(pArgs && SFX_ITEM_SET == pArgs->GetItemState(SID_ATTR_LANGUAGE, false, &pItem))
1016 : {
1017 0 : SvxLanguageItem aLang(((SvxLanguageItem*)pItem)->GetLanguage(), RES_CHRATR_LANGUAGE);
1018 0 : m_pWrtShell->SetDefault( aLang );
1019 0 : lcl_SetAllTextToDefaultLanguage( *m_pWrtShell, RES_CHRATR_LANGUAGE );
1020 : }
1021 0 : break;
1022 : case SID_ATTR_CHAR_CTL_LANGUAGE:
1023 0 : if(pArgs && SFX_ITEM_SET == pArgs->GetItemState(RES_CHRATR_CTL_LANGUAGE, false, &pItem))
1024 : {
1025 0 : m_pWrtShell->SetDefault( *pItem );
1026 0 : lcl_SetAllTextToDefaultLanguage( *m_pWrtShell, RES_CHRATR_CTL_LANGUAGE );
1027 : }
1028 0 : break;
1029 : case SID_ATTR_CHAR_CJK_LANGUAGE:
1030 0 : if(pArgs && SFX_ITEM_SET == pArgs->GetItemState(RES_CHRATR_CJK_LANGUAGE, false, &pItem))
1031 : {
1032 0 : m_pWrtShell->SetDefault( *pItem );
1033 0 : lcl_SetAllTextToDefaultLanguage( *m_pWrtShell, RES_CHRATR_CJK_LANGUAGE );
1034 : }
1035 0 : break;
1036 : case FN_SCROLL_PREV:
1037 : case FN_SCROLL_NEXT:
1038 : {
1039 : // call the handlers of PageUp/DownButtons, only
1040 0 : bool *pbNext = new bool(true); // FN_SCROLL_NEXT
1041 0 : if (nSlot == FN_SCROLL_PREV)
1042 0 : *pbNext = false;
1043 : // #i75416# move the execution of the search to an asynchronously called static link
1044 0 : Application::PostUserEvent( STATIC_LINK(this, SwView, MoveNavigationHdl), pbNext );
1045 : }
1046 0 : break;
1047 : case FN_NAVIGATION_POPUP:
1048 : {
1049 0 : SfxViewFrame* pVFrame = GetViewFrame();
1050 0 : SfxChildWindow* pCh = pVFrame->GetChildWindow( SID_NAVIGATOR );
1051 0 : if (!pCh)
1052 : {
1053 0 : pVFrame->ToggleChildWindow( SID_NAVIGATOR );
1054 0 : pCh = pVFrame->GetChildWindow( SID_NAVIGATOR );
1055 : }
1056 0 : ((SwNavigationPI*) pCh->GetContextWindow(SW_MOD()))->CreateNavigationTool(
1057 0 : GetVisArea(), true, &pVFrame->GetWindow());
1058 : }
1059 0 : break;
1060 : case SID_JUMPTOMARK:
1061 0 : if( pArgs && SFX_ITEM_SET == pArgs->GetItemState(SID_JUMPTOMARK, false, &pItem))
1062 0 : JumpToSwMark( (( const SfxStringItem*)pItem)->GetValue() );
1063 0 : break;
1064 : case SID_GALLERY :
1065 0 : GetViewFrame()->ChildWindowExecute(rReq);
1066 0 : break;
1067 : case SID_AVMEDIA_PLAYER :
1068 0 : GetViewFrame()->ChildWindowExecute(rReq);
1069 0 : break;
1070 : case SID_VIEW_DATA_SOURCE_BROWSER:
1071 : {
1072 0 : SfxViewFrame* pVFrame = GetViewFrame();
1073 0 : pVFrame->ChildWindowExecute(rReq);
1074 0 : if(pVFrame->HasChildWindow(SID_BROWSER))
1075 : {
1076 0 : const SwDBData& rData = GetWrtShell().GetDBDesc();
1077 0 : SW_MOD()->ShowDBObj(*this, rData, sal_False);
1078 : }
1079 : }
1080 0 : break;
1081 : case FN_INSERT_FIELD_DATA_ONLY :
1082 : {
1083 0 : sal_Bool bShow = sal_False;
1084 0 : if( pArgs &&
1085 0 : SFX_ITEM_SET == pArgs->GetItemState(nSlot, false, &pItem ))
1086 0 : bShow = ((const SfxBoolItem*)pItem)->GetValue();
1087 0 : if((bShow && m_bInMailMerge) != GetViewFrame()->HasChildWindow(nSlot))
1088 0 : GetViewFrame()->ToggleChildWindow(nSlot);
1089 : //if fields have been successfully inserted call the "real"
1090 : //mail merge dialog
1091 0 : SwWrtShell &rSh = GetWrtShell();
1092 0 : if(m_bInMailMerge && rSh.IsAnyDatabaseFieldInDoc())
1093 : {
1094 0 : SwNewDBMgr* pNewDBMgr = rSh.GetNewDBMgr();
1095 0 : if (pNewDBMgr)
1096 : {
1097 0 : SwDBData aData;
1098 0 : aData = rSh.GetDBData();
1099 0 : rSh.EnterStdMode(); // force change in text shell; necessary for mixing DB fields
1100 0 : AttrChangedNotify( &rSh );
1101 :
1102 0 : Sequence<PropertyValue> aProperties(3);
1103 0 : PropertyValue* pValues = aProperties.getArray();
1104 0 : pValues[0].Name = "DataSourceName";
1105 0 : pValues[1].Name = "Command";
1106 0 : pValues[2].Name = "CommandType";
1107 0 : pValues[0].Value <<= aData.sDataSource;
1108 0 : pValues[1].Value <<= aData.sCommand;
1109 0 : pValues[2].Value <<= aData.nCommandType;
1110 0 : pNewDBMgr->ExecuteFormLetter(rSh, aProperties, sal_True);
1111 : }
1112 : }
1113 0 : m_bInMailMerge &= bShow;
1114 0 : GetViewFrame()->GetBindings().Invalidate(FN_INSERT_FIELD);
1115 : }
1116 0 : break;
1117 : case FN_QRY_MERGE:
1118 : {
1119 0 : sal_Bool bUseCurrentDocument = sal_True;
1120 0 : sal_Bool bQuery = !pArgs||SFX_ITEM_SET != pArgs->GetItemState(nSlot);
1121 0 : if(bQuery)
1122 : {
1123 0 : SfxViewFrame* pTmpFrame = GetViewFrame();
1124 0 : SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
1125 : OSL_ENSURE(pFact, "Dialogdiet fail!");
1126 0 : AbstractMailMergeCreateFromDlg* pDlg = pFact->CreateMailMergeCreateFromDlg(&pTmpFrame->GetWindow());
1127 : OSL_ENSURE(pDlg, "Dialogdiet fail!");
1128 0 : if(RET_OK == pDlg->Execute())
1129 0 : bUseCurrentDocument = pDlg->IsThisDocument();
1130 : else
1131 0 : break;
1132 : }
1133 0 : GenerateFormLetter(bUseCurrentDocument);
1134 : }
1135 0 : break;
1136 : case SID_RECHECK_DOCUMENT:
1137 : {
1138 0 : SwDocShell* pDocShell = GetDocShell();
1139 0 : SwDoc* pDoc = pDocShell->GetDoc();
1140 0 : uno::Reference< linguistic2::XProofreadingIterator > xGCIterator( pDoc->GetGCIterator() );
1141 0 : if( xGCIterator.is() )
1142 : {
1143 0 : xGCIterator->resetIgnoreRules();
1144 : }
1145 : // reset ignore lists
1146 0 : pDoc->SpellItAgainSam( true, false, false );
1147 : // clear ignore dictionary
1148 0 : uno::Reference< linguistic2::XDictionary > xDictionary( SvxGetIgnoreAllList(), uno::UNO_QUERY );
1149 0 : if( xDictionary.is() )
1150 0 : xDictionary->clear();
1151 : // put cursor to the start of the document
1152 0 : m_pWrtShell->SttDoc();
1153 : }
1154 : // no break; - but call spell/grammar dialog
1155 : case FN_SPELL_GRAMMAR_DIALOG:
1156 : {
1157 0 : SfxViewFrame* pViewFrame = GetViewFrame();
1158 0 : if (rReq.GetArgs() != NULL)
1159 : pViewFrame->SetChildWindow (FN_SPELL_GRAMMAR_DIALOG,
1160 0 : ((const SfxBoolItem&) (rReq.GetArgs()->
1161 0 : Get(FN_SPELL_GRAMMAR_DIALOG))).GetValue());
1162 : else
1163 0 : pViewFrame->ToggleChildWindow(FN_SPELL_GRAMMAR_DIALOG);
1164 :
1165 0 : pViewFrame->GetBindings().Invalidate(FN_SPELL_GRAMMAR_DIALOG);
1166 0 : rReq.Ignore ();
1167 : }
1168 0 : break;
1169 : case SID_ALIGN_ANY_LEFT :
1170 : case SID_ALIGN_ANY_HCENTER :
1171 : case SID_ALIGN_ANY_RIGHT :
1172 : case SID_ALIGN_ANY_JUSTIFIED:
1173 : case SID_ALIGN_ANY_TOP :
1174 : case SID_ALIGN_ANY_VCENTER :
1175 : case SID_ALIGN_ANY_BOTTOM :
1176 : case SID_ALIGN_ANY_HDEFAULT :
1177 : case SID_ALIGN_ANY_VDEFAULT :
1178 : {
1179 0 : sal_uInt16 nAlias = 0;
1180 0 : if( m_nSelectionType & (nsSelectionType::SEL_DRW_TXT|nsSelectionType::SEL_TXT) )
1181 : {
1182 0 : switch( nSlot )
1183 : {
1184 0 : case SID_ALIGN_ANY_LEFT : nAlias = SID_ATTR_PARA_ADJUST_LEFT; break;
1185 0 : case SID_ALIGN_ANY_HCENTER : nAlias = SID_ATTR_PARA_ADJUST_CENTER; break;
1186 0 : case SID_ALIGN_ANY_RIGHT : nAlias = SID_ATTR_PARA_ADJUST_RIGHT; break;
1187 0 : case SID_ALIGN_ANY_JUSTIFIED: nAlias = SID_ATTR_PARA_ADJUST_BLOCK; break;
1188 0 : case SID_ALIGN_ANY_TOP : nAlias = SID_TABLE_VERT_NONE; break;
1189 0 : case SID_ALIGN_ANY_VCENTER : nAlias = SID_TABLE_VERT_CENTER; break;
1190 0 : case SID_ALIGN_ANY_BOTTOM : nAlias = SID_TABLE_VERT_BOTTOM; break;
1191 : }
1192 : }
1193 : else
1194 : {
1195 0 : switch( nSlot )
1196 : {
1197 0 : case SID_ALIGN_ANY_LEFT : nAlias = SID_OBJECT_ALIGN_LEFT ; break;
1198 0 : case SID_ALIGN_ANY_HCENTER : nAlias = SID_OBJECT_ALIGN_CENTER ; break;
1199 0 : case SID_ALIGN_ANY_RIGHT : nAlias = SID_OBJECT_ALIGN_RIGHT ; break;
1200 0 : case SID_ALIGN_ANY_TOP : nAlias = SID_OBJECT_ALIGN_UP ; break;
1201 0 : case SID_ALIGN_ANY_VCENTER : nAlias = SID_OBJECT_ALIGN_MIDDLE ; break;
1202 0 : case SID_ALIGN_ANY_BOTTOM : nAlias = SID_OBJECT_ALIGN_DOWN ; break;
1203 : }
1204 : }
1205 : //special handling for the draw shell
1206 0 : if(nAlias && (m_nSelectionType & (nsSelectionType::SEL_DRW)))
1207 : {
1208 0 : SfxAllEnumItem aEnumItem(SID_OBJECT_ALIGN, nAlias - SID_OBJECT_ALIGN_LEFT);
1209 : GetViewFrame()->GetDispatcher()->Execute(
1210 0 : SID_OBJECT_ALIGN, SFX_CALLMODE_ASYNCHRON, &aEnumItem, 0L);
1211 : }
1212 0 : else if(nAlias)
1213 : //these slots are either re-mapped to text or object alignment
1214 : GetViewFrame()->GetDispatcher()->Execute(
1215 0 : nAlias, SFX_CALLMODE_ASYNCHRON);
1216 : }
1217 0 : break;
1218 : case SID_RESTORE_EDITING_VIEW:
1219 : {
1220 : //#i33307# restore editing position
1221 0 : Point aCrsrPos;
1222 : bool bSelectObj;
1223 0 : if(m_pViewImpl->GetRestorePosition(aCrsrPos, bSelectObj))
1224 : {
1225 0 : m_pWrtShell->SwCrsrShell::SetCrsr( aCrsrPos, !bSelectObj );
1226 0 : if( bSelectObj )
1227 : {
1228 0 : m_pWrtShell->SelectObj( aCrsrPos );
1229 0 : m_pWrtShell->EnterSelFrmMode( &aCrsrPos );
1230 : }
1231 : }
1232 : }
1233 0 : break;
1234 : case SID_INSERT_GRAPHIC:
1235 : {
1236 0 : rReq.SetReturnValue(SfxBoolItem(nSlot, InsertGraphicDlg( rReq )));
1237 : }
1238 0 : break;
1239 :
1240 : default:
1241 : OSL_ENSURE(!this, "wrong dispatcher");
1242 0 : return;
1243 : }
1244 0 : if(!bIgnore)
1245 0 : rReq.Done();
1246 : }
1247 :
1248 : /// invalidate page numbering field
1249 0 : void SwView::UpdatePageNums(sal_uInt16 nPhyNum, sal_uInt16 nVirtNum, const OUString& rPgStr)
1250 : {
1251 0 : OUString sTemp(GetPageStr( nPhyNum, nVirtNum, rPgStr ));
1252 0 : const SfxStringItem aTmp( FN_STAT_PAGE, sTemp );
1253 0 : SfxBindings &rBnd = GetViewFrame()->GetBindings();
1254 0 : rBnd.SetState( aTmp );
1255 0 : rBnd.Update( FN_STAT_PAGE );
1256 0 : }
1257 :
1258 0 : void SwView::UpdateDocStats()
1259 : {
1260 0 : SfxBindings &rBnd = GetViewFrame()->GetBindings();
1261 0 : rBnd.Invalidate( FN_STAT_WORDCOUNT );
1262 0 : rBnd.Update( FN_STAT_WORDCOUNT );
1263 0 : }
1264 :
1265 0 : void SwView::SetAnnotationMode(bool bMode)
1266 : {
1267 0 : m_bAnnotationMode = bMode;
1268 0 : }
1269 :
1270 : /// get status of the status line
1271 0 : void SwView::StateStatusLine(SfxItemSet &rSet)
1272 : {
1273 0 : SwWrtShell& rShell = GetWrtShell();
1274 :
1275 0 : SfxWhichIter aIter( rSet );
1276 0 : sal_uInt16 nWhich = aIter.FirstWhich();
1277 : OSL_ENSURE( nWhich, "empty set");
1278 :
1279 : //get section change event
1280 0 : const SwSection* CurrSect = rShell.GetCurrSection();
1281 0 : if( CurrSect )
1282 : {
1283 0 : OUString sCurrentSectionName = CurrSect->GetSectionName();
1284 0 : if(sCurrentSectionName != m_sOldSectionName)
1285 : {
1286 0 : rShell.FireSectionChangeEvent(2, 1);
1287 : }
1288 0 : m_sOldSectionName = sCurrentSectionName;
1289 : }
1290 0 : else if (!m_sOldSectionName.isEmpty())
1291 : {
1292 0 : rShell.FireSectionChangeEvent(2, 1);
1293 0 : m_sOldSectionName= OUString();
1294 : }
1295 : //get column change event
1296 0 : if(rShell.bColumnChange())
1297 : {
1298 0 : rShell.FireColumnChangeEvent(2, 1);
1299 : }
1300 :
1301 0 : while( nWhich )
1302 : {
1303 0 : switch( nWhich )
1304 : {
1305 : case FN_STAT_PAGE: {
1306 : // number of pages, log. page number
1307 : sal_uInt16 nPage, nLogPage;
1308 0 : OUString sDisplay;
1309 0 : rShell.GetPageNumber( -1, rShell.IsCrsrVisible(), nPage, nLogPage, sDisplay );
1310 : rSet.Put( SfxStringItem( FN_STAT_PAGE,
1311 0 : GetPageStr( nPage, nLogPage, sDisplay) ));
1312 : //if existing page number is not equal to old page number, send out this event.
1313 0 : if (m_nOldPageNum != nLogPage )
1314 : {
1315 0 : if (m_nOldPageNum != 0)
1316 0 : rShell.FirePageChangeEvent(m_nOldPageNum, nLogPage);
1317 0 : m_nOldPageNum = nLogPage;
1318 : }
1319 0 : sal_uInt16 nCnt = GetWrtShell().GetPageCnt();
1320 0 : if (m_nPageCnt != nCnt) // notify Basic
1321 : {
1322 0 : m_nPageCnt = nCnt;
1323 0 : SFX_APP()->NotifyEvent(SfxEventHint(SW_EVENT_PAGE_COUNT, SwDocShell::GetEventName(STR_SW_EVENT_PAGE_COUNT), GetViewFrame()->GetObjectShell()), false);
1324 0 : }
1325 : }
1326 0 : break;
1327 :
1328 : case FN_STAT_WORDCOUNT:
1329 : {
1330 0 : SwDocStat selectionStats;
1331 0 : SwDocStat documentStats;
1332 : {
1333 0 : rShell.CountWords(selectionStats);
1334 0 : documentStats = rShell.GetDoc()->GetUpdatedDocStat( true /* complete-async */, false /* don't update fields */ );
1335 : }
1336 :
1337 : OUString wordCount(SW_RES(selectionStats.nWord ?
1338 0 : STR_STATUSBAR_WORDCOUNT : STR_STATUSBAR_WORDCOUNT_NO_SELECTION));
1339 0 : wordCount = wordCount.replaceFirst("%1",
1340 0 : OUString::number(selectionStats.nWord ? selectionStats.nWord : documentStats.nWord));
1341 0 : wordCount = wordCount.replaceFirst("%2",
1342 0 : OUString::number(selectionStats.nChar ? selectionStats.nChar : documentStats.nChar));
1343 0 : rSet.Put(SfxStringItem(FN_STAT_WORDCOUNT, wordCount));
1344 :
1345 0 : SwWordCountWrapper *pWrdCnt = (SwWordCountWrapper*)GetViewFrame()->GetChildWindow(SwWordCountWrapper::GetChildWindowId());
1346 0 : if (pWrdCnt)
1347 0 : pWrdCnt->SetCounts(selectionStats, documentStats);
1348 : }
1349 0 : break;
1350 :
1351 : case FN_STAT_TEMPLATE:
1352 : {
1353 : rSet.Put(SfxStringItem( FN_STAT_TEMPLATE,
1354 0 : rShell.GetCurPageStyle(sal_False)));
1355 :
1356 : }
1357 0 : break;
1358 : case SID_ATTR_ZOOM:
1359 : {
1360 0 : if ( ( GetDocShell()->GetCreateMode() != SFX_CREATE_MODE_EMBEDDED ) || !GetDocShell()->IsInPlaceActive() )
1361 : {
1362 0 : const SwViewOption* pVOpt = rShell.GetViewOptions();
1363 0 : SvxZoomType eZoom = (SvxZoomType) pVOpt->GetZoomType();
1364 : SvxZoomItem aZoom(eZoom,
1365 0 : pVOpt->GetZoom());
1366 0 : if( pVOpt->getBrowseMode() )
1367 : {
1368 : aZoom.SetValueSet(
1369 : SVX_ZOOM_ENABLE_50|
1370 : SVX_ZOOM_ENABLE_75|
1371 : SVX_ZOOM_ENABLE_100|
1372 : SVX_ZOOM_ENABLE_150|
1373 0 : SVX_ZOOM_ENABLE_200);
1374 : }
1375 0 : rSet.Put( aZoom );
1376 : }
1377 : else
1378 0 : rSet.DisableItem( SID_ATTR_ZOOM );
1379 : }
1380 0 : break;
1381 : case SID_ATTR_VIEWLAYOUT:
1382 : {
1383 0 : if ( ( GetDocShell()->GetCreateMode() != SFX_CREATE_MODE_EMBEDDED ) || !GetDocShell()->IsInPlaceActive() )
1384 : {
1385 0 : const SwViewOption* pVOpt = rShell.GetViewOptions();
1386 0 : const sal_uInt16 nColumns = pVOpt->GetViewLayoutColumns();
1387 0 : const bool bBookMode = pVOpt->IsViewLayoutBookMode();
1388 0 : SvxViewLayoutItem aViewLayout(nColumns, bBookMode);
1389 0 : rSet.Put( aViewLayout );
1390 : }
1391 : else
1392 0 : rSet.DisableItem( SID_ATTR_VIEWLAYOUT );
1393 : }
1394 0 : break;
1395 : case SID_ATTR_ZOOMSLIDER:
1396 : {
1397 0 : if ( ( GetDocShell()->GetCreateMode() != SFX_CREATE_MODE_EMBEDDED ) || !GetDocShell()->IsInPlaceActive() )
1398 : {
1399 0 : const SwViewOption* pVOpt = rShell.GetViewOptions();
1400 0 : const sal_uInt16 nCurrentZoom = pVOpt->GetZoom();
1401 0 : SvxZoomSliderItem aZoomSliderItem( nCurrentZoom, MINZOOM, MAXZOOM );
1402 0 : aZoomSliderItem.AddSnappingPoint( 100 );
1403 :
1404 0 : if ( !m_pWrtShell->getIDocumentSettingAccess()->get(IDocumentSettingAccess::BROWSE_MODE) )
1405 : {
1406 0 : const sal_uInt16 nColumns = pVOpt->GetViewLayoutColumns();
1407 0 : const bool bAutomaticViewLayout = 0 == nColumns;
1408 0 : const SwPostItMgr* pMgr = GetPostItMgr();
1409 :
1410 : // snapping points:
1411 : // automatic mode: 1 Page, 2 Pages, 100%
1412 : // n Columns mode: n Pages, 100%
1413 : // n Columns book mode: nPages without gaps, 100%
1414 0 : const SwRect aPageRect( m_pWrtShell->GetAnyCurRect( RECT_PAGE_CALC ) );
1415 0 : const SwRect aRootRect( m_pWrtShell->GetAnyCurRect( RECT_PAGES_AREA ) ); // width of columns
1416 0 : Size aPageSize( aPageRect.SSize() );
1417 0 : aPageSize.Width() += pMgr->HasNotes() && pMgr->ShowNotes() ?
1418 0 : pMgr->GetSidebarWidth() + pMgr->GetSidebarBorderWidth() :
1419 0 : 0;
1420 :
1421 0 : Size aRootSize( aRootRect.SSize() );
1422 :
1423 0 : const MapMode aTmpMap( MAP_TWIP );
1424 0 : const Size& rEditSize = GetEditWin().GetOutputSizePixel();
1425 0 : const Size aWindowSize( GetEditWin().PixelToLogic( rEditSize, aTmpMap ) );
1426 :
1427 0 : const long nOf = DOCUMENTBORDER * 2L;
1428 0 : long nTmpWidth = bAutomaticViewLayout ? aPageSize.Width() : aRootSize.Width();
1429 0 : nTmpWidth += nOf;
1430 0 : aPageSize.Height() += nOf;
1431 0 : long nFac = aWindowSize.Width() * 100 / nTmpWidth;
1432 :
1433 0 : long nVisPercent = aWindowSize.Height() * 100 / aPageSize.Height();
1434 0 : nFac = std::min( nFac, nVisPercent );
1435 :
1436 0 : aZoomSliderItem.AddSnappingPoint( nFac );
1437 :
1438 0 : if ( bAutomaticViewLayout )
1439 : {
1440 0 : nTmpWidth += aPageSize.Width() + GAPBETWEENPAGES;
1441 0 : nFac = aWindowSize.Width() * 100 / nTmpWidth;
1442 0 : nFac = std::min( nFac, nVisPercent );
1443 0 : aZoomSliderItem.AddSnappingPoint( nFac );
1444 0 : }
1445 : }
1446 :
1447 0 : rSet.Put( aZoomSliderItem );
1448 : }
1449 : else
1450 0 : rSet.DisableItem( SID_ATTR_ZOOMSLIDER );
1451 : }
1452 0 : break;
1453 : case SID_ATTR_POSITION:
1454 : case SID_ATTR_SIZE:
1455 : {
1456 0 : if( !rShell.IsFrmSelected() && !rShell.IsObjSelected() )
1457 0 : SwBaseShell::_SetFrmMode( FLY_DRAG_END );
1458 : else
1459 : {
1460 0 : FlyMode eFrameMode = SwBaseShell::GetFrmMode();
1461 0 : if ( eFrameMode == FLY_DRAG_START || eFrameMode == FLY_DRAG )
1462 : {
1463 0 : if ( nWhich == SID_ATTR_POSITION )
1464 : rSet.Put( SfxPointItem( SID_ATTR_POSITION,
1465 0 : rShell.GetAnchorObjDiff()));
1466 : else
1467 : rSet.Put( SvxSizeItem( SID_ATTR_SIZE,
1468 0 : rShell.GetObjSize()));
1469 : }
1470 : }
1471 : }
1472 0 : break;
1473 : case SID_TABLE_CELL:
1474 :
1475 0 : if( rShell.IsFrmSelected() || rShell.IsObjSelected() )
1476 : {
1477 : // #i39171# Don't put a SvxSizeItem into a slot which is defined as SfxStringItem.
1478 : // SvxPosSizeStatusBarControl no longer resets to empty display if only one slot
1479 : // has no item, so SID_TABLE_CELL can remain empty (the SvxSizeItem is supplied
1480 : // in SID_ATTR_SIZE).
1481 : }
1482 : else
1483 : {
1484 0 : OUString sStr;
1485 0 : if( rShell.IsCrsrInTbl() )
1486 : {
1487 : // table name + cell coordinate
1488 0 : sStr = rShell.GetTableFmt()->GetName();
1489 0 : sStr += ":";
1490 0 : sStr += rShell.GetBoxNms();
1491 : }
1492 : else
1493 : {
1494 0 : const SwSection* pCurrSect = rShell.GetCurrSection();
1495 0 : if( pCurrSect )
1496 : {
1497 0 : switch( pCurrSect->GetType() )
1498 : {
1499 : case TOX_HEADER_SECTION:
1500 : case TOX_CONTENT_SECTION:
1501 : {
1502 0 : const SwTOXBase* pTOX = m_pWrtShell->GetCurTOX();
1503 0 : if( pTOX )
1504 0 : sStr = pTOX->GetTOXName();
1505 : else
1506 : {
1507 : OSL_ENSURE( !this,
1508 : "Unknown kind of section" );
1509 0 : sStr = pCurrSect->GetSectionName();
1510 : }
1511 : }
1512 0 : break;
1513 : default:
1514 0 : sStr = pCurrSect->GetSectionName();
1515 0 : break;
1516 : }
1517 : }
1518 : }
1519 :
1520 0 : const SwNumRule* pNumRule = rShell.GetNumRuleAtCurrCrsrPos();
1521 0 : const bool bOutlineNum = pNumRule ? pNumRule->IsOutlineRule() : 0;
1522 :
1523 0 : if (pNumRule && !bOutlineNum ) // cursor in numbering
1524 : {
1525 0 : sal_uInt8 nNumLevel = rShell.GetNumLevel();
1526 0 : if ( nNumLevel < MAXLEVEL )
1527 : {
1528 0 : if(!pNumRule->IsAutoRule())
1529 : {
1530 0 : SfxItemSet aSet(GetPool(),
1531 0 : RES_PARATR_NUMRULE, RES_PARATR_NUMRULE);
1532 0 : rShell.GetCurAttr(aSet);
1533 0 : if(SFX_ITEM_AVAILABLE <=
1534 0 : aSet.GetItemState(RES_PARATR_NUMRULE, true))
1535 : {
1536 : const OUString& rNumStyle =
1537 : ((const SfxStringItem &)
1538 0 : aSet.Get(RES_PARATR_NUMRULE)).GetValue();
1539 0 : if(!rNumStyle.isEmpty())
1540 : {
1541 0 : if(!sStr.isEmpty())
1542 0 : sStr += sStatusDelim;
1543 0 : sStr += rNumStyle;
1544 : }
1545 0 : }
1546 : }
1547 0 : if (!sStr.isEmpty())
1548 0 : sStr += sStatusDelim;
1549 0 : sStr += SW_RESSTR(STR_NUM_LEVEL);
1550 0 : sStr += OUString::number( nNumLevel + 1 );
1551 :
1552 : }
1553 : }
1554 0 : const int nOutlineLevel = rShell.GetCurrentParaOutlineLevel();
1555 0 : if( nOutlineLevel != 0 )
1556 : {
1557 0 : if (!sStr.isEmpty())
1558 0 : sStr += sStatusComma;
1559 0 : if( bOutlineNum )
1560 : {
1561 0 : sStr += SW_RESSTR(STR_OUTLINE_NUMBERING);
1562 0 : sStr += sStatusDelim;
1563 0 : sStr += SW_RESSTR(STR_NUM_LEVEL);
1564 : }
1565 : else
1566 0 : sStr += SW_RESSTR(STR_NUM_OUTLINE);
1567 0 : sStr += OUString::number( nOutlineLevel);
1568 : }
1569 :
1570 0 : if( rShell.HasReadonlySel() )
1571 : {
1572 0 : if (!sStr.isEmpty())
1573 0 : sStr = sStatusDelim + sStr;
1574 0 : sStr = SW_RESSTR(SW_STR_READONLY) + sStr;
1575 : }
1576 0 : if (!sStr.isEmpty())
1577 0 : rSet.Put( SfxStringItem( SID_TABLE_CELL, sStr ));
1578 : }
1579 0 : break;
1580 : case FN_STAT_SELMODE:
1581 : {
1582 0 : if(rShell.IsStdMode())
1583 0 : rSet.Put(SfxUInt16Item(FN_STAT_SELMODE, 0));
1584 0 : else if(rShell.IsAddMode())
1585 0 : rSet.Put(SfxUInt16Item(FN_STAT_SELMODE, 2));
1586 0 : else if(rShell.IsBlockMode())
1587 0 : rSet.Put(SfxUInt16Item(FN_STAT_SELMODE, 3));
1588 : else
1589 0 : rSet.Put(SfxUInt16Item(FN_STAT_SELMODE, 1));
1590 0 : break;
1591 : }
1592 : case SID_ATTR_INSERT:
1593 0 : if( rShell.IsRedlineOn() )
1594 0 : rSet.DisableItem( nWhich );
1595 : else
1596 : {
1597 0 : rSet.Put(SfxBoolItem(SID_ATTR_INSERT,rShell.IsInsMode()));
1598 : }
1599 0 : break;
1600 : }
1601 0 : nWhich = aIter.NextWhich();
1602 0 : }
1603 0 : }
1604 :
1605 : /** excecute method for the status line
1606 : *
1607 : * @param rReq ???
1608 : */
1609 0 : void SwView::ExecuteStatusLine(SfxRequest &rReq)
1610 : {
1611 0 : SwWrtShell &rSh = GetWrtShell();
1612 0 : const SfxItemSet* pArgs = rReq.GetArgs();
1613 0 : const SfxPoolItem* pItem=NULL;
1614 0 : sal_Bool bUp = sal_False;
1615 0 : sal_uInt16 nWhich = rReq.GetSlot();
1616 0 : switch( nWhich )
1617 : {
1618 : case FN_STAT_PAGE:
1619 : {
1620 : GetViewFrame()->GetDispatcher()->Execute( SID_NAVIGATOR,
1621 0 : SFX_CALLMODE_SYNCHRON|SFX_CALLMODE_RECORD );
1622 : }
1623 0 : break;
1624 :
1625 : case FN_STAT_WORDCOUNT:
1626 : {
1627 : GetViewFrame()->GetDispatcher()->Execute(FN_WORDCOUNT_DIALOG,
1628 0 : SFX_CALLMODE_SYNCHRON|SFX_CALLMODE_RECORD );
1629 : }
1630 0 : break;
1631 :
1632 : case FN_STAT_BOOKMARK:
1633 0 : if ( pArgs )
1634 : {
1635 0 : if (SFX_ITEM_SET == pArgs->GetItemState( nWhich, true, &pItem))
1636 : {
1637 0 : const IDocumentMarkAccess* pMarkAccess = rSh.getIDocumentMarkAccess();
1638 0 : const sal_Int32 nIdx = static_cast<const SfxUInt16Item*>(pItem)->GetValue();
1639 0 : if(nIdx < pMarkAccess->getBookmarksCount())
1640 : {
1641 0 : const IDocumentMarkAccess::const_iterator_t ppBookmark = rSh.getIDocumentMarkAccess()->getBookmarksBegin() + nIdx;
1642 0 : rSh.EnterStdMode();
1643 0 : rSh.GotoMark( ppBookmark->get() );
1644 : }
1645 : else
1646 : OSL_FAIL("SwView::ExecuteStatusLine(..)"
1647 : " - Ignoring out of range bookmark index");
1648 : }
1649 : }
1650 0 : break;
1651 :
1652 : case FN_STAT_TEMPLATE:
1653 : {
1654 : GetViewFrame()->GetDispatcher()->Execute(FN_FORMAT_PAGE_DLG,
1655 0 : SFX_CALLMODE_SYNCHRON|SFX_CALLMODE_RECORD );
1656 : }
1657 0 : break;
1658 : case SID_ATTR_ZOOM:
1659 : {
1660 0 : if ( ( GetDocShell()->GetCreateMode() != SFX_CREATE_MODE_EMBEDDED ) || !GetDocShell()->IsInPlaceActive() )
1661 : {
1662 0 : const SfxItemSet *pSet = 0;
1663 0 : boost::scoped_ptr<AbstractSvxZoomDialog> pDlg;
1664 0 : if ( pArgs )
1665 0 : pSet = pArgs;
1666 : else
1667 : {
1668 0 : const SwViewOption& rViewOptions = *rSh.GetViewOptions();
1669 0 : SfxItemSet aCoreSet(m_pShell->GetPool(), SID_ATTR_ZOOM, SID_ATTR_ZOOM, SID_ATTR_VIEWLAYOUT, SID_ATTR_VIEWLAYOUT, 0 );
1670 0 : SvxZoomItem aZoom( (SvxZoomType)rViewOptions.GetZoomType(), rViewOptions.GetZoom() );
1671 :
1672 0 : const bool bBrowseMode = rSh.GetViewOptions()->getBrowseMode();
1673 0 : if( bBrowseMode )
1674 : {
1675 : aZoom.SetValueSet(
1676 : SVX_ZOOM_ENABLE_50|
1677 : SVX_ZOOM_ENABLE_75|
1678 : SVX_ZOOM_ENABLE_100|
1679 : SVX_ZOOM_ENABLE_150|
1680 0 : SVX_ZOOM_ENABLE_200);
1681 : }
1682 0 : aCoreSet.Put( aZoom );
1683 :
1684 0 : if ( !bBrowseMode )
1685 : {
1686 0 : const SvxViewLayoutItem aViewLayout( rViewOptions.GetViewLayoutColumns(), rViewOptions.IsViewLayoutBookMode() );
1687 0 : aCoreSet.Put( aViewLayout );
1688 : }
1689 :
1690 0 : SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
1691 0 : if(pFact)
1692 : {
1693 0 : pDlg.reset(pFact->CreateSvxZoomDialog(&GetViewFrame()->GetWindow(), aCoreSet));
1694 : OSL_ENSURE(pDlg, "Zooming fail!");
1695 0 : if (pDlg)
1696 : {
1697 0 : pDlg->SetLimits( MINZOOM, MAXZOOM );
1698 0 : if( pDlg->Execute() != RET_CANCEL )
1699 0 : pSet = pDlg->GetOutputItemSet();
1700 : }
1701 0 : }
1702 : }
1703 :
1704 0 : const SfxPoolItem* pViewLayoutItem = 0;
1705 0 : if ( pSet && SFX_ITEM_SET == pSet->GetItemState(SID_ATTR_VIEWLAYOUT, true, &pViewLayoutItem))
1706 : {
1707 0 : const sal_uInt16 nColumns = ((const SvxViewLayoutItem *)pViewLayoutItem)->GetValue();
1708 0 : const bool bBookMode = ((const SvxViewLayoutItem *)pViewLayoutItem)->IsBookMode();
1709 0 : SetViewLayout( nColumns, bBookMode );
1710 : }
1711 :
1712 0 : if ( pSet && SFX_ITEM_SET == pSet->GetItemState(SID_ATTR_ZOOM, true, &pItem))
1713 : {
1714 0 : enum SvxZoomType eType = ((const SvxZoomItem *)pItem)->GetType();
1715 0 : SetZoom( eType, ((const SvxZoomItem *)pItem)->GetValue() );
1716 : }
1717 0 : bUp = sal_True;
1718 0 : if ( pItem )
1719 0 : rReq.AppendItem( *pItem );
1720 0 : rReq.Done();
1721 : }
1722 : }
1723 0 : break;
1724 :
1725 : case SID_ATTR_VIEWLAYOUT:
1726 : {
1727 0 : if ( pArgs && !rSh.getIDocumentSettingAccess()->get(IDocumentSettingAccess::BROWSE_MODE) &&
1728 0 : ( ( GetDocShell()->GetCreateMode() != SFX_CREATE_MODE_EMBEDDED ) || !GetDocShell()->IsInPlaceActive() ) )
1729 : {
1730 0 : if ( SFX_ITEM_SET == pArgs->GetItemState(SID_ATTR_VIEWLAYOUT, true, &pItem ))
1731 : {
1732 0 : const sal_uInt16 nColumns = ((const SvxViewLayoutItem *)pItem)->GetValue();
1733 0 : const bool bBookMode = (0 == nColumns || 0 != (nColumns % 2)) ?
1734 : false :
1735 0 : ((const SvxViewLayoutItem *)pItem)->IsBookMode();
1736 :
1737 0 : SetViewLayout( nColumns, bBookMode );
1738 : }
1739 :
1740 0 : bUp = sal_True;
1741 0 : rReq.Done();
1742 :
1743 0 : InvalidateRulerPos();
1744 : }
1745 : }
1746 0 : break;
1747 :
1748 : case SID_ATTR_ZOOMSLIDER:
1749 : {
1750 0 : if ( pArgs && ( ( GetDocShell()->GetCreateMode() != SFX_CREATE_MODE_EMBEDDED ) || !GetDocShell()->IsInPlaceActive() ) )
1751 : {
1752 0 : if ( SFX_ITEM_SET == pArgs->GetItemState(SID_ATTR_ZOOMSLIDER, true, &pItem ))
1753 : {
1754 0 : const sal_uInt16 nCurrentZoom = ((const SvxZoomSliderItem *)pItem)->GetValue();
1755 0 : SetZoom( SVX_ZOOM_PERCENT, nCurrentZoom );
1756 : }
1757 :
1758 0 : bUp = sal_True;
1759 0 : rReq.Done();
1760 : }
1761 : }
1762 0 : break;
1763 :
1764 : case SID_ATTR_SIZE:
1765 : {
1766 0 : sal_uLong nId = FN_INSERT_FIELD;
1767 0 : if( rSh.IsCrsrInTbl() )
1768 0 : nId = FN_FORMAT_TABLE_DLG;
1769 0 : else if( rSh.GetCurTOX() )
1770 0 : nId = FN_INSERT_MULTI_TOX;
1771 0 : else if( rSh.GetCurrSection() )
1772 0 : nId = FN_EDIT_REGION;
1773 : else
1774 : {
1775 0 : const SwNumRule* pNumRule = rSh.GetNumRuleAtCurrCrsrPos();
1776 0 : if( pNumRule ) // cursor in numbering
1777 : {
1778 0 : if( pNumRule->IsAutoRule() )
1779 0 : nId = FN_NUMBER_BULLETS;
1780 : else
1781 : {
1782 : // start dialog of the painter
1783 0 : nId = 0;
1784 : }
1785 : }
1786 0 : else if( rSh.IsFrmSelected() )
1787 0 : nId = FN_FORMAT_FRAME_DLG;
1788 0 : else if( rSh.IsObjSelected() )
1789 0 : nId = SID_ATTR_TRANSFORM;
1790 : }
1791 0 : if( nId )
1792 : GetViewFrame()->GetDispatcher()->Execute(
1793 0 : static_cast< sal_uInt16 >( nId ), SFX_CALLMODE_SYNCHRON | SFX_CALLMODE_RECORD );
1794 : }
1795 0 : break;
1796 :
1797 : case FN_STAT_SELMODE:
1798 : {
1799 0 : if ( pArgs )
1800 : {
1801 0 : if (SFX_ITEM_SET == pArgs->GetItemState( nWhich, true, &pItem))
1802 : {
1803 0 : switch ( ((const SfxUInt16Item *)pItem)->GetValue() )
1804 : {
1805 0 : case 0: rSh.EnterStdMode(); break;
1806 0 : case 1: rSh.EnterExtMode(); break;
1807 0 : case 2: rSh.EnterAddMode(); break;
1808 0 : case 3: rSh.EnterBlockMode(); break;
1809 : }
1810 : }
1811 : }
1812 : else
1813 : {
1814 :
1815 0 : if( !rSh.IsAddMode() && !rSh.IsExtMode() && !rSh.IsBlockMode() )
1816 0 : rSh.ToggleExtMode();
1817 0 : else if ( rSh.IsExtMode() )
1818 : {
1819 0 : rSh.ToggleExtMode();
1820 0 : rSh.ToggleAddMode();
1821 : }
1822 0 : else if ( rSh.IsAddMode() )
1823 : {
1824 0 : rSh.ToggleAddMode();
1825 0 : rSh.ToggleBlockMode();
1826 : }
1827 : else
1828 0 : rSh.ToggleBlockMode();
1829 : }
1830 0 : bUp = sal_True;
1831 0 : break;
1832 : }
1833 : case FN_SET_ADD_MODE:
1834 0 : rSh.ToggleAddMode();
1835 0 : nWhich = FN_STAT_SELMODE;
1836 0 : bUp = sal_True;
1837 0 : break;
1838 : case FN_SET_BLOCK_MODE:
1839 0 : rSh.ToggleBlockMode();
1840 0 : nWhich = FN_STAT_SELMODE;
1841 0 : bUp = sal_True;
1842 0 : break;
1843 : case FN_SET_EXT_MODE:
1844 0 : rSh.ToggleExtMode();
1845 0 : nWhich = FN_STAT_SELMODE;
1846 0 : bUp = sal_True;
1847 0 : break;
1848 : case SID_ATTR_INSERT:
1849 0 : SwPostItMgr* pMgr = GetPostItMgr();
1850 0 : if ( pMgr && pMgr->HasActiveSidebarWin() )
1851 : {
1852 0 : pMgr->ToggleInsModeOnActiveSidebarWin();
1853 : }
1854 : else
1855 0 : rSh.ToggleInsMode();
1856 0 : bUp = sal_True;
1857 0 : break;
1858 :
1859 : }
1860 0 : if ( bUp )
1861 : {
1862 0 : SfxBindings &rBnd = GetViewFrame()->GetBindings();
1863 0 : rBnd.Invalidate(nWhich);
1864 0 : rBnd.Update(nWhich);
1865 : }
1866 0 : }
1867 :
1868 0 : void SwView::InsFrmMode(sal_uInt16 nCols)
1869 : {
1870 0 : if ( m_pWrtShell->HasWholeTabSelection() )
1871 : {
1872 0 : SwFlyFrmAttrMgr aMgr( sal_True, m_pWrtShell, FRMMGR_TYPE_TEXT );
1873 :
1874 : const SwFrmFmt &rPageFmt =
1875 0 : m_pWrtShell->GetPageDesc(m_pWrtShell->GetCurPageDesc()).GetMaster();
1876 0 : SwTwips lWidth = rPageFmt.GetFrmSize().GetWidth();
1877 0 : const SvxLRSpaceItem &rLR = rPageFmt.GetLRSpace();
1878 0 : lWidth -= rLR.GetLeft() + rLR.GetRight();
1879 0 : aMgr.SetSize(Size(lWidth, aMgr.GetSize().Height()));
1880 0 : if(nCols > 1)
1881 : {
1882 0 : SwFmtCol aCol;
1883 0 : aCol.Init( nCols, aCol.GetGutterWidth(), aCol.GetWishWidth() );
1884 0 : aMgr.SetCol( aCol );
1885 : }
1886 0 : aMgr.InsertFlyFrm();
1887 : }
1888 : else
1889 0 : GetEditWin().InsFrm(nCols);
1890 0 : }
1891 :
1892 : /// show "edit link" dialog
1893 0 : void SwView::EditLinkDlg()
1894 : {
1895 0 : sal_Bool bWeb = 0 != PTR_CAST(SwWebView, this);
1896 0 : SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
1897 0 : boost::scoped_ptr<SfxAbstractLinksDialog> pDlg(pFact->CreateLinksDialog( &GetViewFrame()->GetWindow(), &GetWrtShell().GetLinkManager(), bWeb ));
1898 0 : if ( pDlg )
1899 : {
1900 0 : pDlg->Execute();
1901 0 : }
1902 0 : }
1903 :
1904 0 : bool SwView::JumpToSwMark( const OUString& rMark )
1905 : {
1906 0 : bool bRet = false;
1907 0 : if( !rMark.isEmpty() )
1908 : {
1909 : // place bookmark at top-center
1910 0 : sal_Bool bSaveCC = IsCrsrAtCenter();
1911 0 : sal_Bool bSaveCT = IsCrsrAtTop();
1912 0 : SetCrsrAtTop( sal_True );
1913 :
1914 : // For scrolling the FrameSet, the corresponding shell needs to have the focus.
1915 0 : sal_Bool bHasShFocus = m_pWrtShell->HasShFcs();
1916 0 : if( !bHasShFocus )
1917 0 : m_pWrtShell->ShGetFcs( sal_False );
1918 :
1919 : const SwFmtINetFmt* pINet;
1920 0 : OUString sCmp;
1921 : OUString sMark( INetURLObject::decode( rMark, '%',
1922 : INetURLObject::DECODE_WITH_CHARSET,
1923 0 : RTL_TEXTENCODING_UTF8 ));
1924 :
1925 0 : sal_Int32 nLastPos, nPos = sMark.indexOf( cMarkSeparator );
1926 0 : if( -1 != nPos )
1927 0 : while( -1 != ( nLastPos = sMark.indexOf( cMarkSeparator, nPos + 1 )) )
1928 0 : nPos = nLastPos;
1929 :
1930 0 : IDocumentMarkAccess::const_iterator_t ppMark;
1931 0 : IDocumentMarkAccess* const pMarkAccess = m_pWrtShell->getIDocumentMarkAccess();
1932 0 : if( -1 != nPos )
1933 0 : sCmp = comphelper::string::remove(sMark.copy(nPos + 1), ' ');
1934 :
1935 0 : if( !sCmp.isEmpty() )
1936 : {
1937 0 : rtl::OUString sName( sMark.copy( 0, nPos ) );
1938 0 : sCmp = sCmp.toAsciiLowerCase();
1939 0 : FlyCntType eFlyType = FLYCNTTYPE_ALL;
1940 :
1941 0 : if( sCmp == "region" )
1942 : {
1943 0 : m_pWrtShell->EnterStdMode();
1944 0 : bRet = m_pWrtShell->GotoRegion( sName );
1945 : }
1946 0 : else if( sCmp == "outline" )
1947 : {
1948 0 : m_pWrtShell->EnterStdMode();
1949 0 : bRet = m_pWrtShell->GotoOutline( sName );
1950 : }
1951 0 : else if( sCmp == "frame" )
1952 0 : eFlyType = FLYCNTTYPE_FRM;
1953 0 : else if( sCmp == "graphic" )
1954 0 : eFlyType = FLYCNTTYPE_GRF;
1955 0 : else if( sCmp == "ole" )
1956 0 : eFlyType = FLYCNTTYPE_OLE;
1957 0 : else if( sCmp == "table" )
1958 : {
1959 0 : m_pWrtShell->EnterStdMode();
1960 0 : bRet = m_pWrtShell->GotoTable( sName );
1961 : }
1962 0 : else if( sCmp == "sequence" )
1963 : {
1964 0 : m_pWrtShell->EnterStdMode();
1965 0 : sal_Int32 nNoPos = sName.indexOf( cSequenceMarkSeparator );
1966 0 : if ( nNoPos != -1 )
1967 : {
1968 0 : sal_uInt16 nSeqNo = sName.copy( nNoPos + 1 ).toInt32();
1969 0 : sName = sName.copy( 0, nNoPos );
1970 0 : m_pWrtShell->GotoRefMark( sName, REF_SEQUENCEFLD, nSeqNo );
1971 : }
1972 : }
1973 0 : else if( sCmp == "text" )
1974 : {
1975 : // normal text search
1976 0 : m_pWrtShell->EnterStdMode();
1977 :
1978 : SearchOptions aSearchOpt(
1979 : SearchAlgorithms_ABSOLUTE, 0,
1980 : sName, OUString(),
1981 0 : SvtSysLocale().GetLanguageTag().getLocale(),
1982 : 0,0,0,
1983 0 : TransliterationModules_IGNORE_CASE );
1984 :
1985 : //todo/mba: assuming that notes shouldn't be searched
1986 0 : sal_Bool bSearchInNotes = sal_False;
1987 0 : if( m_pWrtShell->SearchPattern( aSearchOpt, bSearchInNotes, DOCPOS_START, DOCPOS_END ))
1988 : {
1989 0 : m_pWrtShell->EnterStdMode(); // remove the selection
1990 0 : bRet = true;
1991 0 : }
1992 : }
1993 0 : else if( pMarkAccess->getAllMarksEnd() != (ppMark = pMarkAccess->findMark(sMark)) )
1994 0 : m_pWrtShell->GotoMark( ppMark->get(), sal_False, sal_True ), bRet = true;
1995 0 : else if( 0 != ( pINet = m_pWrtShell->FindINetAttr( sMark ) )) {
1996 0 : m_pWrtShell->addCurrentPosition();
1997 0 : bRet = m_pWrtShell->GotoINetAttr( *pINet->GetTxtINetFmt() );
1998 : }
1999 :
2000 : // for all types of Flys
2001 0 : if( FLYCNTTYPE_ALL != eFlyType && m_pWrtShell->GotoFly( sName, eFlyType ))
2002 : {
2003 0 : bRet = true;
2004 0 : if( FLYCNTTYPE_FRM == eFlyType )
2005 : {
2006 : // TextFrames: set Cursor in the frame
2007 0 : m_pWrtShell->UnSelectFrm();
2008 0 : m_pWrtShell->LeaveSelFrmMode();
2009 : }
2010 : else
2011 : {
2012 0 : m_pWrtShell->HideCrsr();
2013 0 : m_pWrtShell->EnterSelFrmMode();
2014 : }
2015 0 : }
2016 : }
2017 0 : else if( pMarkAccess->getAllMarksEnd() != (ppMark = pMarkAccess->findMark(sMark)))
2018 0 : m_pWrtShell->GotoMark( ppMark->get(), sal_False, sal_True ), bRet = true;
2019 0 : else if( 0 != ( pINet = m_pWrtShell->FindINetAttr( sMark ) ))
2020 0 : bRet = m_pWrtShell->GotoINetAttr( *pINet->GetTxtINetFmt() );
2021 :
2022 : // make selection visible later
2023 0 : if ( m_aVisArea.IsEmpty() )
2024 0 : m_bMakeSelectionVisible = sal_True;
2025 :
2026 : // reset ViewStatus
2027 0 : SetCrsrAtTop( bSaveCT, bSaveCC );
2028 :
2029 0 : if( !bHasShFocus )
2030 0 : m_pWrtShell->ShLooseFcs();
2031 : }
2032 0 : return bRet;
2033 : }
2034 :
2035 : // #i67305# Undo after insert from file:
2036 : // Undo "Insert form file" crashes with documents imported from binary filter (.sdw) => disabled
2037 : // Undo "Insert form file" crashes with (.odt) documents crashes if these documents contains
2038 : // page styles with active header/footer => disabled for those documents
2039 0 : static sal_uInt16 lcl_PageDescWithHeader( const SwDoc& rDoc )
2040 : {
2041 0 : sal_uInt16 nRet = 0;
2042 0 : sal_uInt16 nCnt = rDoc.GetPageDescCnt();
2043 0 : for( sal_uInt16 i = 0; i < nCnt; ++i )
2044 : {
2045 0 : const SwPageDesc& rPageDesc = rDoc.GetPageDesc( i );
2046 0 : const SwFrmFmt& rMaster = rPageDesc.GetMaster();
2047 : const SfxPoolItem* pItem;
2048 0 : if( ( SFX_ITEM_SET == rMaster.GetAttrSet().GetItemState( RES_HEADER, false, &pItem ) &&
2049 0 : ((SwFmtHeader*)pItem)->IsActive() ) ||
2050 0 : ( SFX_ITEM_SET == rMaster.GetAttrSet().GetItemState( RES_FOOTER, false, &pItem ) &&
2051 0 : ((SwFmtFooter*)pItem)->IsActive()) )
2052 0 : ++nRet;
2053 : }
2054 0 : return nRet; // number of page styles with active header/footer
2055 : }
2056 :
2057 0 : void SwView::ExecuteInsertDoc( SfxRequest& rRequest, const SfxPoolItem* pItem )
2058 : {
2059 0 : m_pViewImpl->InitRequest( rRequest );
2060 0 : m_pViewImpl->SetParam( pItem ? 1 : 0 );
2061 0 : sal_uInt16 nSlot = rRequest.GetSlot();
2062 :
2063 0 : if ( !pItem )
2064 : {
2065 0 : OUString sEmpty;
2066 0 : InsertDoc( nSlot, sEmpty, sEmpty );
2067 : }
2068 : else
2069 : {
2070 0 : OUString sFile, sFilter;
2071 0 : sFile = ( (const SfxStringItem *)pItem )->GetValue();
2072 0 : if ( SFX_ITEM_SET == rRequest.GetArgs()->GetItemState( FN_PARAM_1, true, &pItem ) )
2073 0 : sFilter = ( (const SfxStringItem *)pItem )->GetValue();
2074 :
2075 0 : bool bHasFileName = !sFile.isEmpty();
2076 0 : long nFound = InsertDoc( nSlot, sFile, sFilter );
2077 :
2078 0 : if ( bHasFileName )
2079 : {
2080 0 : rRequest.SetReturnValue( SfxBoolItem( nSlot, nFound != -1 ) );
2081 0 : rRequest.Done();
2082 0 : }
2083 : }
2084 0 : }
2085 :
2086 0 : long SwView::InsertDoc( sal_uInt16 nSlotId, const OUString& rFileName, const OUString& rFilterName, sal_Int16 nVersion )
2087 : {
2088 0 : SfxMedium* pMed = 0;
2089 0 : SwDocShell* pDocSh = GetDocShell();
2090 :
2091 0 : if( !rFileName.isEmpty() )
2092 : {
2093 0 : SfxObjectFactory& rFact = pDocSh->GetFactory();
2094 0 : const SfxFilter* pFilter = rFact.GetFilterContainer()->GetFilter4FilterName( rFilterName );
2095 0 : if ( !pFilter )
2096 : {
2097 0 : pMed = new SfxMedium(rFileName, STREAM_READ, 0, 0 );
2098 0 : SfxFilterMatcher aMatcher( rFact.GetFilterContainer()->GetName() );
2099 0 : pMed->UseInteractionHandler( true );
2100 0 : ErrCode nErr = aMatcher.GuessFilter( *pMed, &pFilter, sal_False );
2101 0 : if ( nErr )
2102 0 : DELETEZ(pMed);
2103 : else
2104 0 : pMed->SetFilter( pFilter );
2105 : }
2106 : else
2107 0 : pMed = new SfxMedium(rFileName, STREAM_READ, pFilter, 0);
2108 : }
2109 : else
2110 : {
2111 0 : OUString sFactory = OUString::createFromAscii( pDocSh->GetFactory().GetShortName() );
2112 0 : m_pViewImpl->StartDocumentInserter( sFactory, LINK( this, SwView, DialogClosedHdl ) );
2113 0 : return -1;
2114 : }
2115 :
2116 0 : if( !pMed )
2117 0 : return -1;
2118 :
2119 0 : return InsertMedium( nSlotId, pMed, nVersion );
2120 : }
2121 :
2122 0 : long SwView::InsertMedium( sal_uInt16 nSlotId, SfxMedium* pMedium, sal_Int16 nVersion )
2123 : {
2124 0 : sal_Bool bInsert = sal_False, bCompare = sal_False;
2125 0 : long nFound = 0;
2126 0 : SwDocShell* pDocSh = GetDocShell();
2127 :
2128 0 : switch( nSlotId )
2129 : {
2130 0 : case SID_DOCUMENT_MERGE: break;
2131 0 : case SID_DOCUMENT_COMPARE: bCompare = sal_True; break;
2132 0 : case SID_INSERTDOC: bInsert = sal_True; break;
2133 :
2134 : default:
2135 : OSL_ENSURE( !this, "unknown SlotId!" );
2136 0 : bInsert = sal_True;
2137 0 : nSlotId = SID_INSERTDOC;
2138 0 : break;
2139 : }
2140 :
2141 0 : if( bInsert )
2142 : {
2143 : uno::Reference< frame::XDispatchRecorder > xRecorder =
2144 0 : GetViewFrame()->GetBindings().GetRecorder();
2145 0 : if ( xRecorder.is() )
2146 : {
2147 0 : SfxRequest aRequest(GetViewFrame(), SID_INSERTDOC);
2148 0 : aRequest.AppendItem(SfxStringItem(SID_INSERTDOC, pMedium->GetOrigURL()));
2149 0 : if(pMedium->GetFilter())
2150 0 : aRequest.AppendItem(SfxStringItem(FN_PARAM_1, pMedium->GetFilter()->GetName()));
2151 0 : aRequest.Done();
2152 : }
2153 :
2154 0 : SfxObjectShellRef aRef( pDocSh );
2155 :
2156 0 : sal_uInt32 nError = SfxObjectShell::HandleFilter( pMedium, pDocSh );
2157 : // #i16722# aborted?
2158 0 : if(nError != ERRCODE_NONE)
2159 : {
2160 0 : delete pMedium;
2161 0 : return -1;
2162 : }
2163 :
2164 0 : pMedium->Download(); // start download if needed
2165 0 : if( aRef.Is() && 1 < aRef->GetRefCount() ) // still a valid ref?
2166 : {
2167 : SwReader* pRdr;
2168 0 : Reader *pRead = pDocSh->StartConvertFrom( *pMedium, &pRdr, m_pWrtShell );
2169 0 : if( pRead ||
2170 0 : (pMedium->GetFilter()->GetFilterFlags() & SFX_FILTER_STARONEFILTER) != 0 )
2171 : {
2172 0 : sal_uInt16 nUndoCheck = 0;
2173 0 : SwDoc *pDoc = pDocSh->GetDoc();
2174 0 : if( pRead && pDocSh->GetDoc() )
2175 0 : nUndoCheck = lcl_PageDescWithHeader( *pDoc );
2176 : sal_uLong nErrno;
2177 : { //Scope for SwWait-Object, to be able to execute slots
2178 : //outside this scope.
2179 0 : SwWait aWait( *GetDocShell(), true );
2180 0 : m_pWrtShell->StartAllAction();
2181 0 : if ( m_pWrtShell->HasSelection() )
2182 0 : m_pWrtShell->DelRight(); // delete selections
2183 0 : if( pRead )
2184 : {
2185 0 : nErrno = pRdr->Read( *pRead ); // and insert document
2186 0 : delete pRdr;
2187 : }
2188 : else
2189 : {
2190 0 : ::sw::UndoGuard const ug(pDoc->GetIDocumentUndoRedo());
2191 : uno::Reference<text::XTextRange> const xInsertPosition(
2192 : SwXTextRange::CreateXTextRange(*pDoc,
2193 0 : *m_pWrtShell->GetCrsr()->GetPoint(), 0));
2194 0 : nErrno = pDocSh->ImportFrom(*pMedium, xInsertPosition)
2195 0 : ? 0 : ERR_SWG_READ_ERROR;
2196 0 : }
2197 :
2198 : }
2199 :
2200 : // update all "table of ..." sections if needed
2201 0 : if( m_pWrtShell->IsUpdateTOX() )
2202 : {
2203 0 : SfxRequest aReq( FN_UPDATE_TOX, SFX_CALLMODE_SLOT, GetPool() );
2204 0 : Execute( aReq );
2205 0 : m_pWrtShell->SetUpdateTOX( sal_False ); // reset
2206 : }
2207 :
2208 0 : if( pDoc )
2209 : { // Disable Undo for .sdw or
2210 : // if the number of page styles with header/footer has changed
2211 0 : if( !pRead || nUndoCheck != lcl_PageDescWithHeader( *pDoc ) )
2212 : {
2213 0 : pDoc->GetIDocumentUndoRedo().DelAllUndoObj();
2214 : }
2215 : }
2216 :
2217 0 : m_pWrtShell->EndAllAction();
2218 0 : if( nErrno )
2219 : {
2220 0 : ErrorHandler::HandleError( nErrno );
2221 0 : nFound = IsError( nErrno ) ? -1 : 0;
2222 : }
2223 : else
2224 0 : nFound = 0;
2225 : }
2226 0 : }
2227 : }
2228 : else
2229 : {
2230 0 : SfxObjectShellRef xDocSh;
2231 0 : SfxObjectShellLock xLockRef;
2232 :
2233 0 : OUString sFltNm;
2234 0 : const int nRet = SwFindDocShell( xDocSh, xLockRef, pMedium->GetName(), OUString(),
2235 0 : sFltNm, nVersion, pDocSh );
2236 0 : if( nRet )
2237 : {
2238 0 : SwWait aWait( *GetDocShell(), true );
2239 0 : m_pWrtShell->StartAllAction();
2240 :
2241 0 : m_pWrtShell->EnterStdMode(); // delete selections
2242 :
2243 0 : if( bCompare )
2244 0 : nFound = m_pWrtShell->CompareDoc( *((SwDocShell*)&xDocSh)->GetDoc() );
2245 : else
2246 0 : nFound = m_pWrtShell->MergeDoc( *((SwDocShell*)&xDocSh)->GetDoc() );
2247 :
2248 0 : m_pWrtShell->EndAllAction();
2249 :
2250 0 : if (!bCompare && !nFound)
2251 : {
2252 0 : Window* pWin = &GetEditWin();
2253 0 : InfoBox(pWin, SW_RES(MSG_NO_MERGE_ENTRY)).Execute();
2254 : }
2255 0 : if( nRet==2 && xDocSh.Is() )
2256 0 : xDocSh->DoClose();
2257 0 : }
2258 : }
2259 :
2260 0 : delete pMedium;
2261 0 : return nFound;
2262 : }
2263 :
2264 0 : void SwView::EnableMailMerge(sal_Bool bEnable )
2265 : {
2266 0 : m_bInMailMerge = bEnable;
2267 0 : SfxBindings& rBind = GetViewFrame()->GetBindings();
2268 0 : rBind.Invalidate(FN_INSERT_FIELD_DATA_ONLY);
2269 0 : rBind.Update(FN_INSERT_FIELD_DATA_ONLY);
2270 0 : }
2271 :
2272 : namespace
2273 : {
2274 0 : sal_Bool lcl_NeedAdditionalDataSource( const uno::Reference< XDatabaseContext >& _rDatasourceContext )
2275 : {
2276 0 : Sequence < OUString > aNames = _rDatasourceContext->getElementNames();
2277 :
2278 0 : return ( !aNames.getLength()
2279 0 : || ( ( 1 == aNames.getLength() )
2280 0 : && aNames.getConstArray()[0] == SW_MOD()->GetDBConfig()->GetBibliographySource().sDataSource
2281 : )
2282 0 : );
2283 : }
2284 : }
2285 :
2286 0 : void SwView::GenerateFormLetter(sal_Bool bUseCurrentDocument)
2287 : {
2288 0 : if(bUseCurrentDocument)
2289 : {
2290 0 : if(!GetWrtShell().IsAnyDatabaseFieldInDoc())
2291 : {
2292 : //check availability of data sources (except biblio source)
2293 0 : uno::Reference<XComponentContext> xContext( ::comphelper::getProcessComponentContext() );
2294 0 : uno::Reference<XDatabaseContext> xDBContext = DatabaseContext::create(xContext);
2295 0 : sal_Bool bCallAddressPilot = sal_False;
2296 0 : if ( lcl_NeedAdditionalDataSource( xDBContext ) )
2297 : {
2298 : // no data sources are available - create a new one
2299 0 : MessageDialog aQuery(&GetViewFrame()->GetWindow(),
2300 : "DataSourcesUnavailableDialog",
2301 0 : "modules/swriter/ui/datasourcesunavailabledialog.ui");
2302 : // no cancel allowed
2303 0 : if (RET_OK != aQuery.Execute())
2304 0 : return;
2305 0 : bCallAddressPilot = sal_True;
2306 : }
2307 : else
2308 : {
2309 : //take an existing data source or create a new one?
2310 0 : SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
2311 : OSL_ENSURE(pFact, "Dialogdiet fail!");
2312 0 : AbstractMailMergeFieldConnectionsDlg* pConnectionsDlg = pFact->CreateMailMergeFieldConnectionsDlg(&GetViewFrame()->GetWindow());
2313 : OSL_ENSURE(pConnectionsDlg, "Dialogdiet fail!");
2314 0 : if(RET_OK == pConnectionsDlg->Execute())
2315 0 : bCallAddressPilot = !pConnectionsDlg->IsUseExistingConnections();
2316 : else
2317 0 : return;
2318 :
2319 : }
2320 0 : if(bCallAddressPilot)
2321 : {
2322 : GetViewFrame()->GetDispatcher()->Execute(
2323 0 : SID_ADDRESS_DATA_SOURCE, SFX_CALLMODE_SYNCHRON);
2324 0 : if ( lcl_NeedAdditionalDataSource( xDBContext ) )
2325 : // no additional data source has been created
2326 : // -> assume that the user has cancelled the pilot
2327 0 : return;
2328 : }
2329 :
2330 : //call insert fields with database field page available, only
2331 0 : SfxViewFrame* pVFrame = GetViewFrame();
2332 : //at first hide the default field dialog if currently visible
2333 0 : pVFrame->SetChildWindow(FN_INSERT_FIELD, false);
2334 : //enable the status of the db field dialog - it is disabled in the status method
2335 : //to prevent creation of the dialog without mail merge active
2336 0 : EnableMailMerge();
2337 : //then show the "Data base only" field dialog
2338 0 : SfxBoolItem aOn(FN_INSERT_FIELD_DATA_ONLY, true);
2339 : pVFrame->GetDispatcher()->Execute(FN_INSERT_FIELD_DATA_ONLY,
2340 0 : SFX_CALLMODE_SYNCHRON, &aOn, 0L);
2341 0 : return;
2342 : }
2343 : else
2344 : {
2345 0 : OUString sSource;
2346 0 : if(!GetWrtShell().IsFieldDataSourceAvailable(sSource))
2347 : {
2348 0 : MessageDialog aWarning(&GetViewFrame()->GetWindow(),
2349 : "WarnDataSourceDialog",
2350 0 : "modules/swriter/ui/warndatasourcedialog.ui");
2351 0 : OUString sTmp(aWarning.get_primary_text());
2352 0 : aWarning.set_primary_text(sTmp.replaceFirst("%1", "SOURCE"));
2353 0 : if (RET_OK == aWarning.Execute())
2354 : {
2355 0 : SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create();
2356 0 : if ( pFact )
2357 : {
2358 0 : boost::scoped_ptr<VclAbstractDialog> pDlg(pFact->CreateVclDialog( NULL, SID_OPTIONS_DATABASES ));
2359 0 : pDlg->Execute();
2360 : }
2361 : }
2362 0 : return ;
2363 0 : }
2364 : }
2365 0 : SwNewDBMgr* pNewDBMgr = GetWrtShell().GetNewDBMgr();
2366 :
2367 0 : SwDBData aData;
2368 0 : SwWrtShell &rSh = GetWrtShell();
2369 :
2370 0 : std::vector<OUString> aDBNameList;
2371 0 : std::vector<OUString> aAllDBNames;
2372 0 : rSh.GetAllUsedDB( aDBNameList, &aAllDBNames );
2373 0 : if(!aDBNameList.empty())
2374 : {
2375 0 : OUString sDBName(aDBNameList[0]);
2376 0 : aData.sDataSource = sDBName.getToken(0, DB_DELIM);
2377 0 : aData.sCommand = sDBName.getToken(1, DB_DELIM);
2378 0 : aData.nCommandType = sDBName.getToken(2, DB_DELIM ).toInt32();
2379 : }
2380 0 : rSh.EnterStdMode(); // force change in text shell; necessary for mixing DB fields
2381 0 : AttrChangedNotify( &rSh );
2382 :
2383 0 : if (pNewDBMgr)
2384 : {
2385 0 : Sequence<PropertyValue> aProperties(3);
2386 0 : PropertyValue* pValues = aProperties.getArray();
2387 0 : pValues[0].Name = "DataSourceName";
2388 0 : pValues[1].Name = "Command";
2389 0 : pValues[2].Name = "CommandType";
2390 0 : pValues[0].Value <<= aData.sDataSource;
2391 0 : pValues[1].Value <<= aData.sCommand;
2392 0 : pValues[2].Value <<= aData.nCommandType;
2393 0 : pNewDBMgr->ExecuteFormLetter(GetWrtShell(), aProperties, sal_True);
2394 0 : }
2395 : }
2396 : else
2397 : {
2398 : // call documents and template dialog
2399 0 : SfxApplication* pSfxApp = SFX_APP();
2400 0 : Window* pTopWin = pSfxApp->GetTopWindow();
2401 0 : SvtDocumentTemplateDialog* pDocTemplDlg = new SvtDocumentTemplateDialog( pTopWin );
2402 0 : pDocTemplDlg->SelectTemplateFolder();
2403 :
2404 0 : int nRet = pDocTemplDlg->Execute();
2405 0 : sal_Bool bNewWin = sal_False;
2406 0 : if ( nRet == RET_OK )
2407 : {
2408 0 : if ( pTopWin != pSfxApp->GetTopWindow() )
2409 : {
2410 : // the dialogue opens a document -> a new TopWindow appears
2411 0 : pTopWin = pSfxApp->GetTopWindow();
2412 0 : bNewWin = sal_True;
2413 : }
2414 : }
2415 :
2416 0 : delete pDocTemplDlg;
2417 0 : if ( bNewWin )
2418 : // after the destruction of the dialogue its parent comes to top,
2419 : // but we want that the new document is on top
2420 0 : pTopWin->ToTop();
2421 : }
2422 : }
2423 :
2424 0 : IMPL_LINK( SwView, DialogClosedHdl, sfx2::FileDialogHelper*, _pFileDlg )
2425 : {
2426 0 : if ( ERRCODE_NONE == _pFileDlg->GetError() )
2427 : {
2428 0 : SfxMedium* pMed = m_pViewImpl->CreateMedium();
2429 0 : if ( pMed )
2430 : {
2431 0 : sal_uInt16 nSlot = m_pViewImpl->GetRequest()->GetSlot();
2432 0 : long nFound = InsertMedium( nSlot, pMed, m_pViewImpl->GetParam() );
2433 :
2434 0 : if ( SID_INSERTDOC == nSlot )
2435 : {
2436 0 : if ( m_pViewImpl->GetParam() == 0 )
2437 : {
2438 0 : m_pViewImpl->GetRequest()->SetReturnValue( SfxBoolItem( nSlot, nFound != -1 ) );
2439 0 : m_pViewImpl->GetRequest()->Ignore();
2440 : }
2441 : else
2442 : {
2443 0 : m_pViewImpl->GetRequest()->SetReturnValue( SfxBoolItem( nSlot, nFound != -1 ) );
2444 0 : m_pViewImpl->GetRequest()->Done();
2445 : }
2446 : }
2447 0 : else if ( SID_DOCUMENT_COMPARE == nSlot || SID_DOCUMENT_MERGE == nSlot )
2448 : {
2449 0 : m_pViewImpl->GetRequest()->SetReturnValue( SfxInt32Item( nSlot, nFound ) );
2450 :
2451 0 : if ( nFound > 0 ) // show Redline browser
2452 : {
2453 0 : SfxViewFrame* pVFrame = GetViewFrame();
2454 0 : pVFrame->ShowChildWindow(FN_REDLINE_ACCEPT);
2455 :
2456 : // re-initialize Redline dialog
2457 0 : sal_uInt16 nId = SwRedlineAcceptChild::GetChildWindowId();
2458 0 : SwRedlineAcceptChild* pRed = (SwRedlineAcceptChild*)pVFrame->GetChildWindow( nId );
2459 0 : if ( pRed )
2460 0 : pRed->ReInitDlg( GetDocShell() );
2461 : }
2462 : }
2463 : }
2464 : }
2465 0 : return 0;
2466 : }
2467 :
2468 0 : void SwView::ExecuteScan( SfxRequest& rReq )
2469 : {
2470 0 : if (m_pViewImpl)
2471 0 : m_pViewImpl->ExecuteScan(rReq) ;
2472 0 : }
2473 :
2474 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|