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