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/i18n/WordType.hpp>
21 : #include <com/sun/star/ui/dialogs/XSLTFilterDialog.hpp>
22 :
23 : #include <comphelper/processfactory.hxx>
24 : #include <hintids.hxx>
25 : #include <cmdid.h>
26 : #include <helpid.h>
27 :
28 : #include <i18nlangtag/languagetag.hxx>
29 : #include <svl/languageoptions.hxx>
30 : #include <editeng/langitem.hxx>
31 : #include <svtools/langtab.hxx>
32 : #include <svl/slstitm.hxx>
33 : #include <string.h>
34 : #include <svl/stritem.hxx>
35 : #include <sfx2/htmlmode.hxx>
36 : #include <svl/whiter.hxx>
37 : #include <sfx2/bindings.hxx>
38 : #include <sfx2/dispatch.hxx>
39 : #include <sfx2/objitem.hxx>
40 : #include <vcl/unohelp2.hxx>
41 : #include <sfx2/request.hxx>
42 : #include <svl/eitem.hxx>
43 : #include <svl/macitem.hxx>
44 : #include <editeng/lrspitem.hxx>
45 : #include <editeng/colritem.hxx>
46 : #include <editeng/tstpitem.hxx>
47 : #include <editeng/brushitem.hxx>
48 : #include <editeng/svxacorr.hxx>
49 : #include <svl/cjkoptions.hxx>
50 : #include <svl/ctloptions.hxx>
51 : #include <IDocumentDrawModelAccess.hxx>
52 : #include <IDocumentSettingAccess.hxx>
53 : #include <charfmt.hxx>
54 : #include <editeng/fontitem.hxx>
55 : #include <svx/SmartTagItem.hxx>
56 : #include <fmtinfmt.hxx>
57 : #include <swwait.hxx>
58 : #include <wrtsh.hxx>
59 : #include <wview.hxx>
60 : #include <swmodule.hxx>
61 : #include <viewopt.hxx>
62 : #include <uitool.hxx>
63 : #include <swevent.hxx>
64 : #include <pagedesc.hxx>
65 : #include <textsh.hxx>
66 : #include <IMark.hxx>
67 : #include <swdtflvr.hxx>
68 : #include <docstat.hxx>
69 : #include <outline.hxx>
70 : #include <tablemgr.hxx>
71 : #include <swundo.hxx>
72 : #include <reffld.hxx>
73 : #include <docsh.hxx>
74 : #include <mdiexp.hxx>
75 : #include <inputwin.hxx>
76 : #include <chrdlgmodes.hxx>
77 : #include <pardlg.hxx>
78 : #include <frmatr.hxx>
79 : #include <fmtcol.hxx>
80 : #include <cellatr.hxx>
81 : #include <edtwin.hxx>
82 : #include <redlndlg.hxx>
83 : #include "fldmgr.hxx"
84 : #include <globals.hrc>
85 : #include <shells.hrc>
86 : #include <app.hrc>
87 : #include <web.hrc>
88 : #include "paratr.hxx"
89 : #include <crsskip.hxx>
90 : #include <vcl/svapp.hxx>
91 : #include <sfx2/app.hxx>
92 : #include <breakit.hxx>
93 : #include <SwSmartTagMgr.hxx>
94 : #include <editeng/acorrcfg.hxx>
95 : #include "swabstdlg.hxx"
96 : #include "misc.hrc"
97 : #include "chrdlg.hrc"
98 : #include <IDocumentStatistics.hxx>
99 : #include <sfx2/sfxdlg.hxx>
100 : #include <unotools/lingucfg.hxx>
101 : #include <com/sun/star/beans/XPropertySet.hpp>
102 : #include <com/sun/star/util/XChangesBatch.hpp>
103 : #include <com/sun/star/uno/Any.hxx>
104 : #include <editeng/unolingu.hxx>
105 : #include <unotools/syslocaleoptions.hxx>
106 : #include <doc.hxx>
107 : #include <drawdoc.hxx>
108 : #include <view.hxx>
109 : #include <ndtxt.hxx>
110 : #include <pam.hxx>
111 : #include <sfx2/objface.hxx>
112 : #include <langhelper.hxx>
113 : #include <uiitems.hxx>
114 : #include <wordcountdialog.hxx>
115 : #include <tools/diagnose_ex.h>
116 : #include <svx/nbdtmgfact.hxx>
117 : #include <svx/nbdtmg.hxx>
118 :
119 : #include <svx/svdmodel.hxx>
120 : #include <svx/drawitem.hxx>
121 : #include <numrule.hxx>
122 : #include <boost/scoped_ptr.hpp>
123 :
124 : using namespace ::com::sun::star;
125 : using namespace svx::sidebar;
126 :
127 0 : void sw_CharDialog( SwWrtShell &rWrtSh, bool bUseDialog, sal_uInt16 nSlot,const SfxItemSet *pArgs, SfxRequest *pReq )
128 : {
129 0 : FieldUnit eMetric = ::GetDfltMetric(0 != PTR_CAST(SwWebView, &rWrtSh.GetView()));
130 0 : SW_MOD()->PutItem(SfxUInt16Item(SID_ATTR_METRIC, static_cast< sal_uInt16 >(eMetric)));
131 0 : SfxItemSet aCoreSet( rWrtSh.GetView().GetPool(),
132 : RES_CHRATR_BEGIN, RES_CHRATR_END-1,
133 : RES_TXTATR_INETFMT, RES_TXTATR_INETFMT,
134 : RES_BACKGROUND, RES_BACKGROUND,
135 : RES_BOX, RES_BOX,
136 : RES_SHADOW, RES_SHADOW,
137 : SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER,
138 : FN_PARAM_SELECTION, FN_PARAM_SELECTION,
139 : SID_HTML_MODE, SID_HTML_MODE,
140 : SID_ATTR_CHAR_WIDTH_FIT_TO_LINE, SID_ATTR_CHAR_WIDTH_FIT_TO_LINE,
141 0 : 0 );
142 0 : rWrtSh.GetCurAttr( aCoreSet );
143 0 : bool bSel = rWrtSh.HasSelection();
144 0 : bool bSelectionPut = false;
145 0 : if(bSel || rWrtSh.IsInWord())
146 : {
147 0 : if(!bSel)
148 : {
149 0 : rWrtSh.StartAction();
150 0 : rWrtSh.Push();
151 0 : if(!rWrtSh.SelectTxtAttr( RES_TXTATR_INETFMT ))
152 0 : rWrtSh.SelWrd();
153 : }
154 0 : aCoreSet.Put(SfxStringItem(FN_PARAM_SELECTION, rWrtSh.GetSelTxt()));
155 0 : bSelectionPut = true;
156 0 : if(!bSel)
157 : {
158 0 : rWrtSh.Pop(false);
159 0 : rWrtSh.EndAction();
160 : }
161 : }
162 : aCoreSet.Put( SfxUInt16Item( SID_ATTR_CHAR_WIDTH_FIT_TO_LINE,
163 0 : rWrtSh.GetScalingOfSelectedText() ) );
164 :
165 0 : ::ConvertAttrCharToGen(aCoreSet, CONV_ATTR_STD);
166 :
167 : // Setting the BoxInfo
168 0 : ::PrepareBoxInfo( aCoreSet, rWrtSh );
169 :
170 0 : aCoreSet.Put(SfxUInt16Item(SID_HTML_MODE, ::GetHtmlMode(rWrtSh.GetView().GetDocShell())));
171 0 : boost::scoped_ptr<SfxAbstractTabDialog> pDlg;
172 0 : if ( bUseDialog && GetActiveView() )
173 : {
174 0 : SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
175 : OSL_ENSURE(pFact, "SwAbstractDialogFactory fail!");
176 :
177 0 : pDlg.reset(pFact->CreateSwCharDlg(rWrtSh.GetView().GetWindow(), rWrtSh.GetView(), aCoreSet, DLG_CHAR_STD));
178 : OSL_ENSURE(pDlg, "Dialog creation failed!");
179 0 : if( FN_INSERT_HYPERLINK == nSlot )
180 0 : pDlg->SetCurPageId("hyperlink");
181 : }
182 0 : if (pDlg && nSlot == SID_CHAR_DLG_EFFECT)
183 : {
184 0 : pDlg->SetCurPageId("fonteffects");
185 : }
186 0 : else if (pDlg && (nSlot == SID_ATTR_CHAR_FONT || nSlot == SID_CHAR_DLG_FOR_PARAGRAPH))
187 : {
188 0 : pDlg->SetCurPageId("font");
189 : }
190 0 : else if (pDlg && pReq)
191 : {
192 0 : SFX_REQUEST_ARG((*pReq), pItem, SfxStringItem, FN_PARAM_1, false);
193 0 : if (pItem)
194 0 : pDlg->SetCurPageId(OUStringToOString(pItem->GetValue(), RTL_TEXTENCODING_UTF8));
195 : }
196 :
197 0 : const SfxItemSet* pSet = NULL;
198 0 : if ( !bUseDialog )
199 0 : pSet = pArgs;
200 0 : else if ( pDlg && pDlg->Execute() == RET_OK ) /* #110771# pDlg can be NULL */
201 : {
202 0 : pSet = pDlg->GetOutputItemSet();
203 : }
204 :
205 0 : if ( pSet)
206 : {
207 0 : SfxItemSet aTmpSet( *pSet );
208 0 : ::ConvertAttrGenToChar(aTmpSet, CONV_ATTR_STD);
209 :
210 : const SfxPoolItem* pSelectionItem;
211 0 : bool bInsert = false;
212 0 : sal_Int32 nInsert = 0;
213 :
214 : // The old item is for unknown reasons back in the set again.
215 0 : if( !bSelectionPut && SfxItemState::SET == aTmpSet.GetItemState(FN_PARAM_SELECTION, false, &pSelectionItem) )
216 : {
217 0 : OUString sInsert = ((const SfxStringItem*)pSelectionItem)->GetValue();
218 0 : bInsert = !sInsert.isEmpty();
219 0 : if(bInsert)
220 : {
221 0 : nInsert = sInsert.getLength();
222 0 : rWrtSh.StartAction();
223 0 : rWrtSh.Insert( sInsert );
224 0 : rWrtSh.SetMark();
225 0 : rWrtSh.ExtendSelection(false, sInsert.getLength());
226 0 : SfxRequest aReq( rWrtSh.GetView().GetViewFrame(), FN_INSERT_STRING );
227 0 : aReq.AppendItem( SfxStringItem( FN_INSERT_STRING, sInsert ) );
228 0 : aReq.Done();
229 0 : SfxRequest aReq1( rWrtSh.GetView().GetViewFrame(), FN_CHAR_LEFT );
230 0 : aReq1.AppendItem( SfxInt32Item(FN_PARAM_MOVE_COUNT, nInsert) );
231 0 : aReq1.AppendItem( SfxBoolItem(FN_PARAM_MOVE_SELECTION, true) );
232 0 : aReq1.Done();
233 0 : }
234 : }
235 0 : aTmpSet.ClearItem(FN_PARAM_SELECTION);
236 :
237 0 : SwTxtFmtColl* pColl = rWrtSh.GetCurTxtFmtColl();
238 0 : if(bSel && rWrtSh.IsSelFullPara() && pColl && pColl->IsAutoUpdateFmt())
239 : {
240 0 : rWrtSh.AutoUpdatePara(pColl, aTmpSet);
241 : }
242 : else
243 0 : rWrtSh.SetAttrSet( aTmpSet );
244 0 : if (pReq)
245 0 : pReq->Done(aTmpSet);
246 0 : if(bInsert)
247 : {
248 0 : SfxRequest aReq1( rWrtSh.GetView().GetViewFrame(), FN_CHAR_RIGHT );
249 0 : aReq1.AppendItem( SfxInt32Item(FN_PARAM_MOVE_COUNT, nInsert) );
250 0 : aReq1.AppendItem( SfxBoolItem(FN_PARAM_MOVE_SELECTION, false) );
251 0 : aReq1.Done();
252 0 : rWrtSh.SwapPam();
253 0 : rWrtSh.ClearMark();
254 0 : rWrtSh.DontExpandFmt();
255 0 : rWrtSh.EndAction();
256 0 : }
257 0 : }
258 0 : }
259 :
260 0 : static short lcl_AskRedlineMode(vcl::Window *pWin)
261 : {
262 : MessBox aQBox( pWin, 0,
263 : OUString( SW_RES( STR_REDLINE_TITLE ) ),
264 0 : OUString( SW_RES( STR_REDLINE_MSG ) ) );
265 0 : aQBox.SetImage( QueryBox::GetStandardImage() );
266 : const sal_uInt16 nBtnFlags = BUTTONDIALOG_DEFBUTTON |
267 : BUTTONDIALOG_OKBUTTON |
268 0 : BUTTONDIALOG_FOCUSBUTTON;
269 :
270 0 : aQBox.AddButton(OUString(SW_RES(STR_REDLINE_ACCEPT_ALL)), RET_OK, nBtnFlags);
271 0 : aQBox.GetPushButton( RET_OK )->SetHelpId(HID_AUTOFORMAT_ACCEPT);
272 0 : aQBox.AddButton(OUString(SW_RES(STR_REDLINE_REJECT_ALL)), RET_CANCEL, BUTTONDIALOG_CANCELBUTTON);
273 0 : aQBox.GetPushButton( RET_CANCEL )->SetHelpId(HID_AUTOFORMAT_REJECT );
274 0 : aQBox.AddButton(OUString(SW_RES(STR_REDLINE_EDIT)), 2, 0);
275 0 : aQBox.GetPushButton( 2 )->SetHelpId(HID_AUTOFORMAT_EDIT_CHG);
276 0 : aQBox.SetButtonHelpText( RET_OK, OUString() );
277 :
278 0 : return aQBox.Execute();
279 : }
280 :
281 0 : void SwTextShell::Execute(SfxRequest &rReq)
282 : {
283 0 : bool bUseDialog = true;
284 0 : const SfxItemSet *pArgs = rReq.GetArgs();
285 0 : SwWrtShell& rWrtSh = GetShell();
286 0 : const SfxPoolItem* pItem = 0;
287 0 : const sal_uInt16 nSlot = rReq.GetSlot();
288 0 : if(pArgs)
289 0 : pArgs->GetItemState(GetPool().GetWhich(nSlot), false, &pItem);
290 0 : switch( nSlot )
291 : {
292 : case SID_LANGUAGE_STATUS:
293 : {
294 : // get the language
295 0 : OUString aNewLangTxt;
296 0 : SFX_REQUEST_ARG( rReq, pItem2, SfxStringItem, SID_LANGUAGE_STATUS , false );
297 0 : if (pItem2)
298 0 : aNewLangTxt = pItem2->GetValue();
299 :
300 : //!! Remember the view frame right now...
301 : //!! (call to GetView().GetViewFrame() will break if the
302 : //!! SwTextShell got destroyed meanwhile.)
303 0 : SfxViewFrame *pViewFrame = GetView().GetViewFrame();
304 :
305 0 : if (aNewLangTxt == "*")
306 : {
307 : // open the dialog "Tools/Options/Language Settings - Language"
308 : // to set the documents default language
309 0 : SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create();
310 0 : if (pFact)
311 : {
312 0 : boost::scoped_ptr<VclAbstractDialog> pDlg(pFact->CreateVclDialog( GetView().GetWindow(), SID_LANGUAGE_OPTIONS ));
313 0 : pDlg->Execute();
314 : }
315 : }
316 : else
317 : {
318 : //!! We have to use StartAction / EndAction bracketing in
319 : //!! order to prevent possible destruction of the SwTextShell
320 : //!! due to the selection changes coming below.
321 0 : rWrtSh.StartAction();
322 : // prevent view from jumping because of (temporary) selection changes
323 0 : rWrtSh.LockView( true );
324 :
325 : // setting the new language...
326 0 : if (!aNewLangTxt.isEmpty())
327 : {
328 0 : const OUString aSelectionLangPrefix("Current_");
329 0 : const OUString aParagraphLangPrefix("Paragraph_");
330 0 : const OUString aDocumentLangPrefix("Default_");
331 0 : const OUString aStrNone("LANGUAGE_NONE");
332 0 : const OUString aStrResetLangs("RESET_LANGUAGES");
333 :
334 0 : SfxItemSet aCoreSet( GetPool(),
335 : RES_CHRATR_LANGUAGE, RES_CHRATR_LANGUAGE,
336 : RES_CHRATR_CJK_LANGUAGE, RES_CHRATR_CJK_LANGUAGE,
337 : RES_CHRATR_CTL_LANGUAGE, RES_CHRATR_CTL_LANGUAGE,
338 0 : 0 );
339 :
340 0 : sal_Int32 nPos = 0;
341 0 : bool bForSelection = true;
342 0 : bool bForParagraph = false;
343 0 : if (-1 != (nPos = aNewLangTxt.indexOf( aSelectionLangPrefix, 0 )))
344 : {
345 : // ... for the current selection
346 0 : aNewLangTxt = aNewLangTxt.replaceAt(nPos, aSelectionLangPrefix.getLength(), "");
347 0 : bForSelection = true;
348 : }
349 0 : else if (-1 != (nPos = aNewLangTxt.indexOf(aParagraphLangPrefix, 0)))
350 : {
351 : // ... for the current paragraph language
352 0 : aNewLangTxt = aNewLangTxt.replaceAt(nPos, aParagraphLangPrefix.getLength(), "");
353 0 : bForSelection = true;
354 0 : bForParagraph = true;
355 : }
356 0 : else if (-1 != (nPos = aNewLangTxt.indexOf(aDocumentLangPrefix, 0)))
357 : {
358 : // ... as default document language
359 0 : aNewLangTxt = aNewLangTxt.replaceAt(nPos, aDocumentLangPrefix.getLength(), "");
360 0 : bForSelection = false;
361 : }
362 :
363 0 : if (bForParagraph || !bForSelection)
364 : {
365 0 : rWrtSh.Push(); // save selection for later restoration
366 0 : rWrtSh.ClearMark(); // fdo#67796: invalidate table crsr
367 : }
368 :
369 0 : if (bForParagraph)
370 0 : SwLangHelper::SelectCurrentPara( rWrtSh );
371 :
372 0 : if (!bForSelection) // document language to be changed...
373 : {
374 0 : rWrtSh.SelAll();
375 0 : rWrtSh.ExtendedSelectAll();
376 : }
377 :
378 0 : rWrtSh.StartUndo( ( !bForParagraph && !bForSelection ) ? UNDO_SETDEFTATTR : UNDO_EMPTY );
379 0 : if (aNewLangTxt == aStrNone)
380 0 : SwLangHelper::SetLanguage_None( rWrtSh, bForSelection, aCoreSet );
381 0 : else if (aNewLangTxt == aStrResetLangs)
382 0 : SwLangHelper::ResetLanguages( rWrtSh, bForSelection );
383 : else
384 0 : SwLangHelper::SetLanguage( rWrtSh, aNewLangTxt, bForSelection, aCoreSet );
385 0 : rWrtSh.EndUndo();
386 :
387 0 : if (bForParagraph || !bForSelection)
388 : {
389 0 : rWrtSh.Pop(false); // restore selection...
390 0 : }
391 : }
392 :
393 0 : rWrtSh.LockView( false );
394 0 : rWrtSh.EndAction();
395 : }
396 :
397 : // invalidate slot to get the new language displayed
398 0 : pViewFrame->GetBindings().Invalidate( nSlot );
399 :
400 0 : rReq.Done();
401 0 : break;
402 : }
403 :
404 : case SID_THES:
405 : {
406 : // replace word/selection with text from selected sub menu entry
407 0 : OUString aReplaceText;
408 0 : SFX_REQUEST_ARG( rReq, pItem2, SfxStringItem, SID_THES , false );
409 0 : if (pItem2)
410 0 : aReplaceText = pItem2->GetValue();
411 0 : if (!aReplaceText.isEmpty())
412 : {
413 0 : SwView &rView2 = rWrtSh.GetView();
414 0 : const bool bSelection = rWrtSh.HasSelection();
415 0 : const OUString aLookUpText = rView2.GetThesaurusLookUpText( bSelection );
416 0 : rView2.InsertThesaurusSynonym( aReplaceText, aLookUpText, bSelection );
417 0 : }
418 : }
419 0 : break;
420 :
421 : case SID_CHARMAP:
422 : {
423 0 : InsertSymbol( rReq );
424 : }
425 0 : break;
426 : case FN_INSERT_FOOTNOTE:
427 : case FN_INSERT_ENDNOTE:
428 : {
429 0 : OUString aStr;
430 0 : SFX_REQUEST_ARG( rReq, pFont, SfxStringItem, FN_PARAM_1 , false );
431 0 : SFX_REQUEST_ARG( rReq, pNameItem, SfxStringItem, nSlot , false );
432 0 : if ( pNameItem )
433 0 : aStr = pNameItem->GetValue();
434 0 : bool bFont = pFont && !pFont->GetValue().isEmpty();
435 0 : rWrtSh.StartUndo( UNDO_UI_INSERT_FOOTNOTE );
436 0 : rWrtSh.InsertFootnote( aStr, nSlot == FN_INSERT_ENDNOTE, !bFont );
437 0 : if ( bFont )
438 : {
439 0 : rWrtSh.Left( CRSR_SKIP_CHARS, true, 1, false );
440 0 : SfxItemSet aSet( rWrtSh.GetAttrPool(), RES_CHRATR_FONT, RES_CHRATR_FONT );
441 0 : rWrtSh.GetCurAttr( aSet );
442 0 : SvxFontItem &rFont = (SvxFontItem &) aSet.Get( RES_CHRATR_FONT );
443 0 : SvxFontItem aFont( rFont.GetFamily(), pFont->GetValue(),
444 0 : rFont.GetStyleName(), rFont.GetPitch(), RTL_TEXTENCODING_DONTKNOW, RES_CHRATR_FONT );
445 0 : rWrtSh.SetAttrSet( aSet, nsSetAttrMode::SETATTR_DONTEXPAND );
446 0 : rWrtSh.ResetSelect(0, false);
447 0 : rWrtSh.EndSelect();
448 0 : rWrtSh.GotoFtnTxt();
449 : }
450 0 : rWrtSh.EndUndo( UNDO_UI_INSERT_FOOTNOTE );
451 0 : rReq.Done();
452 : }
453 0 : break;
454 : case FN_INSERT_FOOTNOTE_DLG:
455 : {
456 0 : SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
457 : OSL_ENSURE(pFact, "Dialog creation failed!");
458 : boost::scoped_ptr<AbstractInsFootNoteDlg> pDlg(pFact->CreateInsFootNoteDlg(
459 0 : GetView().GetWindow(), rWrtSh, false));
460 : OSL_ENSURE(pDlg, "Dialog creation failed!");
461 0 : pDlg->SetHelpId(GetStaticInterface()->GetSlot(nSlot)->GetCommand());
462 0 : if ( pDlg->Execute() == RET_OK )
463 : {
464 0 : const sal_uInt16 nId = pDlg->IsEndNote() ? FN_INSERT_ENDNOTE : FN_INSERT_FOOTNOTE;
465 0 : SfxRequest aReq( GetView().GetViewFrame(), nId );
466 0 : if ( !pDlg->GetStr().isEmpty() )
467 0 : aReq.AppendItem( SfxStringItem( nId, pDlg->GetStr() ) );
468 0 : if ( !pDlg->GetFontName().isEmpty() )
469 0 : aReq.AppendItem( SfxStringItem( FN_PARAM_1, pDlg->GetFontName() ) );
470 0 : ExecuteSlot( aReq );
471 : }
472 :
473 0 : rReq.Ignore();
474 : }
475 0 : break;
476 : case FN_FORMAT_FOOTNOTE_DLG:
477 : {
478 0 : SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
479 : OSL_ENSURE(pFact, "SwAbstractDialogFactory fail!");
480 :
481 0 : boost::scoped_ptr<VclAbstractDialog> pDlg(pFact->CreateSwFootNoteOptionDlg(GetView().GetWindow(), rWrtSh));
482 : OSL_ENSURE(pDlg, "Dialog creation failed!");
483 0 : pDlg->Execute();
484 0 : break;
485 : }
486 : case SID_INSERTDOC:
487 : {
488 0 : GetView().ExecuteInsertDoc( rReq, pItem );
489 0 : break;
490 : }
491 : case FN_FORMAT_RESET:
492 : {
493 : // #i78856, reset all attributes but not the language attributes
494 : // (for this build an array of all relevant attributes and
495 : // remove the languages from that)
496 0 : std::set<sal_uInt16> aAttribs;
497 :
498 : sal_uInt16 aResetableSetRange[] = {
499 : RES_FRMATR_BEGIN, RES_FRMATR_END-1,
500 : RES_CHRATR_BEGIN, RES_CHRATR_LANGUAGE - 1,
501 : RES_CHRATR_LANGUAGE + 1, RES_CHRATR_CJK_LANGUAGE - 1,
502 : RES_CHRATR_CJK_LANGUAGE + 1, RES_CHRATR_CTL_LANGUAGE - 1,
503 : RES_CHRATR_CTL_LANGUAGE + 1, RES_CHRATR_END-1,
504 : RES_PARATR_BEGIN, RES_PARATR_END-1,
505 : RES_TXTATR_UNKNOWN_CONTAINER, RES_TXTATR_UNKNOWN_CONTAINER,
506 : RES_UNKNOWNATR_BEGIN, RES_UNKNOWNATR_END-1,
507 : 0
508 0 : };
509 0 : const sal_uInt16 *pUShorts = aResetableSetRange;
510 0 : while (*pUShorts)
511 : {
512 0 : for (sal_uInt16 i = pUShorts[0]; i <= pUShorts[1]; ++i)
513 0 : aAttribs.insert( aAttribs.end(), i );
514 0 : pUShorts += 2;
515 : }
516 : // we don't want to change writing direction.
517 0 : aAttribs.erase( RES_FRAMEDIR );
518 0 : rWrtSh.ResetAttr( aAttribs );
519 0 : rReq.Done();
520 0 : break;
521 : }
522 : case FN_INSERT_BREAK_DLG:
523 : {
524 0 : sal_uInt16 nKind=0;
525 0 : ::boost::optional<sal_uInt16> oPageNumber;
526 0 : OUString aTemplateName;
527 0 : if ( pItem )
528 : {
529 0 : nKind = ((SfxInt16Item*)pItem)->GetValue();
530 0 : SFX_REQUEST_ARG( rReq, pTemplate, SfxStringItem, FN_PARAM_1 , false );
531 0 : SFX_REQUEST_ARG( rReq, pNumber, SfxUInt16Item, FN_PARAM_2 , false );
532 0 : SFX_REQUEST_ARG( rReq, pIsNumberFilled, SfxBoolItem, FN_PARAM_3, false );
533 0 : if ( pTemplate )
534 0 : aTemplateName = pTemplate->GetValue();
535 0 : if ( pNumber && pIsNumberFilled && pIsNumberFilled->GetValue() )
536 0 : oPageNumber = pNumber->GetValue();
537 : }
538 : else
539 : {
540 0 : SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
541 : OSL_ENSURE(pFact, "SwAbstractDialogFactory fail!");
542 :
543 0 : boost::scoped_ptr<AbstractSwBreakDlg> pDlg(pFact->CreateSwBreakDlg(GetView().GetWindow(), rWrtSh));
544 : OSL_ENSURE(pDlg, "Dialog creation failed!");
545 0 : if ( pDlg->Execute() == RET_OK )
546 : {
547 0 : nKind = pDlg->GetKind();
548 0 : aTemplateName = pDlg->GetTemplateName();
549 0 : oPageNumber = pDlg->GetPageNumber();
550 :
551 0 : bool bIsNumberFilled = false;
552 0 : sal_uInt16 nPageNumber = 0;
553 :
554 0 : if (oPageNumber)
555 : {
556 0 : bIsNumberFilled = true;
557 0 : nPageNumber = oPageNumber.get();
558 : }
559 :
560 0 : rReq.AppendItem( SfxInt16Item ( FN_INSERT_BREAK_DLG, nKind ) );
561 0 : rReq.AppendItem( SfxStringItem( FN_PARAM_1, aTemplateName ) );
562 0 : rReq.AppendItem( SfxUInt16Item( FN_PARAM_2, nPageNumber ) );
563 0 : rReq.AppendItem( SfxBoolItem ( FN_PARAM_3, bIsNumberFilled ) );
564 0 : rReq.Done();
565 : }
566 : else
567 0 : rReq.Ignore();
568 : }
569 :
570 0 : switch ( nKind )
571 : {
572 : case 1 :
573 0 : rWrtSh.InsertLineBreak(); break;
574 : case 2 :
575 0 : rWrtSh.InsertColumnBreak(); break;
576 : case 3 :
577 : {
578 0 : rWrtSh.StartAllAction();
579 0 : if( !aTemplateName.isEmpty() )
580 0 : rWrtSh.InsertPageBreak( &aTemplateName, oPageNumber );
581 : else
582 0 : rWrtSh.InsertPageBreak();
583 0 : rWrtSh.EndAllAction();
584 : }
585 : }
586 :
587 0 : break;
588 : }
589 : case FN_INSERT_BOOKMARK:
590 : {
591 0 : if ( pItem )
592 : {
593 0 : OUString sName = ((SfxStringItem*)pItem)->GetValue();
594 0 : rWrtSh.SetBookmark( vcl::KeyCode(), sName, OUString() );
595 : }
596 : else
597 : {
598 0 : SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
599 : OSL_ENSURE(pFact, "SwAbstractDialogFactory fail!");
600 :
601 0 : boost::scoped_ptr<VclAbstractDialog> pDlg(pFact->CreateSwInsertBookmarkDlg( GetView().GetWindow(), rWrtSh, rReq, DLG_INSERT_BOOKMARK ));
602 : OSL_ENSURE(pDlg, "Dialog creation failed!");
603 0 : pDlg->Execute();
604 : }
605 :
606 0 : break;
607 : }
608 : case FN_DELETE_BOOKMARK:
609 : {
610 0 : if ( pItem )
611 : {
612 0 : IDocumentMarkAccess* const pMarkAccess = rWrtSh.getIDocumentMarkAccess();
613 0 : pMarkAccess->deleteMark( pMarkAccess->findMark(((SfxStringItem*)pItem)->GetValue()) );
614 : }
615 0 : break;
616 : }
617 : case FN_AUTOFORMAT_REDLINE_APPLY:
618 : {
619 0 : SvxSwAutoFmtFlags aFlags(SvxAutoCorrCfg::Get().GetAutoCorrect()->GetSwFlags());
620 : // This must always be sal_False for the postprocessing.
621 0 : aFlags.bAFmtByInput = false;
622 0 : aFlags.bWithRedlining = true;
623 0 : rWrtSh.AutoFormat( &aFlags );
624 0 : aFlags.bWithRedlining = false;
625 :
626 0 : SfxViewFrame* pVFrame = GetView().GetViewFrame();
627 0 : if (pVFrame->HasChildWindow(FN_REDLINE_ACCEPT))
628 0 : pVFrame->ToggleChildWindow(FN_REDLINE_ACCEPT);
629 :
630 0 : SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
631 : OSL_ENSURE(pFact, "SwAbstractDialogFactory fail!");
632 :
633 0 : boost::scoped_ptr<AbstractSwModalRedlineAcceptDlg> pDlg(pFact->CreateSwModalRedlineAcceptDlg(&GetView().GetEditWin()));
634 : OSL_ENSURE(pDlg, "Dialog creation failed!");
635 :
636 0 : switch (lcl_AskRedlineMode(&GetView().GetEditWin()))
637 : {
638 : case RET_OK:
639 : {
640 0 : pDlg->AcceptAll(true);
641 0 : SfxRequest aReq( pVFrame, FN_AUTOFORMAT_APPLY );
642 0 : aReq.Done();
643 0 : rReq.Ignore();
644 0 : break;
645 : }
646 :
647 : case RET_CANCEL:
648 0 : pDlg->AcceptAll(false);
649 0 : rReq.Ignore();
650 0 : break;
651 :
652 : case 2:
653 0 : pDlg->Execute();
654 0 : rReq.Done();
655 0 : break;
656 0 : }
657 : }
658 0 : break;
659 :
660 : case FN_AUTOFORMAT_APPLY:
661 : {
662 0 : SvxSwAutoFmtFlags aFlags(SvxAutoCorrCfg::Get().GetAutoCorrect()->GetSwFlags());
663 : // This must always be sal_False for the postprocessing.
664 0 : aFlags.bAFmtByInput = false;
665 0 : rWrtSh.AutoFormat( &aFlags );
666 0 : rReq.Done();
667 : }
668 0 : break;
669 : case FN_AUTOFORMAT_AUTO:
670 : {
671 0 : SvxAutoCorrCfg& rACfg = SvxAutoCorrCfg::Get();
672 0 : bool bSet = pItem ? ((const SfxBoolItem*)pItem)->GetValue() : !rACfg.IsAutoFmtByInput();
673 0 : if( bSet != rACfg.IsAutoFmtByInput() )
674 : {
675 0 : rACfg.SetAutoFmtByInput( bSet );
676 0 : GetView().GetViewFrame()->GetBindings().Invalidate( nSlot );
677 0 : if ( !pItem )
678 0 : rReq.AppendItem( SfxBoolItem( GetPool().GetWhich(nSlot), bSet ) );
679 0 : rReq.Done();
680 : }
681 : }
682 0 : break;
683 : case FN_AUTO_CORRECT:
684 : {
685 : // At first set to blank as default.
686 0 : sal_Unicode cChar = ' ';
687 0 : rWrtSh.AutoCorrect( *SvxAutoCorrCfg::Get().GetAutoCorrect(), cChar );
688 0 : rReq.Done();
689 : }
690 0 : break;
691 : case FN_TABLE_SORT_DIALOG:
692 : case FN_SORTING_DLG:
693 : {
694 0 : SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
695 : OSL_ENSURE(pFact, "SwAbstractDialogFactory fail!");
696 :
697 0 : boost::scoped_ptr<VclAbstractDialog> pDlg(pFact->CreateVclAbstractDialog( GetView().GetWindow(), rWrtSh, DLG_SORTING ));
698 : OSL_ENSURE(pDlg, "Dialog creation failed!");
699 0 : pDlg->Execute();
700 0 : pDlg.reset();
701 0 : rReq.Done();
702 : }
703 0 : break;
704 : case FN_NUMBERING_OUTLINE_DLG:
705 : {
706 0 : SfxItemSet aTmp(GetPool(), FN_PARAM_1, FN_PARAM_1);
707 0 : SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
708 : OSL_ENSURE(pFact, "Dialog creation failed!");
709 : boost::scoped_ptr<SfxAbstractTabDialog> pDlg(pFact->CreateSwTabDialog( DLG_TAB_OUTLINE,
710 0 : GetView().GetWindow(), &aTmp, rWrtSh));
711 : OSL_ENSURE(pDlg, "Dialog creation failed!");
712 0 : pDlg->Execute();
713 0 : pDlg.reset();
714 0 : rReq.Done();
715 : }
716 0 : break;
717 : case FN_CALCULATE:
718 : {
719 0 : SwTransferable* pTransfer = new SwTransferable( rWrtSh );
720 : /*??*/ uno::Reference<
721 : datatransfer::XTransferable > xRef(
722 0 : pTransfer );
723 0 : pTransfer->CalculateAndCopy();
724 0 : rReq.Done();
725 : }
726 0 : break;
727 : case FN_GOTO_REFERENCE:
728 : {
729 0 : SwField *pFld = rWrtSh.GetCurFld();
730 0 : if(pFld && pFld->GetTypeId() == TYP_GETREFFLD)
731 : {
732 0 : rWrtSh.StartAllAction();
733 : rWrtSh.SwCrsrShell::GotoRefMark( ((SwGetRefField*)pFld)->GetSetRefName(),
734 0 : ((SwGetRefField*)pFld)->GetSubType(),
735 0 : ((SwGetRefField*)pFld)->GetSeqNo() );
736 0 : rWrtSh.EndAllAction();
737 0 : rReq.Done();
738 : }
739 : }
740 0 : break;
741 : case FN_EDIT_FORMULA:
742 : {
743 0 : const sal_uInt16 nId = SwInputChild::GetChildWindowId();
744 0 : SfxViewFrame* pVFrame = GetView().GetViewFrame();
745 0 : if(pItem)
746 : {
747 : //if the ChildWindow is active it has to be removed
748 0 : if( pVFrame->HasChildWindow( nId ) )
749 : {
750 0 : pVFrame->ToggleChildWindow( nId );
751 0 : pVFrame->GetBindings().InvalidateAll( true );
752 : }
753 :
754 0 : OUString sFormula(((const SfxStringItem*)pItem)->GetValue());
755 0 : SwFldMgr aFldMgr;
756 0 : rWrtSh.StartAllAction();
757 : bool bDelSel;
758 0 : if( (bDelSel = rWrtSh.HasSelection()) )
759 : {
760 0 : rWrtSh.StartUndo( UNDO_START );
761 0 : rWrtSh.DelRight();
762 : }
763 : else
764 : {
765 0 : rWrtSh.EnterStdMode();
766 : }
767 :
768 0 : if( !bDelSel && aFldMgr.GetCurFld() && TYP_FORMELFLD == aFldMgr.GetCurTypeId() )
769 0 : aFldMgr.UpdateCurFld( aFldMgr.GetCurFld()->GetFormat(), OUString(), sFormula );
770 0 : else if( !sFormula.isEmpty() )
771 : {
772 0 : if( rWrtSh.IsCrsrInTbl() )
773 : {
774 0 : SfxItemSet aSet( rWrtSh.GetAttrPool(), RES_BOXATR_FORMULA, RES_BOXATR_FORMULA );
775 0 : aSet.Put( SwTblBoxFormula( sFormula ));
776 0 : rWrtSh.SetTblBoxFormulaAttrs( aSet );
777 0 : rWrtSh.UpdateTable();
778 : }
779 : else
780 : {
781 0 : SvNumberFormatter* pFormatter = rWrtSh.GetNumberFormatter();
782 0 : sal_uLong nSysNumFmt = pFormatter->GetFormatIndex( NF_NUMBER_STANDARD, LANGUAGE_SYSTEM);
783 0 : SwInsertFld_Data aData(TYP_FORMELFLD, nsSwGetSetExpType::GSE_FORMULA, OUString(), sFormula, nSysNumFmt);
784 0 : aFldMgr.InsertFld(aData);
785 : }
786 : }
787 :
788 0 : if( bDelSel )
789 0 : rWrtSh.EndUndo( UNDO_END );
790 0 : rWrtSh.EndAllAction();
791 0 : rReq.Done();
792 : }
793 : else
794 : {
795 0 : rWrtSh.EndAllTblBoxEdit();
796 0 : pVFrame->ToggleChildWindow( nId );
797 0 : if( !pVFrame->HasChildWindow( nId ) )
798 0 : pVFrame->GetBindings().InvalidateAll( true );
799 0 : rReq.Ignore();
800 : }
801 : }
802 :
803 0 : break;
804 : case FN_TABLE_UNSET_READ_ONLY:
805 : {
806 0 : rWrtSh.UnProtectTbls();
807 : }
808 0 : break;
809 : case FN_EDIT_HYPERLINK:
810 0 : GetView().GetViewFrame()->SetChildWindow(SID_HYPERLINK_DIALOG, true);
811 0 : break;
812 : case FN_REMOVE_HYPERLINK:
813 : {
814 0 : bool bSel = rWrtSh.HasSelection();
815 0 : if(!bSel)
816 : {
817 0 : rWrtSh.StartAction();
818 0 : rWrtSh.Push();
819 0 : if(!rWrtSh.SelectTxtAttr( RES_TXTATR_INETFMT ))
820 0 : rWrtSh.SelWrd();
821 : }
822 : //now remove the attribute
823 0 : std::set<sal_uInt16> aAttribs;
824 0 : aAttribs.insert( RES_TXTATR_INETFMT );
825 0 : rWrtSh.ResetAttr( aAttribs );
826 0 : if(!bSel)
827 : {
828 0 : rWrtSh.Pop(false);
829 0 : rWrtSh.EndAction();
830 0 : }
831 : }
832 0 : break;
833 : case SID_ATTR_BRUSH_CHAR :
834 : case SID_ATTR_CHAR_SCALEWIDTH :
835 : case SID_ATTR_CHAR_ROTATED :
836 : case FN_TXTATR_INET :
837 : case FN_INSERT_HYPERLINK:
838 : {
839 0 : const sal_uInt16 nWhich = GetPool().GetWhich( nSlot );
840 0 : if ( pArgs && pArgs->GetItemState( nWhich ) == SfxItemState::SET )
841 0 : bUseDialog = false;
842 : // intentionally no break
843 : }
844 : case SID_CHAR_DLG:
845 : case SID_CHAR_DLG_EFFECT:
846 : {
847 0 : sw_CharDialog( rWrtSh, bUseDialog, nSlot, pArgs, &rReq );
848 : }
849 0 : break;
850 : case SID_CHAR_DLG_FOR_PARAGRAPH:
851 : {
852 0 : rWrtSh.Push(); //save current cursor
853 0 : SwLangHelper::SelectCurrentPara( rWrtSh );
854 0 : sw_CharDialog( rWrtSh, bUseDialog, nSlot, pArgs, &rReq );
855 0 : rWrtSh.Pop( false ); //restore old cursor
856 : }
857 0 : break;
858 : case SID_ATTR_LRSPACE :
859 : case SID_ATTR_ULSPACE :
860 : case SID_ATTR_BRUSH :
861 : case SID_PARA_VERTALIGN :
862 : case SID_ATTR_PARA_NUMRULE :
863 : case SID_ATTR_PARA_REGISTER :
864 : case SID_ATTR_PARA_PAGENUM :
865 : case FN_FORMAT_LINENUMBER :
866 : case FN_NUMBER_NEWSTART :
867 : case FN_NUMBER_NEWSTART_AT :
868 : case FN_FORMAT_DROPCAPS :
869 : case FN_DROP_TEXT:
870 : case SID_ATTR_PARA_LRSPACE:
871 : {
872 0 : const sal_uInt16 nWhich = GetPool().GetWhich( nSlot );
873 0 : if ( pArgs && pArgs->GetItemState( nWhich ) == SfxItemState::SET )
874 0 : bUseDialog = false;
875 : // intentionally no break
876 :
877 : }
878 : case SID_PARA_DLG:
879 : {
880 0 : SwPaM* pPaM = NULL;
881 :
882 0 : if ( pArgs )
883 : {
884 0 : const SfxPoolItem* pPaMItem = 0;
885 0 : pArgs->GetItemState( GetPool().GetWhich( FN_PARAM_PAM ), false, &pPaMItem );
886 0 : if ( pPaMItem )
887 0 : pPaM = static_cast< const SwPaMItem* >( pPaMItem )->GetValue( );
888 : }
889 :
890 0 : if ( !pPaM )
891 0 : pPaM = rWrtSh.GetCrsr();
892 :
893 0 : FieldUnit eMetric = ::GetDfltMetric(0 != PTR_CAST(SwWebView, &GetView()));
894 0 : SW_MOD()->PutItem(SfxUInt16Item(SID_ATTR_METRIC, static_cast< sal_uInt16 >(eMetric)));
895 :
896 0 : bool bApplyCharUnit = ::HasCharUnit(0 != PTR_CAST(SwWebView, &GetView()));
897 0 : SW_MOD()->PutItem(SfxBoolItem(SID_ATTR_APPLYCHARUNIT, bApplyCharUnit));
898 :
899 0 : SfxItemSet aCoreSet( GetPool(), //UUUU sorted by indices, one group of three concatenated
900 : RES_PARATR_BEGIN, RES_PARATR_END - 1, // [60
901 : RES_PARATR_LIST_BEGIN, RES_PARATR_LIST_END - 1, // [77
902 : RES_FRMATR_BEGIN, RES_FRMATR_END - 1, // [82
903 :
904 : //UUUU FillAttribute support
905 : XATTR_FILL_FIRST, XATTR_FILL_LAST, // [1014
906 :
907 : // includes SID_ATTR_TABSTOP_POS
908 : SID_ATTR_TABSTOP_DEFAULTS, SID_ATTR_TABSTOP_OFFSET, // [10003 .. 10005
909 :
910 : SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER, // [10023
911 : SID_ATTR_PARA_MODEL, SID_ATTR_PARA_KEEP, // [10065
912 :
913 : //UUUU items to hand over XPropertyList things like
914 : // XColorList, XHatchList, XGradientList and XBitmapList
915 : // to the Area TabPage
916 : SID_COLOR_TABLE, SID_BITMAP_LIST, // [10179
917 :
918 : SID_HTML_MODE, SID_HTML_MODE, // [10414
919 : SID_ATTR_PARA_PAGENUM, SID_ATTR_PARA_PAGENUM, // [10457
920 : FN_PARAM_1, FN_PARAM_1, // [21160
921 : FN_NUMBER_NEWSTART, FN_NUMBER_NEWSTART_AT, // [21738
922 : FN_DROP_TEXT, FN_DROP_CHAR_STYLE_NAME, // [22418
923 0 : 0);
924 :
925 : // get also the list level indent values merged as LR-SPACE item, if needed.
926 0 : rWrtSh.GetCurAttr( aCoreSet, true );
927 :
928 : //UUUU create needed items for XPropertyList entries from the DrawModel so that
929 : // the Area TabPage can access them
930 : // Do this after GetCurAttr, this resets the ItemSet content again
931 0 : const SwDrawModel* pDrawModel = GetView().GetDocShell()->GetDoc()->getIDocumentDrawModelAccess().GetDrawModel();
932 :
933 0 : aCoreSet.Put(SvxColorListItem(pDrawModel->GetColorList(), SID_COLOR_TABLE));
934 0 : aCoreSet.Put(SvxGradientListItem(pDrawModel->GetGradientList(), SID_GRADIENT_LIST));
935 0 : aCoreSet.Put(SvxHatchListItem(pDrawModel->GetHatchList(), SID_HATCH_LIST));
936 0 : aCoreSet.Put(SvxBitmapListItem(pDrawModel->GetBitmapList(), SID_BITMAP_LIST));
937 :
938 : aCoreSet.Put(SfxUInt16Item(SID_HTML_MODE,
939 0 : ::GetHtmlMode(GetView().GetDocShell())));
940 :
941 : // Tabulators: Put DefaultTabs into ItemSet
942 : const SvxTabStopItem& rDefTabs = (const SvxTabStopItem&)
943 0 : GetPool().GetDefaultItem(RES_PARATR_TABSTOP);
944 :
945 0 : const sal_uInt16 nDefDist = static_cast<sal_uInt16>(::GetTabDist( rDefTabs ));
946 0 : SfxUInt16Item aDefDistItem( SID_ATTR_TABSTOP_DEFAULTS, nDefDist );
947 0 : aCoreSet.Put( aDefDistItem );
948 :
949 : // Current tabulator
950 0 : SfxUInt16Item aTabPos( SID_ATTR_TABSTOP_POS, 0 );
951 0 : aCoreSet.Put( aTabPos );
952 :
953 : // Left border as offset
954 : //#i24363# tab stops relative to indent
955 0 : const long nOff = rWrtSh.getIDocumentSettingAccess()->get(IDocumentSettingAccess::TABS_RELATIVE_TO_INDENT) ?
956 0 : ((SvxLRSpaceItem&)aCoreSet.Get( RES_LR_SPACE )).GetTxtLeft() : 0;
957 0 : SfxInt32Item aOff( SID_ATTR_TABSTOP_OFFSET, nOff );
958 0 : aCoreSet.Put( aOff );
959 :
960 : // Setting the BoxInfo
961 0 : ::PrepareBoxInfo( aCoreSet, rWrtSh );
962 :
963 : // Current page format
964 0 : ::SwToSfxPageDescAttr( aCoreSet );
965 :
966 : // Properties of numbering
967 0 : if (rWrtSh.GetNumRuleAtCurrCrsrPos())
968 : {
969 0 : SfxBoolItem aStart( FN_NUMBER_NEWSTART, rWrtSh.IsNumRuleStart( pPaM ) );
970 0 : aCoreSet.Put(aStart);
971 : SfxUInt16Item aStartAt( FN_NUMBER_NEWSTART_AT,
972 0 : rWrtSh.GetNodeNumStart( pPaM ) );
973 0 : aCoreSet.Put(aStartAt);
974 : }
975 0 : boost::scoped_ptr<SfxAbstractTabDialog> pDlg;
976 :
977 0 : if ( bUseDialog && GetActiveView() )
978 : {
979 0 : OString sDefPage;
980 0 : if (pItem)
981 0 : sDefPage = OUStringToOString(((const SfxStringItem*)pItem)->GetValue(), RTL_TEXTENCODING_UTF8);
982 :
983 0 : SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
984 : OSL_ENSURE(pFact, "SwAbstractDialogFactory fail!");
985 :
986 0 : pDlg.reset(pFact->CreateSwParaDlg( GetView().GetWindow(),GetView(), aCoreSet, DLG_STD, NULL, false, sDefPage ));
987 0 : OSL_ENSURE(pDlg, "Dialog creation failed!");
988 : }
989 0 : SfxItemSet* pSet = NULL;
990 0 : if ( !bUseDialog )
991 : {
992 0 : if ( nSlot == SID_ATTR_PARA_LRSPACE)
993 : {
994 0 : SvxLRSpaceItem aParaMargin((const SvxLRSpaceItem&)pArgs->Get(nSlot));
995 0 : aParaMargin.SetWhich( RES_LR_SPACE);
996 0 : aCoreSet.Put(aParaMargin);
997 0 : pSet = &aCoreSet;
998 :
999 : } else
1000 0 : pSet = (SfxItemSet*) pArgs;
1001 :
1002 : }
1003 0 : else if ( pDlg && pDlg->Execute() == RET_OK )
1004 : {
1005 : // Apply defaults if nessecary.
1006 0 : pSet = (SfxItemSet*)pDlg->GetOutputItemSet();
1007 : sal_uInt16 nNewDist;
1008 0 : if( SfxItemState::SET == pSet->GetItemState( SID_ATTR_TABSTOP_DEFAULTS, false, &pItem ) &&
1009 0 : nDefDist != (nNewDist = ((SfxUInt16Item*)pItem)->GetValue()) )
1010 : {
1011 0 : SvxTabStopItem aDefTabs( 0, 0, SVX_TAB_ADJUST_DEFAULT, RES_PARATR_TABSTOP );
1012 0 : MakeDefTabs( nNewDist, aDefTabs );
1013 0 : rWrtSh.SetDefault( aDefTabs );
1014 0 : pSet->ClearItem( SID_ATTR_TABSTOP_DEFAULTS );
1015 : }
1016 :
1017 0 : if ( SfxItemState::SET == pSet->GetItemState(FN_PARAM_1,false,&pItem) )
1018 : {
1019 0 : pSet->Put(SfxStringItem(FN_DROP_TEXT, ((const SfxStringItem*)pItem)->GetValue()));
1020 0 : pSet->ClearItem(FN_PARAM_1);
1021 : }
1022 :
1023 0 : if( SfxItemState::SET == pSet->GetItemState( RES_PARATR_DROP, false, &pItem ))
1024 : {
1025 0 : OUString sCharStyleName;
1026 0 : if(((const SwFmtDrop*)pItem)->GetCharFmt())
1027 0 : sCharStyleName = ((const SwFmtDrop*)pItem)->GetCharFmt()->GetName();
1028 0 : pSet->Put(SfxStringItem(FN_DROP_CHAR_STYLE_NAME, sCharStyleName));
1029 : }
1030 : }
1031 :
1032 0 : if ( pSet )
1033 : {
1034 0 : rReq.Done( *pSet );
1035 0 : ::SfxToSwPageDescAttr( rWrtSh, *pSet );
1036 : // #i56253#
1037 : // enclose all undos.
1038 : // Thus, check conditions, if actions will be performed.
1039 0 : const bool bUndoNeeded( pSet->Count() ||
1040 0 : SfxItemState::SET == pSet->GetItemState(FN_NUMBER_NEWSTART) ||
1041 0 : SfxItemState::SET == pSet->GetItemState(FN_NUMBER_NEWSTART_AT) );
1042 0 : if ( bUndoNeeded )
1043 : {
1044 0 : rWrtSh.StartUndo( UNDO_INSATTR );
1045 : }
1046 0 : if( pSet->Count() )
1047 : {
1048 0 : rWrtSh.StartAction();
1049 0 : if ( SfxItemState::SET == pSet->GetItemState(FN_DROP_TEXT, false, &pItem) )
1050 : {
1051 0 : if ( !((SfxStringItem*)pItem)->GetValue().isEmpty() )
1052 0 : rWrtSh.ReplaceDropTxt(((SfxStringItem*)pItem)->GetValue(), pPaM);
1053 : }
1054 0 : rWrtSh.SetAttrSet( *pSet, 0, pPaM );
1055 0 : rWrtSh.EndAction();
1056 0 : SwTxtFmtColl* pColl = rWrtSh.GetPaMTxtFmtColl( pPaM );
1057 0 : if(pColl && pColl->IsAutoUpdateFmt())
1058 : {
1059 0 : rWrtSh.AutoUpdatePara(pColl, *pSet, pPaM);
1060 : }
1061 : }
1062 :
1063 0 : if( SfxItemState::SET == pSet->GetItemState(FN_NUMBER_NEWSTART) )
1064 : {
1065 : //SetNumRuleStart(sal_True) restarts the numbering at the value
1066 : //that is defined at the starting point of the numbering level
1067 : //otherwise the SetNodeNumStart() value determines the start
1068 : //if it's set to something different than USHRT_MAX
1069 :
1070 0 : bool bStart = ((SfxBoolItem&)pSet->Get(FN_NUMBER_NEWSTART)).GetValue();
1071 :
1072 : // Default value for restart value has to be USHRT_MAX
1073 : // in order to indicate that the restart value of the list
1074 : // style has to be used on restart.
1075 0 : sal_uInt16 nNumStart = USHRT_MAX;
1076 0 : if( SfxItemState::SET == pSet->GetItemState(FN_NUMBER_NEWSTART_AT) )
1077 : {
1078 0 : nNumStart = ((SfxUInt16Item&)pSet->Get(FN_NUMBER_NEWSTART_AT)).GetValue();
1079 : }
1080 0 : rWrtSh.SetNumRuleStart(bStart, pPaM);
1081 0 : rWrtSh.SetNodeNumStart(nNumStart);
1082 : }
1083 0 : else if( SfxItemState::SET == pSet->GetItemState(FN_NUMBER_NEWSTART_AT) )
1084 : {
1085 0 : rWrtSh.SetNodeNumStart(((SfxUInt16Item&)pSet->Get(FN_NUMBER_NEWSTART_AT)).GetValue());
1086 0 : rWrtSh.SetNumRuleStart(false, pPaM);
1087 : }
1088 : // #i56253#
1089 0 : if ( bUndoNeeded )
1090 : {
1091 0 : rWrtSh.EndUndo( UNDO_INSATTR );
1092 : }
1093 0 : }
1094 : }
1095 0 : break;
1096 : case FN_NUM_CONTINUE:
1097 : {
1098 0 : OUString sContinuedListId;
1099 : const SwNumRule* pRule =
1100 0 : rWrtSh.SearchNumRule( false, true, false, -1, sContinuedListId );
1101 : // #i86492#
1102 : // Search also for bullet list
1103 0 : if ( !pRule )
1104 : {
1105 0 : pRule = rWrtSh.SearchNumRule( false, false, false, -1, sContinuedListId );
1106 : }
1107 0 : if ( pRule )
1108 : {
1109 0 : rWrtSh.SetCurNumRule( *pRule, false, sContinuedListId );
1110 0 : }
1111 : }
1112 0 : break;
1113 :
1114 : case FN_SELECT_PARA:
1115 : {
1116 0 : if ( !rWrtSh.IsSttOfPara() )
1117 0 : rWrtSh.SttPara( false );
1118 : else
1119 0 : rWrtSh.EnterStdMode();
1120 0 : rWrtSh.EndPara( true );
1121 : }
1122 0 : break;
1123 :
1124 : case SID_DEC_INDENT:
1125 : case SID_INC_INDENT:
1126 : //According to the requirement, modified the behavior when user
1127 : //using the indent button on the toolbar. Now if we increase/decrease indent for a
1128 : //paragraph which has bullet style it will increase/decrease the bullet level.
1129 : {
1130 : //If the current paragraph has bullet call the function to
1131 : //increase or decrease the bullet level.
1132 : //Why could I know wheter a paragraph has bullet or not by checking the below conditions?
1133 : //Please refer to the "case KEY_TAB:" section in SwEditWin::KeyInput(..) :
1134 : // if( rSh.GetCurNumRule() && rSh.IsSttOfPara() &&
1135 : // !rSh.HasReadonlySel() )
1136 : // eKeyState = KS_NumDown;
1137 : //Above code demonstrates that when the cursor is at the start of a paragraph which has bullet,
1138 : //press TAB will increase the bullet level.
1139 : //So I copied from that ^^
1140 0 : if ( rWrtSh.GetNumRuleAtCurrCrsrPos() && !rWrtSh.HasReadonlySel() )
1141 : {
1142 0 : rWrtSh.NumUpDown( SID_INC_INDENT == nSlot );
1143 : }
1144 : else //execute the original processing functions
1145 : {
1146 : //below is copied of the old codes
1147 0 : rWrtSh.MoveLeftMargin( SID_INC_INDENT == nSlot, rReq.GetModifier() != KEY_MOD1 );
1148 : }
1149 : }
1150 0 : rReq.Done();
1151 0 : break;
1152 :
1153 : case FN_DEC_INDENT_OFFSET:
1154 : case FN_INC_INDENT_OFFSET:
1155 0 : rWrtSh.MoveLeftMargin( FN_INC_INDENT_OFFSET == nSlot, rReq.GetModifier() == KEY_MOD1 );
1156 0 : rReq.Done();
1157 0 : break;
1158 :
1159 : case SID_ATTR_CHAR_COLOR2:
1160 : {
1161 0 : if(pItem)
1162 : {
1163 0 : Color aSet = ((const SvxColorItem*)pItem)->GetValue();
1164 0 : SwEditWin& rEditWin = GetView().GetEditWin();
1165 0 : rEditWin.SetTextColor(aSet);
1166 0 : SwApplyTemplate* pApply = rEditWin.GetApplyTemplate();
1167 :
1168 : // If there is a selection, then set the color on it
1169 : // otherwise, it'll be the color for the next text to be typed
1170 0 : if(!pApply || pApply->nColor != SID_ATTR_CHAR_COLOR_EXT)
1171 : {
1172 0 : rWrtSh.SetAttrItem(SvxColorItem (aSet, RES_CHRATR_COLOR));
1173 : }
1174 :
1175 0 : rReq.Done();
1176 : }
1177 : }
1178 0 : break;
1179 : case SID_ATTR_CHAR_COLOR_BACKGROUND:
1180 : {
1181 0 : Color aSet;
1182 0 : if(pItem)
1183 0 : aSet = ((const SvxColorItem*)pItem)->GetValue();
1184 : else
1185 0 : aSet = COL_TRANSPARENT;
1186 :
1187 0 : SwEditWin& rEdtWin = GetView().GetEditWin();
1188 0 : rEdtWin.SetTextBackColor(aSet);
1189 0 : SwApplyTemplate* pApply = rEdtWin.GetApplyTemplate();
1190 :
1191 0 : if(!pApply && (rWrtSh.HasSelection() || rReq.IsAPI()))
1192 : {
1193 0 : SvxBrushItem aBrushItem(RES_CHRATR_BACKGROUND);
1194 0 : aBrushItem.SetColor(aSet);
1195 0 : rWrtSh.SetAttrItem( aBrushItem );
1196 : }
1197 0 : else if(!pApply || pApply->nColor != SID_ATTR_CHAR_COLOR_BACKGROUND_EXT)
1198 : {
1199 0 : GetView().GetViewFrame()->GetDispatcher()->Execute(SID_ATTR_CHAR_COLOR_BACKGROUND_EXT);
1200 : }
1201 :
1202 0 : rReq.Done();
1203 : }
1204 0 : break;
1205 : case SID_ATTR_CHAR_COLOR_BACKGROUND_EXT:
1206 : case SID_ATTR_CHAR_COLOR_EXT:
1207 : {
1208 0 : SwEditWin& rEdtWin = GetView().GetEditWin();
1209 0 : if (pItem)
1210 : {
1211 : // The reason we need this argument here is that when a toolbar is closed
1212 : // and reopened, its color resets, while SwEditWin still holds the old one.
1213 0 : Color aSet = ((const SvxColorItem*)pItem)->GetValue();
1214 0 : if( nSlot == SID_ATTR_CHAR_COLOR_BACKGROUND_EXT )
1215 0 : rEdtWin.SetTextBackColor(aSet);
1216 : else
1217 0 : rEdtWin.SetTextColor(aSet);
1218 : }
1219 :
1220 0 : SwApplyTemplate* pApply = rEdtWin.GetApplyTemplate();
1221 0 : SwApplyTemplate aTempl;
1222 0 : if ( rWrtSh.HasSelection() )
1223 : {
1224 0 : if(nSlot == SID_ATTR_CHAR_COLOR_BACKGROUND_EXT)
1225 : {
1226 : rWrtSh.SetAttrItem(
1227 0 : SvxBrushItem( rEdtWin.GetTextBackColor(), RES_CHRATR_BACKGROUND) );
1228 : }
1229 : else
1230 : rWrtSh.SetAttrItem(
1231 0 : SvxColorItem( rEdtWin.GetTextColor(), RES_CHRATR_COLOR) );
1232 : }
1233 : else
1234 : {
1235 0 : if(!pApply || pApply->nColor != nSlot)
1236 0 : aTempl.nColor = nSlot;
1237 0 : rEdtWin.SetApplyTemplate(aTempl);
1238 : }
1239 :
1240 0 : rReq.Done();
1241 : }
1242 0 : break;
1243 :
1244 : case FN_NUM_BULLET_MOVEDOWN:
1245 0 : if (!rWrtSh.IsAddMode())
1246 0 : rWrtSh.MoveParagraph(1);
1247 0 : rReq.Done();
1248 0 : break;
1249 :
1250 : case FN_NUM_BULLET_MOVEUP:
1251 0 : if (!rWrtSh.IsAddMode())
1252 0 : rWrtSh.MoveParagraph(-1);
1253 0 : rReq.Done();
1254 0 : break;
1255 : case SID_RUBY_DIALOG:
1256 : case SID_HYPERLINK_DIALOG:
1257 : {
1258 0 : SfxRequest aReq(nSlot, SfxCallMode::SLOT, SfxGetpApp()->GetPool());
1259 0 : GetView().GetViewFrame()->ExecuteSlot( aReq);
1260 0 : rReq.Ignore();
1261 : }
1262 0 : break;
1263 : case FN_INSERT_PAGEHEADER:
1264 : case FN_INSERT_PAGEFOOTER:
1265 0 : if(pArgs && pArgs->Count())
1266 : {
1267 0 : OUString sStyleName;
1268 0 : if(pItem)
1269 0 : sStyleName = ((const SfxStringItem*)pItem)->GetValue();
1270 0 : bool bOn = true;
1271 0 : if( SfxItemState::SET == pArgs->GetItemState(FN_PARAM_1, false, &pItem))
1272 0 : bOn = ((const SfxBoolItem*)pItem)->GetValue();
1273 0 : rWrtSh.ChangeHeaderOrFooter(sStyleName, FN_INSERT_PAGEHEADER == nSlot, bOn, !rReq.IsAPI());
1274 0 : rReq.Done();
1275 : }
1276 0 : break;
1277 : case FN_READONLY_SELECTION_MODE :
1278 0 : if(GetView().GetDocShell()->IsReadOnly())
1279 : {
1280 : rWrtSh.SetReadonlySelectionOption(
1281 0 : !rWrtSh.GetViewOptions()->IsSelectionInReadonly());
1282 0 : rWrtSh.ShowCrsr();
1283 : }
1284 0 : break;
1285 : case FN_SELECTION_MODE_DEFAULT:
1286 : case FN_SELECTION_MODE_BLOCK :
1287 : {
1288 0 : bool bSetBlockMode = !rWrtSh.IsBlockMode();
1289 0 : if( pArgs && SfxItemState::SET == pArgs->GetItemState(nSlot, false, &pItem))
1290 0 : bSetBlockMode = ((const SfxBoolItem*)pItem)->GetValue();
1291 0 : if( ( nSlot == FN_SELECTION_MODE_DEFAULT ) != bSetBlockMode )
1292 0 : rWrtSh.EnterBlockMode();
1293 : else
1294 0 : rWrtSh.EnterStdMode();
1295 0 : SfxBindings &rBnd = GetView().GetViewFrame()->GetBindings();
1296 0 : rBnd.Invalidate(FN_STAT_SELMODE);
1297 0 : rBnd.Update(FN_STAT_SELMODE);
1298 : }
1299 0 : break;
1300 : case SID_OPEN_HYPERLINK:
1301 : case FN_COPY_HYPERLINK_LOCATION:
1302 : {
1303 0 : SfxItemSet aSet(GetPool(),
1304 : RES_TXTATR_INETFMT,
1305 0 : RES_TXTATR_INETFMT);
1306 0 : rWrtSh.GetCurAttr(aSet);
1307 0 : if(SfxItemState::SET <= aSet.GetItemState( RES_TXTATR_INETFMT, true ))
1308 : {
1309 0 : const SwFmtINetFmt& rINetFmt = dynamic_cast<const SwFmtINetFmt&>( aSet.Get(RES_TXTATR_INETFMT, true) );
1310 0 : if( nSlot == FN_COPY_HYPERLINK_LOCATION )
1311 : {
1312 0 : ::uno::Reference< datatransfer::clipboard::XClipboard > xClipboard = GetView().GetEditWin().GetClipboard();
1313 : vcl::unohelper::TextDataObject::CopyStringTo(
1314 0 : rINetFmt.GetValue(),
1315 0 : xClipboard );
1316 : }
1317 : else
1318 0 : rWrtSh.ClickToINetAttr(rINetFmt, URLLOAD_NOFILTER);
1319 0 : }
1320 : }
1321 0 : break;
1322 : case SID_OPEN_XML_FILTERSETTINGS:
1323 : {
1324 : try
1325 : {
1326 0 : uno::Reference < ui::dialogs::XExecutableDialog > xDialog = ui::dialogs::XSLTFilterDialog::create( ::comphelper::getProcessComponentContext() );
1327 0 : xDialog->execute();
1328 : }
1329 0 : catch (const uno::Exception&)
1330 : {
1331 : }
1332 0 : rReq.Ignore ();
1333 : }
1334 0 : break;
1335 : case FN_FORMAT_APPLY_HEAD1:
1336 : {
1337 : }
1338 0 : break;
1339 : case FN_FORMAT_APPLY_HEAD2:
1340 : {
1341 : }
1342 0 : break;
1343 : case FN_FORMAT_APPLY_HEAD3:
1344 : {
1345 : }
1346 0 : break;
1347 : case FN_FORMAT_APPLY_DEFAULT:
1348 : {
1349 : }
1350 0 : break;
1351 : case FN_FORMAT_APPLY_TEXTBODY:
1352 : {
1353 : }
1354 0 : break;
1355 : case FN_WORDCOUNT_DIALOG:
1356 : {
1357 0 : SfxViewFrame* pVFrame = GetView().GetViewFrame();
1358 0 : if (pVFrame != NULL)
1359 : {
1360 0 : pVFrame->ToggleChildWindow(FN_WORDCOUNT_DIALOG);
1361 0 : Invalidate(rReq.GetSlot());
1362 :
1363 0 : SwWordCountWrapper *pWrdCnt = (SwWordCountWrapper*)pVFrame->GetChildWindow(SwWordCountWrapper::GetChildWindowId());
1364 0 : if (pWrdCnt)
1365 0 : pWrdCnt->UpdateCounts();
1366 : }
1367 : }
1368 0 : break;
1369 : default:
1370 : OSL_ENSURE(false, "wrong dispatcher");
1371 0 : return;
1372 : }
1373 : }
1374 :
1375 11766 : void SwTextShell::GetState( SfxItemSet &rSet )
1376 : {
1377 11766 : SwWrtShell &rSh = GetShell();
1378 11766 : SfxWhichIter aIter( rSet );
1379 11766 : sal_uInt16 nWhich = aIter.FirstWhich();
1380 38055 : while ( nWhich )
1381 : {
1382 14523 : switch ( nWhich )
1383 : {
1384 : case SID_LANGUAGE_STATUS:
1385 : {
1386 : // the value of used script types
1387 199 : OUString aScriptTypesInUse( OUString::number( rSh.GetScriptType() ) );
1388 :
1389 : // get keyboard language
1390 398 : OUString aKeyboardLang;
1391 199 : SwEditWin& rEditWin = GetView().GetEditWin();
1392 199 : LanguageType nLang = rEditWin.GetInputLanguage();
1393 199 : if (nLang != LANGUAGE_DONTKNOW && nLang != LANGUAGE_SYSTEM)
1394 0 : aKeyboardLang = SvtLanguageTable::GetLanguageString( nLang );
1395 :
1396 : // get the language that is in use
1397 398 : OUString aCurrentLang = "*";
1398 199 : nLang = SwLangHelper::GetCurrentLanguage( rSh );
1399 199 : if (nLang != LANGUAGE_DONTKNOW)
1400 199 : aCurrentLang = SvtLanguageTable::GetLanguageString( nLang );
1401 :
1402 : // build sequence for status value
1403 398 : uno::Sequence< OUString > aSeq( 4 );
1404 199 : aSeq[0] = aCurrentLang;
1405 199 : aSeq[1] = aScriptTypesInUse;
1406 199 : aSeq[2] = aKeyboardLang;
1407 199 : aSeq[3] = SwLangHelper::GetTextForLanguageGuessing( rSh );
1408 :
1409 : // set sequence as status value
1410 398 : SfxStringListItem aItem( SID_LANGUAGE_STATUS );
1411 199 : aItem.SetStringList( aSeq );
1412 398 : rSet.Put( aItem, SID_LANGUAGE_STATUS );
1413 : }
1414 199 : break;
1415 :
1416 : case SID_THES:
1417 : {
1418 : // is there a valid selection to get text from?
1419 0 : OUString aText;
1420 0 : bool bValid = !rSh.HasSelection() ||
1421 0 : (rSh.IsSelOnePara() && !rSh.IsMultiSelection());
1422 : // prevent context menu from showing when cursor is not in or at the end of a word
1423 : // (GetCurWord will return the next word if there is none at the current position...)
1424 0 : const sal_Int16 nWordType = ::i18n::WordType::DICTIONARY_WORD;
1425 0 : bool bWord = rSh.IsInWord( nWordType ) || rSh.IsStartWord( nWordType ) || rSh.IsEndWord( nWordType );
1426 0 : if (bValid && bWord)
1427 0 : aText = rSh.HasSelection()? OUString(rSh.GetSelTxt()) : rSh.GetCurWord();
1428 :
1429 0 : LanguageType nLang = rSh.GetCurLang();
1430 0 : LanguageTag aLanguageTag( nLang);
1431 0 : lang::Locale aLocale( aLanguageTag.getLocale());
1432 0 : OUString aLangText( aLanguageTag.getBcp47() );
1433 :
1434 : // set word and locale to look up as status value
1435 0 : OUString aStatusVal = aText + "#" + aLangText;
1436 :
1437 0 : rSet.Put( SfxStringItem( SID_THES, aStatusVal ) );
1438 :
1439 : // disable "Thesaurus" context menu entry if there is nothing to look up
1440 0 : uno::Reference< linguistic2::XThesaurus > xThes( ::GetThesaurus() );
1441 0 : if (aText.isEmpty() ||
1442 0 : !xThes.is() || nLang == LANGUAGE_NONE || !xThes->hasLocale( aLocale ))
1443 0 : rSet.DisableItem( SID_THES );
1444 : }
1445 0 : break;
1446 :
1447 : case FN_NUMBER_NEWSTART :
1448 0 : if(!rSh.GetNumRuleAtCurrCrsrPos())
1449 0 : rSet.DisableItem(nWhich);
1450 : else
1451 : rSet.Put(SfxBoolItem(FN_NUMBER_NEWSTART,
1452 0 : rSh.IsNumRuleStart()));
1453 0 : break;
1454 :
1455 : case FN_EDIT_FORMULA:
1456 : case SID_CHARMAP:
1457 : {
1458 910 : const int nType = rSh.GetSelectionType();
1459 910 : if (!(nType & nsSelectionType::SEL_TXT) &&
1460 0 : !(nType & nsSelectionType::SEL_TBL) &&
1461 0 : !(nType & nsSelectionType::SEL_NUM))
1462 : {
1463 0 : rSet.DisableItem(nWhich);
1464 : }
1465 910 : else if ( nWhich == FN_EDIT_FORMULA
1466 910 : && rSh.CrsrInsideInputFld() )
1467 : {
1468 0 : rSet.DisableItem( nWhich );
1469 : }
1470 : }
1471 910 : break;
1472 :
1473 : case FN_INSERT_ENDNOTE:
1474 : case FN_INSERT_FOOTNOTE:
1475 : case FN_INSERT_FOOTNOTE_DLG:
1476 : {
1477 : const sal_uInt16 nNoType =
1478 908 : FRMTYPE_FLY_ANY | FRMTYPE_HEADER | FRMTYPE_FOOTER | FRMTYPE_FOOTNOTE;
1479 908 : if ( (rSh.GetFrmType(0,true) & nNoType) )
1480 0 : rSet.DisableItem(nWhich);
1481 :
1482 908 : if ( rSh.CrsrInsideInputFld() )
1483 : {
1484 0 : rSet.DisableItem( nWhich );
1485 : }
1486 : }
1487 908 : break;
1488 :
1489 : case FN_INSERT_HYPERLINK:
1490 : case SID_INSERTDOC:
1491 : case FN_INSERT_GLOSSARY:
1492 : case FN_EXPAND_GLOSSARY:
1493 0 : if ( rSh.CrsrInsideInputFld() )
1494 : {
1495 0 : rSet.DisableItem( nWhich );
1496 : }
1497 0 : break;
1498 :
1499 : case FN_INSERT_TABLE:
1500 1804 : if ( rSh.CrsrInsideInputFld()
1501 902 : || rSh.GetTableFmt()
1502 1804 : || (rSh.GetFrmType(0,true) & FRMTYPE_FOOTNOTE) )
1503 : {
1504 0 : rSet.DisableItem( nWhich );
1505 : }
1506 902 : break;
1507 :
1508 : case FN_CALCULATE:
1509 0 : if ( !rSh.IsSelection() )
1510 0 : rSet.DisableItem(nWhich);
1511 0 : break;
1512 : case FN_GOTO_REFERENCE:
1513 : {
1514 0 : SwField *pFld = rSh.GetCurFld();
1515 0 : if ( !pFld || (pFld && pFld->GetTypeId() != TYP_GETREFFLD) )
1516 0 : rSet.DisableItem(nWhich);
1517 : }
1518 0 : break;
1519 : case FN_AUTOFORMAT_AUTO:
1520 : {
1521 0 : rSet.Put( SfxBoolItem( nWhich, SvxAutoCorrCfg::Get().IsAutoFmtByInput() ));
1522 : }
1523 0 : break;
1524 :
1525 : case SID_DEC_INDENT:
1526 : case SID_INC_INDENT:
1527 : {
1528 : //if the paragrah has bullet we'll do the following things:
1529 : //1: if the bullet level is the first level, disable the decrease-indent button
1530 : //2: if the bullet level is the last level, disable the increase-indent button
1531 1820 : if ( rSh.GetNumRuleAtCurrCrsrPos() && !rSh.HasReadonlySel() )
1532 : {
1533 0 : const sal_uInt8 nLevel = rSh.GetNumLevel();
1534 0 : if ( ( nLevel == ( MAXLEVEL - 1 ) && nWhich == SID_INC_INDENT )
1535 0 : || ( nLevel == 0 && nWhich == SID_DEC_INDENT ) )
1536 : {
1537 0 : rSet.DisableItem( nWhich );
1538 : }
1539 : }
1540 : else
1541 : {
1542 1820 : sal_uInt16 nHtmlMode = ::GetHtmlMode( GetView().GetDocShell() );
1543 1820 : nHtmlMode &= HTMLMODE_ON | HTMLMODE_SOME_STYLES;
1544 1820 : if ( ( nHtmlMode == HTMLMODE_ON )
1545 1820 : || !rSh.IsMoveLeftMargin( SID_INC_INDENT == nWhich, true ) )
1546 : {
1547 0 : rSet.DisableItem( nWhich );
1548 : }
1549 : }
1550 : }
1551 1820 : break;
1552 :
1553 : case FN_DEC_INDENT_OFFSET:
1554 : case FN_INC_INDENT_OFFSET:
1555 : {
1556 0 : sal_uInt16 nHtmlMode = ::GetHtmlMode(GetView().GetDocShell());
1557 0 : nHtmlMode &= HTMLMODE_ON|HTMLMODE_SOME_STYLES;
1558 0 : if( (nHtmlMode == HTMLMODE_ON) ||
1559 : !rSh.IsMoveLeftMargin( FN_INC_INDENT_OFFSET == nWhich,
1560 0 : false ))
1561 0 : rSet.DisableItem( nWhich );
1562 : }
1563 0 : break;
1564 :
1565 : case SID_ATTR_CHAR_COLOR2:
1566 : {
1567 1648 : SfxItemSet aSet( GetPool() );
1568 1648 : rSh.GetCurAttr( aSet );
1569 1648 : const SvxColorItem& aColorItem = static_cast< const SvxColorItem& >( aSet.Get(RES_CHRATR_COLOR) );
1570 1648 : rSet.Put( aColorItem, SID_ATTR_CHAR_COLOR2 );
1571 : }
1572 1648 : break;
1573 : case SID_ATTR_CHAR_COLOR_BACKGROUND:
1574 : {
1575 1648 : SfxItemSet aSet( GetPool() );
1576 1648 : rSh.GetCurAttr( aSet );
1577 1648 : const SvxBrushItem& aBrushItem = static_cast< const SvxBrushItem& >( aSet.Get(RES_CHRATR_BACKGROUND) );
1578 1648 : rSet.Put( SvxColorItem(aBrushItem.GetColor(), nWhich) );
1579 : }
1580 1648 : break;
1581 : case SID_ATTR_CHAR_COLOR_BACKGROUND_EXT:
1582 : case SID_ATTR_CHAR_COLOR_EXT:
1583 : {
1584 3296 : SwEditWin& rEdtWin = GetView().GetEditWin();
1585 3296 : SwApplyTemplate* pApply = rEdtWin.GetApplyTemplate();
1586 3296 : rSet.Put(SfxBoolItem(nWhich, pApply && pApply->nColor == nWhich));
1587 : }
1588 3296 : break;
1589 :
1590 : case FN_INSERT_BOOKMARK:
1591 4 : if( rSh.IsTableMode()
1592 2 : || rSh.CrsrInsideInputFld() )
1593 : {
1594 0 : rSet.DisableItem( nWhich );
1595 : }
1596 2 : break;
1597 :
1598 : case FN_INSERT_BREAK:
1599 0 : if ( rSh.HasReadonlySel()
1600 0 : && !rSh.CrsrInsideInputFld() )
1601 : {
1602 0 : rSet.DisableItem( nWhich );
1603 : }
1604 0 : break;
1605 :
1606 : case FN_INSERT_BREAK_DLG:
1607 : case FN_INSERT_COLUMN_BREAK:
1608 : case FN_INSERT_PAGEBREAK:
1609 0 : if( rSh.CrsrInsideInputFld() )
1610 : {
1611 0 : rSet.DisableItem( nWhich );
1612 : }
1613 0 : break;
1614 :
1615 : case FN_INSERT_PAGEHEADER:
1616 : case FN_INSERT_PAGEFOOTER:
1617 : {
1618 0 : rSet.Put( SfxObjectShellItem( nWhich, GetView().GetDocShell() ));
1619 : }
1620 0 : break;
1621 : case FN_TABLE_SORT_DIALOG:
1622 : case FN_SORTING_DLG:
1623 12 : if(!rSh.HasSelection() ||
1624 8 : (FN_TABLE_SORT_DIALOG == nWhich && !rSh.GetTableFmt()))
1625 2 : rSet.DisableItem( nWhich );
1626 10 : break;
1627 :
1628 : case SID_RUBY_DIALOG:
1629 : {
1630 0 : SvtCJKOptions aCJKOptions;
1631 0 : if( !aCJKOptions.IsRubyEnabled()
1632 0 : || rSh.CrsrInsideInputFld() )
1633 : {
1634 0 : GetView().GetViewFrame()->GetBindings().SetVisibleState( nWhich, false );
1635 0 : rSet.DisableItem(nWhich);
1636 : }
1637 : else
1638 0 : GetView().GetViewFrame()->GetBindings().SetVisibleState( nWhich, true );
1639 : }
1640 0 : break;
1641 :
1642 : case SID_HYPERLINK_DIALOG:
1643 1828 : if( GetView().GetDocShell()->IsReadOnly()
1644 910 : || ( !GetView().GetViewFrame()->HasChildWindow(nWhich)
1645 910 : && rSh.HasReadonlySel() )
1646 1824 : || rSh.CrsrInsideInputFld() )
1647 : {
1648 4 : rSet.DisableItem(nWhich);
1649 : }
1650 : else
1651 : {
1652 910 : rSet.Put(SfxBoolItem( nWhich, 0 != GetView().GetViewFrame()->GetChildWindow( nWhich ) ));
1653 : }
1654 914 : break;
1655 :
1656 : case FN_EDIT_HYPERLINK:
1657 : case FN_COPY_HYPERLINK_LOCATION:
1658 : {
1659 18 : SfxItemSet aSet(GetPool(),
1660 : RES_TXTATR_INETFMT,
1661 18 : RES_TXTATR_INETFMT);
1662 18 : rSh.GetCurAttr(aSet);
1663 18 : if(SfxItemState::SET > aSet.GetItemState( RES_TXTATR_INETFMT, true ) || rSh.HasReadonlySel())
1664 : {
1665 18 : rSet.DisableItem(nWhich);
1666 18 : }
1667 : }
1668 18 : break;
1669 : case FN_REMOVE_HYPERLINK:
1670 : {
1671 0 : SfxItemSet aSet(GetPool(),
1672 : RES_TXTATR_INETFMT,
1673 0 : RES_TXTATR_INETFMT);
1674 0 : rSh.GetCurAttr(aSet);
1675 :
1676 : // If a hyperlink is selected, either alone or along with other text...
1677 0 : if(aSet.GetItemState( RES_TXTATR_INETFMT, true ) != SfxItemState::DONTCARE || rSh.HasReadonlySel())
1678 : {
1679 0 : rSet.DisableItem(nWhich);
1680 0 : }
1681 : }
1682 0 : break;
1683 : case SID_TRANSLITERATE_HALFWIDTH:
1684 : case SID_TRANSLITERATE_FULLWIDTH:
1685 : case SID_TRANSLITERATE_HIRAGANA:
1686 : case SID_TRANSLITERATE_KATAGANA:
1687 : {
1688 0 : SvtCJKOptions aCJKOptions;
1689 0 : if(!aCJKOptions.IsChangeCaseMapEnabled())
1690 : {
1691 0 : GetView().GetViewFrame()->GetBindings().SetVisibleState( nWhich, false );
1692 0 : rSet.DisableItem(nWhich);
1693 : }
1694 : else
1695 0 : GetView().GetViewFrame()->GetBindings().SetVisibleState( nWhich, true );
1696 : }
1697 0 : break;
1698 : case FN_READONLY_SELECTION_MODE :
1699 18 : if(!GetView().GetDocShell()->IsReadOnly())
1700 18 : rSet.DisableItem( nWhich );
1701 : else
1702 : {
1703 0 : rSet.Put(SfxBoolItem(nWhich, rSh.GetViewOptions()->IsSelectionInReadonly()));
1704 : }
1705 18 : break;
1706 : case FN_SELECTION_MODE_DEFAULT:
1707 : case FN_SELECTION_MODE_BLOCK :
1708 0 : rSet.Put(SfxBoolItem(nWhich, (nWhich == FN_SELECTION_MODE_DEFAULT) != rSh.IsBlockMode()));
1709 0 : break;
1710 : case SID_OPEN_HYPERLINK:
1711 : {
1712 0 : SfxItemSet aSet(GetPool(),
1713 : RES_TXTATR_INETFMT,
1714 0 : RES_TXTATR_INETFMT);
1715 0 : rSh.GetCurAttr(aSet);
1716 0 : if(SfxItemState::SET > aSet.GetItemState( RES_TXTATR_INETFMT, false ))
1717 0 : rSet.DisableItem(nWhich);
1718 : }
1719 0 : break;
1720 : case SID_OPEN_SMARTTAGMENU:
1721 : {
1722 0 : uno::Sequence< OUString > aSmartTagTypes;
1723 0 : uno::Sequence< uno::Reference< container::XStringKeyMap > > aStringKeyMaps;
1724 0 : uno::Reference<text::XTextRange> xRange;
1725 :
1726 0 : rSh.GetSmartTagTerm( aSmartTagTypes, aStringKeyMaps, xRange );
1727 :
1728 0 : if ( xRange.is() && aSmartTagTypes.getLength() )
1729 : {
1730 0 : uno::Sequence < uno::Sequence< uno::Reference< smarttags::XSmartTagAction > > > aActionComponentsSequence;
1731 0 : uno::Sequence < uno::Sequence< sal_Int32 > > aActionIndicesSequence;
1732 :
1733 0 : const SmartTagMgr& rSmartTagMgr = SwSmartTagMgr::Get();
1734 : rSmartTagMgr.GetActionSequences( aSmartTagTypes,
1735 : aActionComponentsSequence,
1736 0 : aActionIndicesSequence );
1737 :
1738 0 : uno::Reference <frame::XController> xController = GetView().GetController();
1739 0 : const lang::Locale aLocale( SW_BREAKITER()->GetLocale( GetAppLanguageTag() ) );
1740 0 : const OUString aApplicationName( rSmartTagMgr.GetApplicationName() );
1741 0 : const OUString aRangeText = xRange->getString();
1742 :
1743 : const SvxSmartTagItem aItem( nWhich,
1744 : aActionComponentsSequence,
1745 : aActionIndicesSequence,
1746 : aStringKeyMaps,
1747 : xRange,
1748 : xController,
1749 : aLocale,
1750 : aApplicationName,
1751 0 : aRangeText );
1752 :
1753 0 : rSet.Put( aItem );
1754 : }
1755 : else
1756 0 : rSet.DisableItem(nWhich);
1757 : }
1758 0 : break;
1759 :
1760 : case FN_NUM_NUMBERING_ON:
1761 910 : rSet.Put(SfxBoolItem(FN_NUM_NUMBERING_ON,rSh.SelectionHasNumber()));
1762 910 : break;
1763 :
1764 : case FN_NUM_BULLET_ON:
1765 910 : rSet.Put(SfxBoolItem(FN_NUM_BULLET_ON,rSh.SelectionHasBullet()));
1766 910 : break;
1767 :
1768 : case FN_BUL_NUM_RULE_INDEX:
1769 : case FN_NUM_NUM_RULE_INDEX:
1770 : {
1771 392 : SwNumRule* pCurRule = (SwNumRule*)(GetShell().GetNumRuleAtCurrCrsrPos());
1772 392 : sal_uInt16 nActNumLvl = USHRT_MAX;
1773 392 : rSet.Put(SfxUInt16Item(FN_NUM_NUM_RULE_INDEX,DEFAULT_NONE));
1774 392 : rSet.Put(SfxUInt16Item(FN_BUL_NUM_RULE_INDEX,DEFAULT_NONE));
1775 392 : if( pCurRule )
1776 : {
1777 0 : nActNumLvl = GetShell().GetNumLevel();
1778 0 : if( nActNumLvl < MAXLEVEL )
1779 : {
1780 0 : nActNumLvl = 1<<nActNumLvl;
1781 : }
1782 0 : SvxNumRule aSvxRule = pCurRule->MakeSvxNumRule();
1783 0 : if ( GetShell().HasBullet())
1784 : {
1785 0 : rSet.Put(SfxUInt16Item(FN_BUL_NUM_RULE_INDEX, USHRT_MAX));
1786 0 : rSet.Put(SfxUInt16Item(FN_NUM_NUM_RULE_INDEX, USHRT_MAX));
1787 0 : NBOTypeMgrBase* pBullets = NBOutlineTypeMgrFact::CreateInstance(eNBOType::MIXBULLETS);
1788 0 : if ( pBullets )
1789 : {
1790 0 : const sal_uInt16 nBulIndex = pBullets->GetNBOIndexForNumRule(aSvxRule,nActNumLvl);
1791 0 : rSet.Put(SfxUInt16Item(FN_BUL_NUM_RULE_INDEX,nBulIndex));
1792 : }
1793 0 : }else if ( GetShell().HasNumber() )
1794 : {
1795 0 : rSet.Put(SfxUInt16Item(FN_BUL_NUM_RULE_INDEX, USHRT_MAX));
1796 0 : rSet.Put(SfxUInt16Item(FN_NUM_NUM_RULE_INDEX, USHRT_MAX));
1797 0 : NBOTypeMgrBase* pNumbering = NBOutlineTypeMgrFact::CreateInstance(eNBOType::NUMBERING);
1798 0 : if ( pNumbering )
1799 : {
1800 0 : const sal_uInt16 nBulIndex = pNumbering->GetNBOIndexForNumRule(aSvxRule,nActNumLvl);
1801 0 : rSet.Put(SfxUInt16Item(FN_NUM_NUM_RULE_INDEX,nBulIndex));
1802 : }
1803 0 : }
1804 : }
1805 : }
1806 392 : break;
1807 : case FN_NUM_CONTINUE:
1808 : {
1809 : {
1810 : // #i86492#
1811 : // Search also for bullet list
1812 0 : OUString aDummy;
1813 : const SwNumRule* pRule =
1814 0 : rSh.SearchNumRule( false, true, false, -1, aDummy );
1815 0 : if ( !pRule )
1816 : {
1817 0 : pRule = rSh.SearchNumRule( false, false, false, -1, aDummy );
1818 : }
1819 0 : if ( !pRule )
1820 0 : rSet.DisableItem(nWhich);
1821 : }
1822 : }
1823 0 : break;
1824 : case SID_INSERT_RLM :
1825 : case SID_INSERT_LRM :
1826 : case SID_INSERT_ZWNBSP :
1827 : case SID_INSERT_ZWSP:
1828 : {
1829 0 : SvtCTLOptions aCTLOptions;
1830 0 : bool bEnabled = aCTLOptions.IsCTLFontEnabled();
1831 0 : GetView().GetViewFrame()->GetBindings().SetVisibleState( nWhich, bEnabled );
1832 0 : if(!bEnabled)
1833 0 : rSet.DisableItem(nWhich);
1834 : }
1835 0 : break;
1836 : }
1837 14523 : nWhich = aIter.NextWhich();
1838 11766 : }
1839 12036 : }
1840 :
1841 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|