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 <hintids.hxx>
21 :
22 : #include <com/sun/star/i18n/TransliterationModules.hpp>
23 : #include <com/sun/star/i18n/TransliterationModulesExtra.hpp>
24 : #include <com/sun/star/i18n/TextConversionOption.hpp>
25 : #include <com/sun/star/ui/dialogs/XSLTFilterDialog.hpp>
26 : #include <com/sun/star/lang/XInitialization.hpp>
27 :
28 : #include <i18nlangtag/mslangid.hxx>
29 : #include <sfx2/objface.hxx>
30 : #include <sfx2/viewfrm.hxx>
31 : #include <sfx2/bindings.hxx>
32 : #include <sfx2/dispatch.hxx>
33 : #include <sfx2/request.hxx>
34 : #include <editeng/spltitem.hxx>
35 : #include <editeng/lrspitem.hxx>
36 : #include <editeng/ulspitem.hxx>
37 : #include <editeng/orphitem.hxx>
38 : #include <editeng/formatbreakitem.hxx>
39 : #include <editeng/widwitem.hxx>
40 : #include <editeng/kernitem.hxx>
41 : #include <editeng/escapementitem.hxx>
42 : #include <editeng/lspcitem.hxx>
43 : #include <editeng/adjustitem.hxx>
44 : #include <editeng/crossedoutitem.hxx>
45 : #include <editeng/shdditem.hxx>
46 : #include <editeng/hyphenzoneitem.hxx>
47 : #include <editeng/udlnitem.hxx>
48 : #include <editeng/fontitem.hxx>
49 : #include <editeng/fhgtitem.hxx>
50 : #include <svx/clipfmtitem.hxx>
51 : #include <svl/stritem.hxx>
52 : #include <svl/slstitm.hxx>
53 : #include <editeng/colritem.hxx>
54 : #include <editeng/wghtitem.hxx>
55 : #include <editeng/contouritem.hxx>
56 : #include <editeng/postitem.hxx>
57 : #include <editeng/frmdiritem.hxx>
58 : #include <svx/svdoutl.hxx>
59 : #include <svl/whiter.hxx>
60 : #include <svl/cjkoptions.hxx>
61 : #include <svl/ctloptions.hxx>
62 : #include <unotools/useroptions.hxx>
63 : #include <vcl/msgbox.hxx>
64 : #include <editeng/flditem.hxx>
65 : #include <editeng/editstat.hxx>
66 : #include <svx/hlnkitem.hxx>
67 : #include <sfx2/htmlmode.hxx>
68 : #include <editeng/langitem.hxx>
69 : #include <editeng/unolingu.hxx>
70 : #include <editeng/scripttypeitem.hxx>
71 : #include <editeng/writingmodeitem.hxx>
72 : #include <swundo.hxx>
73 : #include <doc.hxx>
74 : #include <viewopt.hxx>
75 : #include <wrtsh.hxx>
76 : #include <uitool.hxx>
77 : #include <popup.hrc>
78 : #include <chrdlgmodes.hxx>
79 : #include <pardlg.hxx>
80 : #include <swdtflvr.hxx>
81 : #include <drwtxtsh.hxx>
82 : #include <swmodule.hxx>
83 : #include <initui.hxx>
84 : #include <edtwin.hxx>
85 : #include <swwait.hxx>
86 : #include <docstat.hxx>
87 :
88 : #include <cmdid.h>
89 : #include <globals.hrc>
90 : #include <shells.hrc>
91 : #include <breakit.hxx>
92 : #include "annotsh.hxx"
93 : #include "view.hxx"
94 : #include <PostItMgr.hxx>
95 : #include <SidebarWin.hxx>
96 :
97 : #include "swtypes.hxx"
98 :
99 : #include <svx/svxdlg.hxx>
100 : #include <svx/dialogs.hrc>
101 :
102 : #include <svx/svxids.hrc>
103 : #include <sfx2/sidebar/EnumContext.hxx>
104 : #include <svl/itempool.hxx>
105 : #include <editeng/outliner.hxx>
106 : #include <editeng/editeng.hxx>
107 : #include <editeng/editview.hxx>
108 :
109 : #include <svl/languageoptions.hxx>
110 : #include <svtools/langtab.hxx>
111 :
112 : #include <docsh.hxx>
113 : #include <svl/undo.hxx>
114 : #include "swabstdlg.hxx"
115 : #include "chrdlg.hrc"
116 : #include "misc.hrc"
117 : #include <app.hrc>
118 :
119 : #include <comphelper/string.hxx>
120 : #include <cppuhelper/bootstrap.hxx>
121 :
122 : #include <langhelper.hxx>
123 :
124 : #include <tools/diagnose_ex.h>
125 : #include <boost/scoped_ptr.hpp>
126 :
127 : using namespace ::com::sun::star;
128 : using namespace ::com::sun::star::uno;
129 : using namespace ::com::sun::star::beans;
130 : using namespace ::com::sun::star::i18n;
131 :
132 : #define SwAnnotationShell
133 :
134 : #include <sfx2/msg.hxx>
135 : #include <swslots.hxx>
136 :
137 236 : SFX_IMPL_INTERFACE(SwAnnotationShell, SfxShell)
138 :
139 59 : void SwAnnotationShell::InitInterface_Impl()
140 : {
141 59 : GetStaticInterface()->RegisterObjectBar(SFX_OBJECTBAR_OBJECT, RID_TEXT_TOOLBOX);
142 :
143 59 : GetStaticInterface()->RegisterPopupMenu(SW_RES(MN_ANNOTATION_POPUPMENU));
144 59 : }
145 :
146 2514 : TYPEINIT1(SwAnnotationShell,SfxShell)
147 :
148 0 : SfxItemPool* SwAnnotationShell::GetAnnotationPool(SwView& rV)
149 : {
150 0 : SwWrtShell &rSh = rV.GetWrtShell();
151 0 : return rSh.GetAttrPool().GetSecondaryPool();
152 : }
153 :
154 0 : SwAnnotationShell::SwAnnotationShell( SwView& r )
155 0 : : rView(r)
156 : {
157 0 : SetPool(SwAnnotationShell::GetAnnotationPool(rView));
158 0 : SfxShell::SetContextName(sfx2::sidebar::EnumContext::GetContextName(sfx2::sidebar::EnumContext::Context_Annotation));
159 0 : }
160 :
161 0 : SwAnnotationShell::~SwAnnotationShell()
162 : {
163 0 : }
164 :
165 0 : ::svl::IUndoManager* SwAnnotationShell::GetUndoManager()
166 : {
167 0 : SwPostItMgr* pPostItMgr = rView.GetPostItMgr();
168 0 : if ( !pPostItMgr ||
169 0 : !pPostItMgr->HasActiveSidebarWin() )
170 : {
171 : OSL_ENSURE(pPostItMgr,"PostItMgr::Layout(): We are looping forever");
172 0 : return 0;
173 : }
174 0 : return &pPostItMgr->GetActiveSidebarWin()->GetOutlinerView()->GetOutliner()->GetUndoManager();
175 : }
176 :
177 0 : void SwAnnotationShell::Exec( SfxRequest &rReq )
178 : {
179 : //TODO: clean this up!!!!
180 0 : SwPostItMgr* pPostItMgr = rView.GetPostItMgr();
181 0 : if ( !pPostItMgr || !pPostItMgr->HasActiveSidebarWin() )
182 0 : return;
183 :
184 0 : OutlinerView* pOLV = pPostItMgr->GetActiveSidebarWin()->GetOutlinerView();
185 0 : SfxItemSet aEditAttr(pOLV->GetAttribs());
186 0 : SfxItemSet aNewAttr(*aEditAttr.GetPool(), aEditAttr.GetRanges());
187 :
188 0 : sal_uInt16 nSlot = rReq.GetSlot();
189 0 : sal_uInt16 nWhich = GetPool().GetWhich(nSlot);
190 0 : const SfxItemSet *pNewAttrs = rReq.GetArgs();
191 0 : sal_uInt16 nEEWhich = 0;
192 0 : switch (nSlot)
193 : {
194 : case SID_PARASPACE_INCREASE:
195 : case SID_PARASPACE_DECREASE:
196 : {
197 : SvxULSpaceItem aULSpace(
198 0 : static_cast< const SvxULSpaceItem& >( aEditAttr.Get( EE_PARA_ULSPACE ) ) );
199 0 : sal_uInt16 nUpper = aULSpace.GetUpper();
200 0 : sal_uInt16 nLower = aULSpace.GetLower();
201 :
202 0 : if ( nSlot == SID_PARASPACE_INCREASE )
203 : {
204 0 : nUpper = std::min< sal_uInt16 >( nUpper + 57, 5670 );
205 0 : nLower = std::min< sal_uInt16 >( nLower + 57, 5670 );
206 : }
207 : else
208 : {
209 0 : nUpper = std::max< sal_Int16 >( nUpper - 57, 0 );
210 0 : nLower = std::max< sal_Int16 >( nLower - 57, 0 );
211 : }
212 :
213 0 : aULSpace.SetUpper( nUpper );
214 0 : aULSpace.SetLower( nLower );
215 0 : aNewAttr.Put( aULSpace );
216 0 : rReq.Done();
217 : }
218 0 : break;
219 : case SID_ATTR_PARA_LRSPACE:
220 : {
221 : SvxLRSpaceItem aParaMargin(static_cast<const SvxLRSpaceItem&>(rReq.
222 0 : GetArgs()->Get(nSlot)));
223 0 : aParaMargin.SetWhich( EE_PARA_LRSPACE );
224 :
225 0 : aNewAttr.Put(aParaMargin);
226 0 : rReq.Done();
227 0 : break;
228 : }
229 : case SID_ATTR_PARA_LINESPACE:
230 : {
231 : SvxLineSpacingItem aParaMargin = static_cast<const SvxLineSpacingItem&>(pNewAttrs->Get(
232 0 : GetPool().GetWhich(nSlot)));
233 0 : aParaMargin.SetWhich( EE_PARA_SBL );
234 :
235 0 : aNewAttr.Put(aParaMargin);
236 0 : rReq.Done();
237 0 : break;
238 : }
239 : case SID_ATTR_PARA_ULSPACE:
240 : {
241 : SvxULSpaceItem aULSpace = static_cast<const SvxULSpaceItem&>(pNewAttrs->Get(
242 0 : GetPool().GetWhich(nSlot)));
243 0 : aULSpace.SetWhich( EE_PARA_ULSPACE );
244 0 : aNewAttr.Put( aULSpace );
245 0 : rReq.Done();
246 : }
247 0 : break;
248 : case SID_ATTR_CHAR_FONT:
249 : case SID_ATTR_CHAR_FONTHEIGHT:
250 : case SID_ATTR_CHAR_WEIGHT:
251 : case SID_ATTR_CHAR_POSTURE:
252 : {
253 0 : SfxItemPool* pSecondPool = aEditAttr.GetPool()->GetSecondaryPool();
254 0 : if( !pSecondPool )
255 0 : pSecondPool = aEditAttr.GetPool();
256 0 : SvxScriptSetItem aSetItem( nSlot, *pSecondPool );
257 0 : aSetItem.PutItemForScriptType( pOLV->GetSelectedScriptType(), pNewAttrs->Get( nWhich ));
258 0 : aNewAttr.Put( aSetItem.GetItemSet() );
259 0 : rReq.Done();
260 0 : break;
261 : }
262 0 : case SID_ATTR_CHAR_COLOR: nEEWhich = EE_CHAR_COLOR; break;
263 : case SID_ATTR_CHAR_UNDERLINE:
264 : {
265 0 : if( rReq.GetArgs() )
266 : {
267 0 : SFX_REQUEST_ARG( rReq, pItem, SvxUnderlineItem, SID_ATTR_CHAR_UNDERLINE , false );
268 0 : if (pItem)
269 : {
270 0 : aNewAttr.Put(*pItem);
271 : }
272 : else
273 : {
274 0 : FontUnderline eFU = static_cast<const SvxUnderlineItem&>( aEditAttr.Get( EE_CHAR_UNDERLINE ) ).GetLineStyle();
275 0 : aNewAttr.Put( SvxUnderlineItem( eFU != UNDERLINE_NONE ?UNDERLINE_NONE : UNDERLINE_SINGLE, EE_CHAR_UNDERLINE ) );
276 : }
277 : }
278 0 : break;
279 : }
280 : case SID_ATTR_CHAR_OVERLINE:
281 : {
282 0 : FontUnderline eFO = static_cast<const SvxOverlineItem&>(aEditAttr.Get(EE_CHAR_OVERLINE)).GetLineStyle();
283 0 : aNewAttr.Put(SvxOverlineItem(eFO == UNDERLINE_SINGLE ? UNDERLINE_NONE : UNDERLINE_SINGLE, EE_CHAR_OVERLINE));
284 0 : break;
285 : }
286 0 : case SID_ATTR_CHAR_CONTOUR: nEEWhich = EE_CHAR_OUTLINE; break;
287 0 : case SID_ATTR_CHAR_SHADOWED: nEEWhich = EE_CHAR_SHADOW; break;
288 0 : case SID_ATTR_CHAR_STRIKEOUT: nEEWhich = EE_CHAR_STRIKEOUT; break;
289 0 : case SID_ATTR_CHAR_WORDLINEMODE: nEEWhich = EE_CHAR_WLM; break;
290 0 : case SID_ATTR_CHAR_RELIEF : nEEWhich = EE_CHAR_RELIEF; break;
291 0 : case SID_ATTR_CHAR_LANGUAGE : nEEWhich = EE_CHAR_LANGUAGE;break;
292 0 : case SID_ATTR_CHAR_KERNING : nEEWhich = EE_CHAR_KERNING; break;
293 0 : case SID_ATTR_CHAR_SCALEWIDTH: nEEWhich = EE_CHAR_FONTWIDTH; break;
294 0 : case SID_ATTR_CHAR_AUTOKERN : nEEWhich = EE_CHAR_PAIRKERNING; break;
295 0 : case SID_ATTR_CHAR_ESCAPEMENT: nEEWhich = EE_CHAR_ESCAPEMENT; break;
296 : case SID_ATTR_PARA_ADJUST_LEFT:
297 0 : aNewAttr.Put(SvxAdjustItem(SVX_ADJUST_LEFT, EE_PARA_JUST));
298 0 : break;
299 : case SID_ATTR_PARA_ADJUST_CENTER:
300 0 : aNewAttr.Put(SvxAdjustItem(SVX_ADJUST_CENTER, EE_PARA_JUST));
301 0 : break;
302 : case SID_ATTR_PARA_ADJUST_RIGHT:
303 0 : aNewAttr.Put(SvxAdjustItem(SVX_ADJUST_RIGHT, EE_PARA_JUST));
304 0 : break;
305 : case SID_ATTR_PARA_ADJUST_BLOCK:
306 0 : aNewAttr.Put(SvxAdjustItem(SVX_ADJUST_BLOCK, EE_PARA_JUST));
307 0 : break;
308 :
309 : case SID_ATTR_PARA_LINESPACE_10:
310 : {
311 0 : SvxLineSpacingItem aItem(SVX_LINESPACE_ONE_LINE, EE_PARA_SBL);
312 0 : aItem.SetPropLineSpace(100);
313 0 : aNewAttr.Put(aItem);
314 : }
315 0 : break;
316 : case SID_ATTR_PARA_LINESPACE_15:
317 : {
318 0 : SvxLineSpacingItem aItem(SVX_LINESPACE_ONE_POINT_FIVE_LINES, EE_PARA_SBL);
319 0 : aItem.SetPropLineSpace(150);
320 0 : aNewAttr.Put(aItem);
321 : }
322 0 : break;
323 : case SID_ATTR_PARA_LINESPACE_20:
324 : {
325 0 : SvxLineSpacingItem aItem(SVX_LINESPACE_TWO_LINES, EE_PARA_SBL);
326 0 : aItem.SetPropLineSpace(200);
327 0 : aNewAttr.Put(aItem);
328 : }
329 0 : break;
330 : case SID_SELECTALL:
331 : {
332 0 : Outliner * pOutliner = pOLV->GetOutliner();
333 0 : if(pOutliner)
334 : {
335 0 : sal_Int32 nParaCount = pOutliner->GetParagraphCount();
336 0 : if (nParaCount > 0)
337 0 : pOLV->SelectRange(0L, nParaCount );
338 : }
339 0 : break;
340 : }
341 : case FN_FORMAT_RESET:
342 : {
343 0 : pPostItMgr->GetActiveSidebarWin()->ResetAttributes();
344 0 : rReq.Done();
345 0 : break;
346 : }
347 : case FN_SET_SUPER_SCRIPT:
348 : {
349 0 : SvxEscapementItem aItem(EE_CHAR_ESCAPEMENT);
350 : SvxEscapement eEsc = (SvxEscapement ) static_cast<const SvxEscapementItem&>(
351 0 : aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue();
352 :
353 0 : if( eEsc == SVX_ESCAPEMENT_SUPERSCRIPT )
354 0 : aItem.SetEscapement( SVX_ESCAPEMENT_OFF );
355 : else
356 0 : aItem.SetEscapement( SVX_ESCAPEMENT_SUPERSCRIPT );
357 0 : aNewAttr.Put( aItem, EE_CHAR_ESCAPEMENT );
358 : }
359 0 : break;
360 : case FN_SET_SUB_SCRIPT:
361 : {
362 0 : SvxEscapementItem aItem(EE_CHAR_ESCAPEMENT);
363 : SvxEscapement eEsc = (SvxEscapement ) static_cast<const SvxEscapementItem&>(
364 0 : aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue();
365 :
366 0 : if( eEsc == SVX_ESCAPEMENT_SUBSCRIPT )
367 0 : aItem.SetEscapement( SVX_ESCAPEMENT_OFF );
368 : else
369 0 : aItem.SetEscapement( SVX_ESCAPEMENT_SUBSCRIPT );
370 0 : aNewAttr.Put( aItem, EE_CHAR_ESCAPEMENT );
371 : }
372 0 : break;
373 : case SID_HYPERLINK_SETLINK:
374 : {
375 0 : const SfxPoolItem* pItem = 0;
376 0 : if(pNewAttrs)
377 0 : pNewAttrs->GetItemState(nSlot, false, &pItem);
378 :
379 0 : if(pItem)
380 : {
381 0 : const SvxHyperlinkItem& rHLinkItem = *static_cast<const SvxHyperlinkItem *>(pItem);
382 0 : SvxURLField aField(rHLinkItem.GetURL(), rHLinkItem.GetName(), SVXURLFORMAT_APPDEFAULT);
383 0 : aField.SetTargetFrame(rHLinkItem.GetTargetFrame());
384 :
385 0 : const SvxFieldItem* pFieldItem = pOLV->GetFieldAtSelection();
386 :
387 0 : if (pFieldItem && pFieldItem->GetField()->ISA(SvxURLField))
388 : {
389 : // Select the field so that it will be deleted during insert
390 0 : ESelection aSel = pOLV->GetSelection();
391 0 : aSel.nEndPos++;
392 0 : pOLV->SetSelection(aSel);
393 : }
394 0 : if (pPostItMgr->GetActiveSidebarWin()->GetLayoutStatus()!=SwPostItHelper::DELETED)
395 0 : pOLV->InsertField(SvxFieldItem(aField, EE_FEATURE_FIELD));
396 : }
397 0 : break;
398 : }
399 : case FN_INSERT_SOFT_HYPHEN:
400 : case FN_INSERT_HARDHYPHEN:
401 : case FN_INSERT_HARD_SPACE:
402 : case SID_INSERT_RLM :
403 : case SID_INSERT_LRM :
404 : case SID_INSERT_ZWNBSP :
405 : case SID_INSERT_ZWSP:
406 : {
407 0 : sal_Unicode cIns = 0;
408 0 : switch(rReq.GetSlot())
409 : {
410 0 : case FN_INSERT_SOFT_HYPHEN: cIns = CHAR_SOFTHYPHEN; break;
411 0 : case FN_INSERT_HARDHYPHEN: cIns = CHAR_HARDHYPHEN; break;
412 0 : case FN_INSERT_HARD_SPACE: cIns = CHAR_HARDBLANK; break;
413 0 : case SID_INSERT_RLM : cIns = CHAR_RLM ; break;
414 0 : case SID_INSERT_LRM : cIns = CHAR_LRM ; break;
415 0 : case SID_INSERT_ZWSP : cIns = CHAR_ZWSP ; break;
416 0 : case SID_INSERT_ZWNBSP: cIns = CHAR_ZWNBSP; break;
417 : }
418 0 : pOLV->InsertText( OUString(cIns));
419 0 : rReq.Done();
420 0 : break;
421 : }
422 : case SID_CHARMAP:
423 : {
424 0 : if (pPostItMgr->GetActiveSidebarWin()->GetLayoutStatus()!=SwPostItHelper::DELETED)
425 0 : InsertSymbol(rReq);
426 0 : break;
427 : }
428 : case FN_INSERT_STRING:
429 : {
430 0 : const SfxPoolItem* pItem = 0;
431 0 : if (pNewAttrs)
432 0 : pNewAttrs->GetItemState(nSlot, false, &pItem );
433 0 : if (pPostItMgr->GetActiveSidebarWin()->GetLayoutStatus()!=SwPostItHelper::DELETED)
434 0 : pOLV->InsertText(static_cast<const SfxStringItem *>(pItem)->GetValue());
435 0 : break;
436 : }
437 : case FN_FORMAT_FOOTNOTE_DLG:
438 : {
439 0 : rView.ExecFormatFootnote();
440 0 : break;
441 : }
442 : case FN_NUMBERING_OUTLINE_DLG:
443 : {
444 0 : rView.ExecNumberingOutline(GetPool());
445 0 : rReq.Done();
446 : }
447 0 : break;
448 : case SID_OPEN_XML_FILTERSETTINGS:
449 : {
450 0 : HandleOpenXmlFilterSettings(rReq);
451 : }
452 0 : break;
453 : case FN_WORDCOUNT_DIALOG:
454 : {
455 0 : rView.UpdateWordCount(this, nSlot);
456 0 : break;
457 : }
458 : case SID_CHAR_DLG_EFFECT:
459 : case SID_CHAR_DLG:
460 : {
461 0 : const SfxItemSet* pArgs = rReq.GetArgs();
462 0 : SFX_REQUEST_ARG(rReq, pItem, SfxStringItem, FN_PARAM_1, false);
463 :
464 0 : if( !pArgs || pItem )
465 : {
466 : /* mod
467 : SwView* pView = &GetView();
468 : FieldUnit eMetric = ::GetDfltMetric(0 != PTR_CAST(SwWebView, pView));
469 : SW_MOD()->PutItem(SfxUInt16Item(SID_ATTR_METRIC, eMetric));
470 : */
471 0 : SfxItemSet aDlgAttr(GetPool(), EE_ITEMS_START, EE_ITEMS_END);
472 :
473 : // util::Language does not exist in the EditEngine! Therefore not included in the set.
474 :
475 0 : aDlgAttr.Put( aEditAttr );
476 0 : aDlgAttr.Put( SvxKerningItem(0, RES_CHRATR_KERNING) );
477 :
478 0 : SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
479 : OSL_ENSURE(pFact, "SwAbstractDialogFactory fail!");
480 :
481 0 : boost::scoped_ptr<SfxAbstractTabDialog> pDlg(pFact->CreateSwCharDlg( rView.GetWindow(), rView, aDlgAttr, DLG_CHAR_ANN));
482 : OSL_ENSURE(pDlg, "Dialog creation failed!");
483 0 : if (nSlot == SID_CHAR_DLG_EFFECT)
484 : {
485 0 : pDlg->SetCurPageId("fonteffects");
486 : }
487 0 : else if (pItem)
488 : {
489 0 : pDlg->SetCurPageId(OUStringToOString(pItem->GetValue(), RTL_TEXTENCODING_UTF8));
490 : }
491 :
492 0 : sal_uInt16 nRet = pDlg->Execute();
493 0 : if(RET_OK == nRet )
494 : {
495 0 : rReq.Done( *( pDlg->GetOutputItemSet() ) );
496 0 : aNewAttr.Put(*pDlg->GetOutputItemSet());
497 : }
498 0 : if(RET_OK != nRet)
499 0 : return ;
500 : }
501 : else
502 0 : aNewAttr.Put(*pArgs);
503 0 : break;
504 : }
505 : case SID_PARA_DLG:
506 : {
507 0 : const SfxItemSet* pArgs = rReq.GetArgs();
508 :
509 0 : if (!pArgs)
510 : {
511 : /* mod todo ???
512 : SwView* pView = &GetView();
513 : FieldUnit eMetric = ::GetDfltMetric(0 != PTR_CAST(SwWebView, pView));
514 : SW_MOD()->PutItem(SfxUInt16Item(SID_ATTR_METRIC, eMetric));
515 : */
516 0 : SfxItemSet aDlgAttr(GetPool(),
517 : EE_ITEMS_START, EE_ITEMS_END,
518 : SID_ATTR_PARA_HYPHENZONE, SID_ATTR_PARA_HYPHENZONE,
519 : SID_ATTR_PARA_SPLIT, SID_ATTR_PARA_SPLIT,
520 : SID_ATTR_PARA_WIDOWS, SID_ATTR_PARA_WIDOWS,
521 : SID_ATTR_PARA_ORPHANS, SID_ATTR_PARA_ORPHANS,
522 0 : 0);
523 :
524 0 : aDlgAttr.Put(aEditAttr);
525 :
526 0 : aDlgAttr.Put( SvxHyphenZoneItem( false, RES_PARATR_HYPHENZONE) );
527 0 : aDlgAttr.Put( SvxFormatBreakItem( SVX_BREAK_NONE, RES_BREAK ) );
528 0 : aDlgAttr.Put( SvxFormatSplitItem( true, RES_PARATR_SPLIT ) );
529 0 : aDlgAttr.Put( SvxWidowsItem( 0, RES_PARATR_WIDOWS ) );
530 0 : aDlgAttr.Put( SvxOrphansItem( 0, RES_PARATR_ORPHANS ) );
531 :
532 0 : SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
533 : OSL_ENSURE(pFact, "SwAbstractDialogFactory fail!");
534 :
535 0 : boost::scoped_ptr<SfxAbstractTabDialog> pDlg(pFact->CreateSwParaDlg( rView.GetWindow(), rView, aDlgAttr,DLG_STD, 0, true ));
536 : OSL_ENSURE(pDlg, "Dialog creation failed!");
537 0 : sal_uInt16 nRet = pDlg->Execute();
538 0 : if(RET_OK == nRet)
539 : {
540 0 : rReq.Done( *( pDlg->GetOutputItemSet() ) );
541 0 : aNewAttr.Put(*pDlg->GetOutputItemSet());
542 : }
543 0 : if(RET_OK != nRet)
544 0 : return;
545 : }
546 : else
547 0 : aNewAttr.Put(*pArgs);
548 0 : break;
549 : }
550 :
551 : case SID_AUTOSPELL_CHECK:
552 : {
553 0 : rView.ExecuteSlot(rReq);
554 0 : break;
555 : }
556 : case SID_ATTR_PARA_LEFT_TO_RIGHT:
557 : case SID_ATTR_PARA_RIGHT_TO_LEFT:
558 : {
559 0 : bool bLeftToRight = nSlot == SID_ATTR_PARA_LEFT_TO_RIGHT;
560 :
561 : const SfxPoolItem* pPoolItem;
562 0 : if( pNewAttrs && SfxItemState::SET == pNewAttrs->GetItemState( nSlot, true, &pPoolItem ) )
563 : {
564 0 : if( !static_cast<const SfxBoolItem*>(pPoolItem)->GetValue() )
565 0 : bLeftToRight = !bLeftToRight;
566 : }
567 0 : SfxItemSet aAttr( *aNewAttr.GetPool(),
568 : EE_PARA_JUST, EE_PARA_JUST,
569 : EE_PARA_WRITINGDIR, EE_PARA_WRITINGDIR,
570 0 : 0 );
571 :
572 0 : sal_uInt16 nAdjust = SVX_ADJUST_LEFT;
573 0 : if( SfxItemState::SET == aEditAttr.GetItemState(EE_PARA_JUST, true, &pPoolItem ) )
574 0 : nAdjust = static_cast<const SvxAdjustItem*>(pPoolItem)->GetEnumValue();
575 :
576 0 : if( bLeftToRight )
577 : {
578 0 : aAttr.Put( SvxFrameDirectionItem( FRMDIR_HORI_LEFT_TOP, EE_PARA_WRITINGDIR ) );
579 0 : if( nAdjust == SVX_ADJUST_RIGHT )
580 0 : aAttr.Put( SvxAdjustItem( SVX_ADJUST_LEFT, EE_PARA_JUST ) );
581 : }
582 : else
583 : {
584 0 : aAttr.Put( SvxFrameDirectionItem( FRMDIR_HORI_RIGHT_TOP, EE_PARA_WRITINGDIR ) );
585 0 : if( nAdjust == SVX_ADJUST_LEFT )
586 0 : aAttr.Put( SvxAdjustItem( SVX_ADJUST_RIGHT, EE_PARA_JUST ) );
587 : }
588 0 : pOLV->SetAttribs(aAttr);
589 0 : break;
590 : }
591 : }
592 :
593 0 : if(nEEWhich && pNewAttrs)
594 0 : aNewAttr.Put(pNewAttrs->Get(nWhich), nEEWhich);
595 :
596 0 : Rectangle aNullRect;
597 0 : Rectangle aOutRect = pOLV->GetOutputArea();
598 0 : if (aNullRect != aOutRect)
599 0 : pOLV->SetAttribs(aNewAttr);
600 :
601 0 : rView.GetViewFrame()->GetBindings().InvalidateAll(false);
602 0 : if ( pOLV->GetOutliner()->IsModified() )
603 0 : rView.GetWrtShell().SetModified();
604 :
605 : }
606 :
607 0 : void SwAnnotationShell::GetState(SfxItemSet& rSet)
608 : {
609 : //TODO: clean this up!!!
610 : // FN_SET_SUPER_SCRIPT
611 : //SID_ATTR_PARA_ADJUST
612 : //SID_ATTR_PARA_ADJUST_BLOCK
613 :
614 0 : SwPostItMgr* pPostItMgr = rView.GetPostItMgr();
615 0 : if ( !pPostItMgr || !pPostItMgr->HasActiveSidebarWin() )
616 0 : return;
617 :
618 0 : OutlinerView* pOLV = pPostItMgr->GetActiveSidebarWin()->GetOutlinerView();
619 0 : SfxItemSet aEditAttr(pOLV->GetAttribs());
620 :
621 0 : SfxWhichIter aIter(rSet);
622 0 : sal_uInt16 nWhich = aIter.FirstWhich();
623 0 : while(nWhich)
624 : {
625 0 : sal_uInt16 nEEWhich = 0;
626 0 : sal_uInt16 nSlotId = GetPool().GetSlotId( nWhich );
627 0 : switch( nSlotId )
628 : {
629 : case SID_ATTR_PARA_LRSPACE:
630 : {
631 0 : SfxItemState eState = aEditAttr.GetItemState( EE_PARA_LRSPACE );
632 0 : if( eState >= SfxItemState::DEFAULT )
633 : {
634 0 : SvxLRSpaceItem aLR = static_cast<const SvxLRSpaceItem&>( aEditAttr.Get( EE_PARA_LRSPACE ) );
635 0 : aLR.SetWhich(SID_ATTR_PARA_LRSPACE);
636 0 : rSet.Put(aLR);
637 : }
638 : else
639 0 : rSet.InvalidateItem(nSlotId);
640 : }
641 0 : break;
642 : case SID_ATTR_PARA_LINESPACE:
643 : {
644 0 : SfxItemState eState = aEditAttr.GetItemState( EE_PARA_SBL );
645 0 : if( eState >= SfxItemState::DEFAULT )
646 : {
647 0 : SvxLineSpacingItem aLR = static_cast<const SvxLineSpacingItem&>( aEditAttr.Get( EE_PARA_SBL ) );
648 0 : rSet.Put(aLR);
649 : }
650 : else
651 0 : rSet.InvalidateItem(nSlotId);
652 : }
653 0 : break;
654 : case SID_ATTR_PARA_ULSPACE:
655 : case SID_PARASPACE_INCREASE:
656 : case SID_PARASPACE_DECREASE:
657 : {
658 0 : SfxItemState eState = aEditAttr.GetItemState( EE_PARA_ULSPACE );
659 0 : if( eState >= SfxItemState::DEFAULT )
660 : {
661 0 : SvxULSpaceItem aULSpace = static_cast<const SvxULSpaceItem&>( aEditAttr.Get( EE_PARA_ULSPACE ) );
662 0 : if ( !aULSpace.GetUpper() && !aULSpace.GetLower() )
663 0 : rSet.DisableItem( SID_PARASPACE_DECREASE );
664 0 : else if ( aULSpace.GetUpper() >= 5670 && aULSpace.GetLower() >= 5670 )
665 0 : rSet.DisableItem( SID_PARASPACE_INCREASE );
666 0 : if ( nSlotId == SID_ATTR_PARA_ULSPACE )
667 : {
668 0 : aULSpace.SetWhich(SID_ATTR_PARA_ULSPACE);
669 0 : rSet.Put(aULSpace);
670 0 : }
671 : }
672 : else
673 : {
674 0 : rSet.DisableItem( SID_PARASPACE_INCREASE );
675 0 : rSet.DisableItem( SID_PARASPACE_DECREASE );
676 0 : rSet.InvalidateItem( SID_ATTR_PARA_ULSPACE );
677 : }
678 : }
679 0 : break;
680 : case SID_ATTR_CHAR_FONT:
681 : case SID_ATTR_CHAR_FONTHEIGHT:
682 : case SID_ATTR_CHAR_WEIGHT:
683 : case SID_ATTR_CHAR_POSTURE:
684 : {
685 0 : SvtScriptType nScriptType = pOLV->GetSelectedScriptType();
686 0 : SfxItemPool* pSecondPool = aEditAttr.GetPool()->GetSecondaryPool();
687 0 : if( !pSecondPool )
688 0 : pSecondPool = aEditAttr.GetPool();
689 0 : SvxScriptSetItem aSetItem( nSlotId, *pSecondPool );
690 0 : aSetItem.GetItemSet().Put( aEditAttr, false );
691 0 : const SfxPoolItem* pI = aSetItem.GetItemOfScript( nScriptType );
692 0 : if( pI )
693 0 : rSet.Put( *pI, nWhich );
694 : else
695 0 : rSet.InvalidateItem( nWhich );
696 : }
697 0 : break;
698 0 : case SID_ATTR_CHAR_COLOR: nEEWhich = EE_CHAR_COLOR; break;
699 0 : case SID_ATTR_CHAR_UNDERLINE: nEEWhich = EE_CHAR_UNDERLINE;break;
700 0 : case SID_ATTR_CHAR_OVERLINE: nEEWhich = EE_CHAR_OVERLINE;break;
701 0 : case SID_ATTR_CHAR_CONTOUR: nEEWhich = EE_CHAR_OUTLINE; break;
702 0 : case SID_ATTR_CHAR_SHADOWED: nEEWhich = EE_CHAR_SHADOW;break;
703 0 : case SID_ATTR_CHAR_STRIKEOUT: nEEWhich = EE_CHAR_STRIKEOUT;break;
704 0 : case SID_ATTR_CHAR_LANGUAGE : nEEWhich = EE_CHAR_LANGUAGE;break;
705 0 : case SID_ATTR_CHAR_ESCAPEMENT: nEEWhich = EE_CHAR_ESCAPEMENT;break;
706 0 : case SID_ATTR_CHAR_KERNING: nEEWhich = EE_CHAR_KERNING;break;
707 : case FN_SET_SUPER_SCRIPT:
708 : case FN_SET_SUB_SCRIPT:
709 : {
710 0 : sal_uInt16 nEsc = 0;
711 0 : const SfxPoolItem *pEscItem = 0;
712 0 : if (nWhich==FN_SET_SUPER_SCRIPT)
713 0 : nEsc = SVX_ESCAPEMENT_SUPERSCRIPT;
714 : else
715 0 : nEsc = SVX_ESCAPEMENT_SUBSCRIPT;
716 :
717 0 : if( !pEscItem )
718 0 : pEscItem = &aEditAttr.Get( EE_CHAR_ESCAPEMENT );
719 :
720 0 : if( nEsc == static_cast<const SvxEscapementItem*>(pEscItem)->GetEnumValue() )
721 0 : rSet.Put( SfxBoolItem( nWhich, true ));
722 : else
723 0 : rSet.InvalidateItem( nWhich );
724 0 : break;
725 : }
726 : case SID_ATTR_PARA_ADJUST_LEFT:
727 : case SID_ATTR_PARA_ADJUST_RIGHT:
728 : case SID_ATTR_PARA_ADJUST_CENTER:
729 : case SID_ATTR_PARA_ADJUST_BLOCK:
730 : {
731 0 : const SfxPoolItem *pAdjust = 0;
732 0 : int eAdjust = 0;
733 :
734 0 : if (nWhich==SID_ATTR_PARA_ADJUST_LEFT)
735 0 : eAdjust = SVX_ADJUST_LEFT;
736 0 : else if (nWhich==SID_ATTR_PARA_ADJUST_RIGHT)
737 0 : eAdjust = SVX_ADJUST_RIGHT;
738 0 : else if (nWhich==SID_ATTR_PARA_ADJUST_CENTER)
739 0 : eAdjust = SVX_ADJUST_CENTER;
740 0 : else if (nWhich==SID_ATTR_PARA_ADJUST_BLOCK)
741 0 : eAdjust = SVX_ADJUST_BLOCK;
742 :
743 0 : if( !pAdjust )
744 0 : aEditAttr.GetItemState( EE_PARA_JUST, false, &pAdjust);
745 :
746 0 : if( !pAdjust || IsInvalidItem( pAdjust ))
747 0 : rSet.InvalidateItem( nSlotId ), nSlotId = 0;
748 : else
749 : {
750 0 : if ( eAdjust == static_cast<const SvxAdjustItem*>(pAdjust)->GetAdjust())
751 0 : rSet.Put( SfxBoolItem( nWhich, true ));
752 : else
753 0 : rSet.InvalidateItem( nWhich );
754 : }
755 0 : break;
756 : }
757 : case SID_ATTR_PARA_LINESPACE_10:
758 : case SID_ATTR_PARA_LINESPACE_15:
759 : case SID_ATTR_PARA_LINESPACE_20:
760 : {
761 0 : const SfxPoolItem *pLSpace = 0;
762 0 : int nLSpace = 0;
763 :
764 0 : if (nWhich==SID_ATTR_PARA_LINESPACE_10)
765 0 : nLSpace = 100;
766 0 : else if (nWhich==SID_ATTR_PARA_LINESPACE_15)
767 0 : nLSpace = 150;
768 0 : else if (nWhich==SID_ATTR_PARA_LINESPACE_20)
769 0 : nLSpace = 200;
770 :
771 0 : if( !pLSpace )
772 0 : aEditAttr.GetItemState( EE_PARA_SBL, false, &pLSpace );
773 :
774 0 : if( !pLSpace || IsInvalidItem( pLSpace ))
775 0 : rSet.InvalidateItem( nSlotId ), nSlotId = 0;
776 : else
777 : {
778 0 : if( nLSpace == static_cast<const SvxLineSpacingItem*>(pLSpace)->GetPropLineSpace() )
779 0 : rSet.Put( SfxBoolItem( nWhich, true ));
780 : else
781 0 : rSet.InvalidateItem( nWhich );
782 : }
783 0 : break;
784 : }
785 : case SID_AUTOSPELL_CHECK:
786 : {
787 0 : const SfxPoolItem* pState = rView.GetSlotState(nWhich);
788 0 : if (pState)
789 0 : rSet.Put(SfxBoolItem(nWhich, static_cast<const SfxBoolItem*>(pState)->GetValue()));
790 : else
791 0 : rSet.DisableItem( nWhich );
792 0 : break;
793 : }
794 : case SID_ATTR_PARA_LEFT_TO_RIGHT:
795 : case SID_ATTR_PARA_RIGHT_TO_LEFT:
796 : {
797 0 : if ( !SvtLanguageOptions().IsCTLFontEnabled() )
798 0 : rSet.DisableItem( nWhich );
799 : else
800 : {
801 0 : if(pOLV->GetOutliner() && pOLV->GetOutliner()->IsVertical())
802 0 : rSet.DisableItem( nWhich );
803 : else
804 : {
805 0 : bool bFlag = false;
806 0 : switch( static_cast<const SvxFrameDirectionItem&>( aEditAttr.Get( EE_PARA_WRITINGDIR ) ).GetValue() )
807 : {
808 : case FRMDIR_HORI_LEFT_TOP:
809 : {
810 0 : bFlag = nWhich == SID_ATTR_PARA_LEFT_TO_RIGHT;
811 0 : rSet.Put( SfxBoolItem( nWhich, bFlag ));
812 0 : break;
813 : }
814 : case FRMDIR_HORI_RIGHT_TOP:
815 : {
816 0 : bFlag = nWhich != SID_ATTR_PARA_LEFT_TO_RIGHT;
817 0 : rSet.Put( SfxBoolItem( nWhich, bFlag ));
818 0 : break;
819 : }
820 : }
821 : }
822 : }
823 : }
824 0 : break;
825 : case SID_INSERT_RLM :
826 : case SID_INSERT_LRM :
827 : case SID_INSERT_ZWNBSP :
828 : case SID_INSERT_ZWSP:
829 : {
830 0 : SvtCTLOptions aCTLOptions;
831 0 : bool bEnabled = aCTLOptions.IsCTLFontEnabled();
832 0 : rView.GetViewFrame()->GetBindings().SetVisibleState( nWhich, bEnabled );
833 0 : if(!bEnabled)
834 0 : rSet.DisableItem(nWhich);
835 : }
836 0 : break;
837 : default:
838 0 : rSet.InvalidateItem( nWhich );
839 0 : break;
840 : }
841 :
842 0 : if(nEEWhich)
843 : {
844 0 : rSet.Put(aEditAttr.Get(nEEWhich, true), nWhich);
845 0 : if(nEEWhich == EE_CHAR_KERNING)
846 : {
847 0 : SfxItemState eState = aEditAttr.GetItemState( EE_CHAR_KERNING, true );
848 0 : if ( eState == SfxItemState::DONTCARE )
849 : {
850 0 : rSet.InvalidateItem(EE_CHAR_KERNING);
851 : }
852 : }
853 : }
854 :
855 0 : if (pPostItMgr->GetActiveSidebarWin()->GetLayoutStatus()==SwPostItHelper::DELETED)
856 0 : rSet.DisableItem( nWhich );
857 :
858 0 : nWhich = aIter.NextWhich();
859 0 : }
860 : }
861 :
862 0 : void SwAnnotationShell::ExecSearch(SfxRequest& rReq, bool bNoMessage)
863 : {
864 0 : rView.ExecSearch(rReq,bNoMessage);
865 0 : }
866 :
867 0 : void SwAnnotationShell::StateSearch(SfxItemSet &rSet)
868 : {
869 0 : rView.StateSearch(rSet);
870 0 : }
871 :
872 0 : void SwAnnotationShell::ExecClpbrd(SfxRequest &rReq)
873 : {
874 0 : SwPostItMgr* pPostItMgr = rView.GetPostItMgr();
875 0 : if ( !pPostItMgr || !pPostItMgr->HasActiveSidebarWin() )
876 0 : return;
877 :
878 0 : OutlinerView* pOLV = pPostItMgr->GetActiveSidebarWin()->GetOutlinerView();
879 0 : SfxItemSet aEditAttr(pOLV->GetAttribs());
880 0 : SfxItemSet aNewAttr(*aEditAttr.GetPool(), aEditAttr.GetRanges());
881 :
882 0 : long aOldHeight = pPostItMgr->GetActiveSidebarWin()->GetPostItTextHeight();
883 0 : sal_uInt16 nSlot = rReq.GetSlot();
884 0 : switch (nSlot)
885 : {
886 : case SID_CUT:
887 0 : if ( (pPostItMgr->GetActiveSidebarWin()->GetLayoutStatus()!=SwPostItHelper::DELETED) && pOLV->HasSelection() )
888 0 : pOLV->Cut();
889 0 : break;
890 : case SID_COPY:
891 0 : if( pOLV->HasSelection() )
892 0 : pOLV->Copy();
893 0 : break;
894 : case SID_PASTE:
895 0 : if (pPostItMgr->GetActiveSidebarWin()->GetLayoutStatus()!=SwPostItHelper::DELETED)
896 0 : pOLV->Paste();
897 0 : break;
898 : case SID_PASTE_SPECIAL:
899 : {
900 0 : if (pPostItMgr->GetActiveSidebarWin()->GetLayoutStatus()!=SwPostItHelper::DELETED)
901 : {
902 0 : SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
903 0 : boost::scoped_ptr<SfxAbstractPasteDialog> pDlg(pFact->CreatePasteDialog( &rView.GetEditWin() ));
904 :
905 0 : pDlg->Insert( SotClipboardFormatId::STRING, OUString() );
906 0 : pDlg->Insert( SotClipboardFormatId::RTF, OUString() );
907 :
908 0 : TransferableDataHelper aDataHelper( TransferableDataHelper::CreateFromSystemClipboard( &rView.GetEditWin() ) );
909 :
910 0 : SotClipboardFormatId nFormat = pDlg->GetFormat( aDataHelper.GetTransferable() );
911 :
912 0 : if (nFormat != SotClipboardFormatId::NONE)
913 : {
914 0 : if (nFormat == SotClipboardFormatId::STRING)
915 0 : pOLV->Paste();
916 : else
917 0 : pOLV->PasteSpecial();
918 0 : }
919 : }
920 0 : break;
921 : }
922 : case SID_CLIPBOARD_FORMAT_ITEMS:
923 : {
924 0 : SotClipboardFormatId nFormat = SotClipboardFormatId::NONE;
925 : const SfxPoolItem* pItem;
926 0 : if ( rReq.GetArgs() && rReq.GetArgs()->GetItemState(nSlot, true, &pItem) == SfxItemState::SET &&
927 0 : pItem->ISA(SfxUInt32Item) )
928 : {
929 0 : nFormat = static_cast<SotClipboardFormatId>(static_cast<const SfxUInt32Item*>(pItem)->GetValue());
930 : }
931 :
932 0 : if ( nFormat != SotClipboardFormatId::NONE )
933 : {
934 0 : if (SotClipboardFormatId::STRING == nFormat)
935 0 : pOLV->Paste();
936 : else
937 0 : pOLV->PasteSpecial();
938 : }
939 0 : break;
940 : }
941 : }
942 0 : pPostItMgr->GetActiveSidebarWin()->ResizeIfNecessary(aOldHeight,pPostItMgr->GetActiveSidebarWin()->GetPostItTextHeight());
943 : }
944 :
945 0 : void SwAnnotationShell::StateClpbrd(SfxItemSet &rSet)
946 : {
947 0 : SwPostItMgr* pPostItMgr = rView.GetPostItMgr();
948 0 : if ( !pPostItMgr || !pPostItMgr->HasActiveSidebarWin() )
949 0 : return;
950 0 : OutlinerView* pOLV = pPostItMgr->GetActiveSidebarWin()->GetOutlinerView();
951 :
952 0 : TransferableDataHelper aDataHelper( TransferableDataHelper::CreateFromSystemClipboard( &rView.GetEditWin() ) );
953 0 : bool bPastePossible = ( aDataHelper.HasFormat( SotClipboardFormatId::STRING ) || aDataHelper.HasFormat( SotClipboardFormatId::RTF ) );
954 0 : bPastePossible = bPastePossible && (pPostItMgr->GetActiveSidebarWin()->GetLayoutStatus()!=SwPostItHelper::DELETED);
955 :
956 0 : SfxWhichIter aIter(rSet);
957 0 : sal_uInt16 nWhich = aIter.FirstWhich();
958 :
959 0 : while(nWhich)
960 : {
961 0 : switch(nWhich)
962 : {
963 : case SID_CUT:
964 : {
965 0 : if ( (pPostItMgr->GetActiveSidebarWin()->GetLayoutStatus()==SwPostItHelper::DELETED) || !pOLV->HasSelection() )
966 0 : rSet.DisableItem( nWhich );
967 0 : break;
968 : }
969 : case SID_COPY:
970 : {
971 0 : if( !pOLV->HasSelection() )
972 0 : rSet.DisableItem( nWhich );
973 0 : break;
974 : }
975 : case SID_PASTE:
976 : case SID_PASTE_SPECIAL:
977 : {
978 0 : if( !bPastePossible )
979 0 : rSet.DisableItem( nWhich );
980 0 : break;
981 : }
982 : case SID_CLIPBOARD_FORMAT_ITEMS:
983 : {
984 0 : if ( bPastePossible )
985 : {
986 0 : SvxClipboardFormatItem aFormats( SID_CLIPBOARD_FORMAT_ITEMS );
987 0 : if ( aDataHelper.HasFormat( SotClipboardFormatId::RTF ) )
988 0 : aFormats.AddClipbrdFormat( SotClipboardFormatId::RTF );
989 0 : aFormats.AddClipbrdFormat( SotClipboardFormatId::STRING );
990 0 : rSet.Put( aFormats );
991 : }
992 : else
993 0 : rSet.DisableItem( nWhich );
994 0 : break;
995 : }
996 : }
997 0 : nWhich = aIter.NextWhich();
998 0 : }
999 : }
1000 :
1001 0 : void SwAnnotationShell::StateStatusLine(SfxItemSet &rSet)
1002 : {
1003 0 : SfxWhichIter aIter( rSet );
1004 0 : sal_uInt16 nWhich = aIter.FirstWhich();
1005 :
1006 0 : while( nWhich )
1007 : {
1008 0 : switch( nWhich )
1009 : {
1010 : case FN_STAT_SELMODE:
1011 : {
1012 0 : rSet.Put(SfxUInt16Item(FN_STAT_SELMODE, 0));
1013 0 : rSet.DisableItem( nWhich );
1014 0 : break;
1015 : }
1016 : case FN_STAT_TEMPLATE:
1017 : {
1018 0 : rSet.DisableItem( nWhich );
1019 0 : break;
1020 : }
1021 : }
1022 0 : nWhich = aIter.NextWhich();
1023 0 : }
1024 0 : }
1025 :
1026 0 : void SwAnnotationShell::StateInsert(SfxItemSet &rSet)
1027 : {
1028 0 : SwPostItMgr* pPostItMgr = rView.GetPostItMgr();
1029 0 : if ( !pPostItMgr || !pPostItMgr->HasActiveSidebarWin() )
1030 0 : return;
1031 :
1032 0 : OutlinerView* pOLV = pPostItMgr->GetActiveSidebarWin()->GetOutlinerView();
1033 0 : SfxWhichIter aIter(rSet);
1034 0 : sal_uInt16 nWhich = aIter.FirstWhich();
1035 :
1036 0 : while(nWhich)
1037 : {
1038 0 : switch(nWhich)
1039 : {
1040 : case SID_HYPERLINK_GETLINK:
1041 : {
1042 0 : SvxHyperlinkItem aHLinkItem;
1043 0 : aHLinkItem.SetInsertMode(HLINK_FIELD);
1044 :
1045 0 : const SvxFieldItem* pFieldItem = pOLV->GetFieldAtSelection();
1046 :
1047 0 : if (pFieldItem)
1048 : {
1049 0 : const SvxFieldData* pField = pFieldItem->GetField();
1050 :
1051 0 : if (pField->ISA(SvxURLField))
1052 : {
1053 0 : aHLinkItem.SetName(static_cast<const SvxURLField*>( pField)->GetRepresentation());
1054 0 : aHLinkItem.SetURL(static_cast<const SvxURLField*>( pField)->GetURL());
1055 0 : aHLinkItem.SetTargetFrame(static_cast<const SvxURLField*>( pField)->GetTargetFrame());
1056 : }
1057 : }
1058 : else
1059 : {
1060 0 : OUString sSel(pOLV->GetSelected());
1061 0 : sSel = sSel.copy(0, std::min<sal_Int32>(255, sSel.getLength()));
1062 0 : aHLinkItem.SetName(comphelper::string::stripEnd(sSel, ' '));
1063 : }
1064 :
1065 0 : sal_uInt16 nHtmlMode = ::GetHtmlMode(rView.GetDocShell());
1066 0 : aHLinkItem.SetInsertMode((SvxLinkInsertMode)(aHLinkItem.GetInsertMode() |
1067 0 : ((nHtmlMode & HTMLMODE_ON) != 0 ? HLINK_HTMLMODE : 0)));
1068 :
1069 0 : rSet.Put(aHLinkItem);
1070 : }
1071 0 : break;
1072 : }
1073 :
1074 0 : if (pPostItMgr->GetActiveSidebarWin()->GetLayoutStatus()==SwPostItHelper::DELETED)
1075 0 : rSet.DisableItem( nWhich );
1076 :
1077 0 : nWhich = aIter.NextWhich();
1078 0 : }
1079 : }
1080 :
1081 0 : void SwAnnotationShell::NoteExec(SfxRequest &rReq)
1082 : {
1083 0 : SwPostItMgr* pPostItMgr = rView.GetPostItMgr();
1084 0 : if ( !pPostItMgr )
1085 0 : return;
1086 :
1087 0 : sal_uInt16 nSlot = rReq.GetSlot();
1088 0 : switch (nSlot)
1089 : {
1090 : case FN_REPLY:
1091 : case FN_POSTIT:
1092 : case FN_DELETE_COMMENT:
1093 0 : if ( pPostItMgr->HasActiveSidebarWin() )
1094 0 : pPostItMgr->GetActiveSidebarWin()->ExecuteCommand(nSlot);
1095 0 : break;
1096 :
1097 : case FN_DELETE_ALL_NOTES:
1098 0 : pPostItMgr->Delete();
1099 0 : break;
1100 : case FN_FORMAT_ALL_NOTES:
1101 0 : pPostItMgr->ExecuteFormatAllDialog(rView);
1102 0 : break;
1103 : case FN_DELETE_NOTE_AUTHOR:
1104 : {
1105 0 : SFX_REQUEST_ARG( rReq, pItem, SfxStringItem, nSlot, false);
1106 0 : if ( pItem )
1107 0 : pPostItMgr->Delete( pItem->GetValue() );
1108 0 : break;
1109 : }
1110 : case FN_HIDE_NOTE:
1111 0 : break;
1112 : case FN_HIDE_ALL_NOTES:
1113 0 : pPostItMgr->Hide();
1114 0 : break;
1115 : case FN_HIDE_NOTE_AUTHOR:
1116 : {
1117 0 : SFX_REQUEST_ARG( rReq, pItem, SfxStringItem, nSlot, false);
1118 0 : if ( pItem )
1119 0 : pPostItMgr->Hide( pItem->GetValue() );
1120 : }
1121 : }
1122 : }
1123 :
1124 0 : void SwAnnotationShell::GetNoteState(SfxItemSet &rSet)
1125 : {
1126 0 : SwPostItMgr* pPostItMgr = rView.GetPostItMgr();
1127 0 : SfxWhichIter aIter(rSet);
1128 0 : sal_uInt16 nWhich = aIter.FirstWhich();
1129 0 : while(nWhich)
1130 : {
1131 0 : sal_uInt16 nSlotId = GetPool().GetSlotId( nWhich );
1132 0 : switch( nSlotId )
1133 : {
1134 : case FN_POSTIT:
1135 : case FN_DELETE_NOTE_AUTHOR:
1136 : case FN_DELETE_ALL_NOTES:
1137 : case FN_FORMAT_ALL_NOTES:
1138 : case FN_HIDE_NOTE:
1139 : case FN_HIDE_NOTE_AUTHOR:
1140 : case FN_HIDE_ALL_NOTES:
1141 : case FN_DELETE_COMMENT:
1142 : {
1143 0 : if( !pPostItMgr
1144 0 : || !pPostItMgr->HasActiveAnnotationWin() )
1145 : {
1146 0 : rSet.DisableItem(nWhich);
1147 : }
1148 0 : break;
1149 : }
1150 :
1151 : case FN_REPLY:
1152 : {
1153 0 : if ( !pPostItMgr ||
1154 0 : !pPostItMgr->HasActiveAnnotationWin() )
1155 : {
1156 0 : rSet.DisableItem(nWhich);
1157 : }
1158 : else
1159 : {
1160 0 : SvtUserOptions aUserOpt;
1161 0 : OUString sAuthor;
1162 0 : if( (sAuthor = aUserOpt.GetFullName()).isEmpty() &&
1163 0 : (sAuthor = aUserOpt.GetID()).isEmpty() )
1164 0 : sAuthor = SW_RES( STR_REDLINE_UNKNOWN_AUTHOR );
1165 0 : if (sAuthor == pPostItMgr->GetActiveSidebarWin()->GetAuthor())
1166 0 : rSet.DisableItem(nWhich);
1167 : }
1168 0 : break;
1169 : }
1170 : default:
1171 0 : rSet.InvalidateItem( nWhich );
1172 0 : break;
1173 : }
1174 :
1175 0 : if (pPostItMgr && pPostItMgr->HasActiveSidebarWin())
1176 : {
1177 0 : if ( (pPostItMgr->GetActiveSidebarWin()->IsProtected()) &&
1178 0 : ( (nSlotId==FN_DELETE_COMMENT) || (nSlotId==FN_REPLY) ) )
1179 0 : rSet.DisableItem( nWhich );
1180 : }
1181 0 : nWhich = aIter.NextWhich();
1182 0 : }
1183 0 : }
1184 :
1185 0 : void SwAnnotationShell::ExecLingu(SfxRequest &rReq)
1186 : {
1187 0 : SwPostItMgr* pPostItMgr = rView.GetPostItMgr();
1188 0 : if ( !pPostItMgr || !pPostItMgr->HasActiveSidebarWin() )
1189 0 : return;
1190 :
1191 0 : OutlinerView* pOLV = pPostItMgr->GetActiveSidebarWin()->GetOutlinerView();
1192 0 : SfxItemSet aEditAttr(pOLV->GetAttribs());
1193 0 : sal_uInt16 nSlot = rReq.GetSlot();
1194 0 : SwWrtShell &rSh = rView.GetWrtShell();
1195 0 : bool bRestoreSelection = false;
1196 0 : ESelection aOldSelection;
1197 :
1198 0 : switch (nSlot)
1199 : {
1200 : case SID_LANGUAGE_STATUS:
1201 : {
1202 0 : aOldSelection = pOLV->GetSelection();
1203 0 : if (!pOLV->GetEditView().HasSelection())
1204 : {
1205 0 : pOLV->GetEditView().SelectCurrentWord();
1206 : }
1207 :
1208 0 : bRestoreSelection = SwLangHelper::SetLanguageStatus(pOLV,rReq,rView,rSh);
1209 0 : break;
1210 : }
1211 : case SID_THES:
1212 : {
1213 0 : OUString aReplaceText;
1214 0 : SFX_REQUEST_ARG( rReq, pItem2, SfxStringItem, SID_THES, false );
1215 0 : if (pItem2)
1216 0 : aReplaceText = pItem2->GetValue();
1217 0 : if (!aReplaceText.isEmpty())
1218 0 : ReplaceTextWithSynonym( pOLV->GetEditView(), aReplaceText );
1219 0 : break;
1220 : }
1221 : case SID_THESAURUS:
1222 : {
1223 0 : pOLV->StartThesaurus();
1224 0 : break;
1225 : }
1226 : case SID_HANGUL_HANJA_CONVERSION:
1227 : pOLV->StartTextConversion( LANGUAGE_KOREAN, LANGUAGE_KOREAN, NULL,
1228 0 : i18n::TextConversionOption::CHARACTER_BY_CHARACTER, true, false );
1229 0 : break;
1230 :
1231 : case SID_CHINESE_CONVERSION:
1232 : {
1233 : //open ChineseTranslationDialog
1234 : Reference< XComponentContext > xContext(
1235 0 : ::cppu::defaultBootstrap_InitialComponentContext() ); //@todo get context from calc if that has one
1236 0 : if(xContext.is())
1237 : {
1238 0 : Reference< lang::XMultiComponentFactory > xMCF( xContext->getServiceManager() );
1239 0 : if(xMCF.is())
1240 : {
1241 : Reference< ui::dialogs::XExecutableDialog > xDialog(
1242 0 : xMCF->createInstanceWithContext(
1243 : OUString("com.sun.star.linguistic2.ChineseTranslationDialog")
1244 0 : , xContext), UNO_QUERY);
1245 0 : Reference< lang::XInitialization > xInit( xDialog, UNO_QUERY );
1246 0 : if( xInit.is() )
1247 : {
1248 : // initialize dialog
1249 0 : Reference< awt::XWindow > xDialogParentWindow(0);
1250 0 : Sequence<Any> aSeq(1);
1251 0 : Any* pArray = aSeq.getArray();
1252 0 : PropertyValue aParam;
1253 0 : aParam.Name = "ParentWindow";
1254 0 : aParam.Value <<= makeAny(xDialogParentWindow);
1255 0 : pArray[0] <<= makeAny(aParam);
1256 0 : xInit->initialize( aSeq );
1257 :
1258 : //execute dialog
1259 0 : sal_Int16 nDialogRet = xDialog->execute();
1260 0 : if( RET_OK == nDialogRet )
1261 : {
1262 : //get some parameters from the dialog
1263 0 : bool bToSimplified = true;
1264 0 : bool bUseVariants = true;
1265 0 : bool bCommonTerms = true;
1266 0 : Reference< beans::XPropertySet > xProp( xDialog, UNO_QUERY );
1267 0 : if( xProp.is() )
1268 : {
1269 : try
1270 : {
1271 0 : xProp->getPropertyValue( "IsDirectionToSimplified" ) >>= bToSimplified;
1272 0 : xProp->getPropertyValue( "IsUseCharacterVariants" ) >>= bUseVariants;
1273 0 : xProp->getPropertyValue( "IsTranslateCommonTerms" ) >>= bCommonTerms;
1274 : }
1275 0 : catch (const Exception&)
1276 : {
1277 : }
1278 : }
1279 :
1280 : //execute translation
1281 0 : sal_Int16 nSourceLang = bToSimplified ? LANGUAGE_CHINESE_TRADITIONAL : LANGUAGE_CHINESE_SIMPLIFIED;
1282 0 : sal_Int16 nTargetLang = bToSimplified ? LANGUAGE_CHINESE_SIMPLIFIED : LANGUAGE_CHINESE_TRADITIONAL;
1283 0 : sal_Int32 nOptions = bUseVariants ? i18n::TextConversionOption::USE_CHARACTER_VARIANTS : 0;
1284 0 : if( !bCommonTerms )
1285 0 : nOptions = nOptions | i18n::TextConversionOption::CHARACTER_BY_CHARACTER;
1286 :
1287 : vcl::Font aTargetFont = OutputDevice::GetDefaultFont( DefaultFontType::CJK_TEXT,
1288 0 : nTargetLang, GetDefaultFontFlags::OnlyOne );
1289 :
1290 0 : pOLV->StartTextConversion( nSourceLang, nTargetLang, &aTargetFont, nOptions, false, false );
1291 0 : }
1292 : }
1293 0 : Reference< lang::XComponent > xComponent( xDialog, UNO_QUERY );
1294 0 : if( xComponent.is() )
1295 0 : xComponent->dispose();
1296 0 : }
1297 0 : }
1298 : }
1299 0 : break;
1300 : }
1301 :
1302 0 : if (bRestoreSelection)
1303 : {
1304 : // restore selection
1305 0 : pOLV->GetEditView().SetSelection( aOldSelection );
1306 0 : }
1307 : }
1308 :
1309 0 : void SwAnnotationShell::GetLinguState(SfxItemSet &rSet)
1310 : {
1311 0 : SwPostItMgr* pPostItMgr = rView.GetPostItMgr();
1312 0 : if ( !pPostItMgr || !pPostItMgr->HasActiveSidebarWin() )
1313 0 : return;
1314 :
1315 0 : OutlinerView* pOLV = pPostItMgr->GetActiveSidebarWin()->GetOutlinerView();
1316 0 : SfxItemSet aEditAttr(pOLV->GetAttribs());
1317 :
1318 0 : SfxWhichIter aIter(rSet);
1319 0 : sal_uInt16 nWhich = aIter.FirstWhich();
1320 0 : while(nWhich)
1321 : {
1322 0 : switch (nWhich)
1323 : {
1324 : case SID_LANGUAGE_STATUS:
1325 : {
1326 0 : SwLangHelper::GetLanguageStatus(pOLV,rSet);
1327 0 : break;
1328 : }
1329 :
1330 : case SID_THES:
1331 : {
1332 0 : OUString aStatusVal;
1333 0 : LanguageType nLang = LANGUAGE_NONE;
1334 0 : bool bIsLookUpWord = GetStatusValueForThesaurusFromContext( aStatusVal, nLang, pOLV->GetEditView() );
1335 0 : rSet.Put( SfxStringItem( SID_THES, aStatusVal ) );
1336 :
1337 : // disable "Thesaurus" context menu entry if there is nothing to look up
1338 0 : uno::Reference< linguistic2::XThesaurus > xThes( ::GetThesaurus() );
1339 0 : if (!bIsLookUpWord ||
1340 0 : !xThes.is() || nLang == LANGUAGE_NONE || !xThes->hasLocale( LanguageTag::convertToLocale( nLang ) ))
1341 0 : rSet.DisableItem( SID_THES );
1342 0 : break;
1343 : }
1344 :
1345 : // disable "Thesaurus" if the language is not supported
1346 : case SID_THESAURUS:
1347 : {
1348 0 : const SfxPoolItem &rItem = rView.GetWrtShell().GetDoc()->GetDefault(
1349 : GetWhichOfScript( RES_CHRATR_LANGUAGE,
1350 0 : SvtLanguageOptions::GetI18NScriptTypeOfLanguage( GetAppLanguage())) );
1351 : LanguageType nLang = static_cast<const SvxLanguageItem &>(
1352 0 : rItem).GetLanguage();
1353 0 : uno::Reference< linguistic2::XThesaurus > xThes( ::GetThesaurus() );
1354 0 : if (!xThes.is() || nLang == LANGUAGE_NONE ||
1355 0 : !xThes->hasLocale( LanguageTag::convertToLocale( nLang ) ))
1356 0 : rSet.DisableItem( SID_THESAURUS );
1357 : }
1358 0 : break;
1359 : case SID_HANGUL_HANJA_CONVERSION:
1360 : case SID_CHINESE_CONVERSION:
1361 : {
1362 0 : if (!SvtCJKOptions().IsAnyEnabled())
1363 : {
1364 0 : rView.GetViewFrame()->GetBindings().SetVisibleState( nWhich, false );
1365 0 : rSet.DisableItem(nWhich);
1366 : }
1367 : else
1368 0 : rView.GetViewFrame()->GetBindings().SetVisibleState( nWhich, true );
1369 : }
1370 0 : break;
1371 : }
1372 :
1373 0 : if (pPostItMgr->GetActiveSidebarWin()->GetLayoutStatus()==SwPostItHelper::DELETED)
1374 0 : rSet.DisableItem( nWhich );
1375 :
1376 0 : nWhich = aIter.NextWhich();
1377 0 : }
1378 : }
1379 :
1380 0 : void SwAnnotationShell::ExecTransliteration(SfxRequest &rReq)
1381 : {
1382 0 : SwPostItMgr* pPostItMgr = rView.GetPostItMgr();
1383 0 : if (!pPostItMgr || !pPostItMgr->HasActiveSidebarWin())
1384 0 : return;
1385 :
1386 0 : OutlinerView* pOLV = pPostItMgr->GetActiveSidebarWin()->GetOutlinerView();
1387 :
1388 0 : if (!pOLV)
1389 0 : return;
1390 :
1391 : using namespace ::com::sun::star::i18n;
1392 :
1393 0 : sal_uInt32 nMode = 0;
1394 :
1395 0 : switch( rReq.GetSlot() )
1396 : {
1397 : case SID_TRANSLITERATE_SENTENCE_CASE:
1398 0 : nMode = TransliterationModulesExtra::SENTENCE_CASE;
1399 0 : break;
1400 : case SID_TRANSLITERATE_TITLE_CASE:
1401 0 : nMode = TransliterationModulesExtra::TITLE_CASE;
1402 0 : break;
1403 : case SID_TRANSLITERATE_TOGGLE_CASE:
1404 0 : nMode = TransliterationModulesExtra::TOGGLE_CASE;
1405 0 : break;
1406 : case SID_TRANSLITERATE_UPPER:
1407 0 : nMode = TransliterationModules_LOWERCASE_UPPERCASE;
1408 0 : break;
1409 : case SID_TRANSLITERATE_LOWER:
1410 0 : nMode = TransliterationModules_UPPERCASE_LOWERCASE;
1411 0 : break;
1412 : case SID_TRANSLITERATE_HALFWIDTH:
1413 0 : nMode = TransliterationModules_FULLWIDTH_HALFWIDTH;
1414 0 : break;
1415 : case SID_TRANSLITERATE_FULLWIDTH:
1416 0 : nMode = TransliterationModules_HALFWIDTH_FULLWIDTH;
1417 0 : break;
1418 : case SID_TRANSLITERATE_HIRAGANA:
1419 0 : nMode = TransliterationModules_KATAKANA_HIRAGANA;
1420 0 : break;
1421 : case SID_TRANSLITERATE_KATAGANA:
1422 0 : nMode = TransliterationModules_HIRAGANA_KATAKANA;
1423 0 : break;
1424 :
1425 : default:
1426 : OSL_ENSURE(false, "wrong dispatcher");
1427 : }
1428 :
1429 0 : if( nMode )
1430 0 : pOLV->TransliterateText( nMode );
1431 : }
1432 :
1433 0 : void SwAnnotationShell::ExecRotateTransliteration( SfxRequest & rReq )
1434 : {
1435 0 : if( rReq.GetSlot() == SID_TRANSLITERATE_ROTATE_CASE )
1436 : {
1437 0 : SwPostItMgr* pPostItMgr = rView.GetPostItMgr();
1438 0 : if (!pPostItMgr || !pPostItMgr->HasActiveSidebarWin())
1439 0 : return;
1440 :
1441 0 : OutlinerView* pOLV = pPostItMgr->GetActiveSidebarWin()->GetOutlinerView();
1442 :
1443 0 : if (!pOLV)
1444 0 : return;
1445 :
1446 0 : pOLV->TransliterateText(m_aRotateCase.getNextMode());
1447 : }
1448 : }
1449 :
1450 0 : void SwAnnotationShell::ExecUndo(SfxRequest &rReq)
1451 : {
1452 0 : const SfxItemSet* pArgs = rReq.GetArgs();
1453 0 : ::svl::IUndoManager* pUndoManager = GetUndoManager();
1454 0 : SwWrtShell &rSh = rView.GetWrtShell();
1455 :
1456 0 : long aOldHeight = rView.GetPostItMgr()->HasActiveSidebarWin()
1457 0 : ? rView.GetPostItMgr()->GetActiveSidebarWin()->GetPostItTextHeight()
1458 0 : : 0;
1459 :
1460 0 : sal_uInt16 nId = rReq.GetSlot();
1461 0 : sal_uInt16 nCnt = 1;
1462 0 : const SfxPoolItem* pItem=0;
1463 0 : if( pArgs && SfxItemState::SET == pArgs->GetItemState( nId, false, &pItem ) )
1464 0 : nCnt = static_cast<const SfxUInt16Item*>(pItem)->GetValue();
1465 0 : switch( nId )
1466 : {
1467 : case SID_UNDO:
1468 : {
1469 0 : if ( pUndoManager )
1470 : {
1471 0 : sal_uInt16 nCount = pUndoManager->GetUndoActionCount();
1472 0 : sal_uInt16 nSteps = nCnt;
1473 0 : if ( nCount < nCnt )
1474 : {
1475 0 : nCnt = nCnt - nCount;
1476 0 : nSteps = nCount;
1477 : }
1478 : else
1479 0 : nCnt = 0;
1480 :
1481 0 : while( nSteps-- )
1482 0 : pUndoManager->Undo();
1483 : }
1484 :
1485 0 : if ( nCnt )
1486 0 : rSh.Do( SwWrtShell::UNDO, nCnt );
1487 :
1488 0 : break;
1489 : }
1490 :
1491 : case SID_REDO:
1492 : {
1493 0 : if ( pUndoManager )
1494 : {
1495 0 : sal_uInt16 nCount = pUndoManager->GetRedoActionCount();
1496 0 : sal_uInt16 nSteps = nCnt;
1497 0 : if ( nCount < nCnt )
1498 : {
1499 0 : nCnt = nCnt - nCount;
1500 0 : nSteps = nCount;
1501 : }
1502 : else
1503 0 : nCnt = 0;
1504 :
1505 0 : while( nSteps-- )
1506 0 : pUndoManager->Redo();
1507 : }
1508 :
1509 0 : if ( nCnt )
1510 0 : rSh.Do( SwWrtShell::REDO, nCnt );
1511 :
1512 0 : break;
1513 : }
1514 : }
1515 :
1516 0 : rView.GetViewFrame()->GetBindings().InvalidateAll(false);
1517 :
1518 0 : if (rView.GetPostItMgr()->HasActiveSidebarWin())
1519 0 : rView.GetPostItMgr()->GetActiveSidebarWin()->ResizeIfNecessary(aOldHeight,rView.GetPostItMgr()->GetActiveSidebarWin()->GetPostItTextHeight());
1520 0 : }
1521 :
1522 0 : void SwAnnotationShell::StateUndo(SfxItemSet &rSet)
1523 : {
1524 0 : SwPostItMgr* pPostItMgr = rView.GetPostItMgr();
1525 0 : if ( !pPostItMgr || !pPostItMgr->HasActiveSidebarWin() )
1526 0 : return;
1527 :
1528 0 : SfxWhichIter aIter(rSet);
1529 0 : sal_uInt16 nWhich = aIter.FirstWhich();
1530 0 : ::svl::IUndoManager* pUndoManager = GetUndoManager();
1531 0 : SfxViewFrame *pSfxViewFrame = rView.GetViewFrame();
1532 0 : SwWrtShell &rSh = rView.GetWrtShell();
1533 :
1534 0 : while( nWhich )
1535 : {
1536 0 : switch ( nWhich )
1537 : {
1538 : case SID_UNDO:
1539 : {
1540 0 : sal_uInt16 nCount = pUndoManager ? pUndoManager->GetUndoActionCount() : 0;
1541 0 : if ( nCount )
1542 0 : pSfxViewFrame->GetSlotState( nWhich, pSfxViewFrame->GetInterface(), &rSet );
1543 0 : else if (rSh.GetLastUndoInfo(0, 0))
1544 : {
1545 0 : rSet.Put( SfxStringItem( nWhich, rSh.GetDoString(SwWrtShell::UNDO)) );
1546 : }
1547 : else
1548 0 : rSet.DisableItem(nWhich);
1549 0 : break;
1550 : }
1551 : case SID_REDO:
1552 : {
1553 0 : sal_uInt16 nCount = pUndoManager ? pUndoManager->GetRedoActionCount() : 0;
1554 0 : if ( nCount )
1555 0 : pSfxViewFrame->GetSlotState( nWhich, pSfxViewFrame->GetInterface(), &rSet );
1556 0 : else if (rSh.GetFirstRedoInfo(0))
1557 : {
1558 0 : rSet.Put(SfxStringItem( nWhich, rSh.GetDoString(SwWrtShell::REDO)) );
1559 : }
1560 : else
1561 0 : rSet.DisableItem(nWhich);
1562 0 : break;
1563 : }
1564 : case SID_GETUNDOSTRINGS:
1565 : case SID_GETREDOSTRINGS:
1566 : {
1567 0 : if( pUndoManager )
1568 : {
1569 : OUString (::svl::IUndoManager:: *fnGetComment)( size_t, bool const ) const;
1570 :
1571 : sal_uInt16 nCount;
1572 0 : if( SID_GETUNDOSTRINGS == nWhich )
1573 : {
1574 0 : nCount = pUndoManager->GetUndoActionCount();
1575 0 : fnGetComment = &::svl::IUndoManager::GetUndoActionComment;
1576 : }
1577 : else
1578 : {
1579 0 : nCount = pUndoManager->GetRedoActionCount();
1580 0 : fnGetComment = &::svl::IUndoManager::GetRedoActionComment;
1581 : }
1582 :
1583 0 : OUString sList;
1584 0 : if( nCount )
1585 : {
1586 0 : for( sal_uInt16 n = 0; n < nCount; ++n )
1587 0 : sList += (pUndoManager->*fnGetComment)( n, ::svl::IUndoManager::TopLevel ) + "\n";
1588 : }
1589 :
1590 0 : SfxStringListItem aItem( nWhich );
1591 0 : if ((nWhich == SID_GETUNDOSTRINGS) &&
1592 0 : rSh.GetLastUndoInfo(0, 0))
1593 : {
1594 0 : rSh.GetDoStrings( SwWrtShell::UNDO, aItem );
1595 : }
1596 0 : else if ((nWhich == SID_GETREDOSTRINGS) &&
1597 0 : (rSh.GetFirstRedoInfo(0)))
1598 : {
1599 0 : rSh.GetDoStrings( SwWrtShell::UNDO, aItem );
1600 : }
1601 :
1602 0 : sList += aItem.GetString();
1603 0 : aItem.SetString( sList );
1604 0 : rSet.Put( aItem );
1605 : }
1606 : else
1607 0 : rSet.DisableItem( nWhich );
1608 : }
1609 0 : break;
1610 :
1611 : default:
1612 : {
1613 0 : pSfxViewFrame->GetSlotState( nWhich, pSfxViewFrame->GetInterface(), &rSet );
1614 0 : break;
1615 : }
1616 :
1617 : }
1618 :
1619 0 : if (pPostItMgr->GetActiveSidebarWin()->GetLayoutStatus()==SwPostItHelper::DELETED)
1620 0 : rSet.DisableItem( nWhich );
1621 :
1622 0 : nWhich = aIter.NextWhich();
1623 0 : }
1624 : }
1625 :
1626 0 : void SwAnnotationShell::StateDisableItems( SfxItemSet &rSet )
1627 : {
1628 0 : SfxWhichIter aIter(rSet);
1629 0 : sal_uInt16 nWhich = aIter.FirstWhich();
1630 0 : while (nWhich)
1631 : {
1632 0 : rSet.DisableItem( nWhich );
1633 0 : nWhich = aIter.NextWhich();
1634 0 : }
1635 0 : }
1636 :
1637 0 : void SwAnnotationShell::InsertSymbol(SfxRequest& rReq)
1638 : {
1639 0 : SwPostItMgr* pPostItMgr = rView.GetPostItMgr();
1640 0 : if ( !pPostItMgr || !pPostItMgr->HasActiveSidebarWin() )
1641 0 : return;
1642 :
1643 0 : OutlinerView* pOLV = pPostItMgr->GetActiveSidebarWin()->GetOutlinerView();
1644 :
1645 0 : const SfxItemSet *pArgs = rReq.GetArgs();
1646 0 : const SfxPoolItem* pItem = 0;
1647 0 : if( pArgs )
1648 0 : pArgs->GetItemState(GetPool().GetWhich(SID_CHARMAP), false, &pItem);
1649 :
1650 0 : OUString sSym;
1651 0 : OUString sFontName;
1652 0 : if ( pItem )
1653 : {
1654 0 : sSym = static_cast<const SfxStringItem*>(pItem)->GetValue();
1655 0 : const SfxPoolItem* pFtItem = NULL;
1656 0 : pArgs->GetItemState( GetPool().GetWhich(SID_ATTR_SPECIALCHAR), false, &pFtItem);
1657 0 : const SfxStringItem* pFontItem = PTR_CAST( SfxStringItem, pFtItem );
1658 0 : if ( pFontItem )
1659 0 : sFontName = pFontItem->GetValue();
1660 : }
1661 :
1662 0 : SfxItemSet aSet(pOLV->GetAttribs());
1663 0 : SvtScriptType nScript = pOLV->GetSelectedScriptType();
1664 0 : SvxFontItem aSetDlgFont( RES_CHRATR_FONT );
1665 : {
1666 0 : SvxScriptSetItem aSetItem( SID_ATTR_CHAR_FONT, *aSet.GetPool() );
1667 0 : aSetItem.GetItemSet().Put( aSet, false );
1668 0 : const SfxPoolItem* pI = aSetItem.GetItemOfScript( nScript );
1669 0 : if( pI )
1670 0 : aSetDlgFont = *static_cast<const SvxFontItem*>(pI);
1671 : else
1672 : aSetDlgFont = static_cast<const SvxFontItem&>(aSet.Get( GetWhichOfScript(
1673 : SID_ATTR_CHAR_FONT,
1674 0 : SvtLanguageOptions::GetI18NScriptTypeOfLanguage( GetAppLanguage() ) )));
1675 0 : if (sFontName.isEmpty())
1676 0 : sFontName = aSetDlgFont.GetFamilyName();
1677 : }
1678 :
1679 0 : vcl::Font aFont(sFontName, Size(1,1));
1680 0 : if( sSym.isEmpty() )
1681 : {
1682 0 : SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
1683 :
1684 0 : SfxAllItemSet aAllSet( GetPool() );
1685 0 : aAllSet.Put( SfxBoolItem( FN_PARAM_1, false ) );
1686 :
1687 0 : SwViewOption aOpt(*rView.GetWrtShell().GetViewOptions());
1688 0 : OUString sSymbolFont = aOpt.GetSymbolFont();
1689 0 : if( !sSymbolFont.isEmpty() )
1690 0 : aAllSet.Put( SfxStringItem( SID_FONT_NAME, sSymbolFont ) );
1691 : else
1692 0 : aAllSet.Put( SfxStringItem( SID_FONT_NAME, aSetDlgFont.GetFamilyName() ) );
1693 :
1694 : // If character is selected then it can be shown.
1695 : boost::scoped_ptr<SfxAbstractDialog> pDlg(pFact->CreateSfxDialog( rView.GetWindow(), aAllSet,
1696 0 : rView.GetViewFrame()->GetFrame().GetFrameInterface(), RID_SVXDLG_CHARMAP ));
1697 :
1698 0 : sal_uInt16 nResult = pDlg->Execute();
1699 0 : if( nResult == RET_OK )
1700 : {
1701 0 : SFX_ITEMSET_ARG( pDlg->GetOutputItemSet(), pCItem, SfxStringItem, SID_CHARMAP, false );
1702 0 : SFX_ITEMSET_ARG( pDlg->GetOutputItemSet(), pFontItem, SvxFontItem, SID_ATTR_CHAR_FONT, false );
1703 0 : if ( pFontItem )
1704 : {
1705 0 : aFont.SetName( pFontItem->GetFamilyName() );
1706 0 : aFont.SetStyleName( pFontItem->GetStyleName() );
1707 0 : aFont.SetCharSet( pFontItem->GetCharSet() );
1708 0 : aFont.SetPitch( pFontItem->GetPitch() );
1709 : }
1710 :
1711 0 : if ( pCItem )
1712 : {
1713 0 : sSym = pCItem->GetValue();
1714 0 : aOpt.SetSymbolFont(aFont.GetName());
1715 0 : SW_MOD()->ApplyUsrPref(aOpt, &rView);
1716 : }
1717 0 : }
1718 : }
1719 :
1720 0 : if( !sSym.isEmpty() )
1721 : {
1722 : // do not flicker
1723 0 : pOLV->HideCursor();
1724 0 : Outliner * pOutliner = pOLV->GetOutliner();
1725 0 : pOutliner->SetUpdateMode(false);
1726 :
1727 0 : SfxItemSet aOldSet( pOLV->GetAttribs() );
1728 0 : SfxItemSet aFontSet( *aOldSet.GetPool(),
1729 : EE_CHAR_FONTINFO, EE_CHAR_FONTINFO,
1730 : EE_CHAR_FONTINFO_CJK, EE_CHAR_FONTINFO_CJK,
1731 : EE_CHAR_FONTINFO_CTL, EE_CHAR_FONTINFO_CTL,
1732 0 : 0 );
1733 0 : aFontSet.Set( aOldSet );
1734 :
1735 : // Insert string
1736 0 : pOLV->InsertText( sSym);
1737 :
1738 : // Attributing (set font)
1739 0 : SfxItemSet aSetFont( *aFontSet.GetPool(), aFontSet.GetRanges() );
1740 0 : SvxFontItem aFontItem (aFont.GetFamily(), aFont.GetName(),
1741 0 : aFont.GetStyleName(), aFont.GetPitch(),
1742 0 : aFont.GetCharSet(),
1743 0 : EE_CHAR_FONTINFO );
1744 0 : SvtScriptType nScriptBreak = g_pBreakIt->GetAllScriptsOfText( sSym );
1745 0 : if( SvtScriptType::LATIN & nScriptBreak )
1746 0 : aSetFont.Put( aFontItem, EE_CHAR_FONTINFO );
1747 0 : if( SvtScriptType::ASIAN & nScriptBreak )
1748 0 : aSetFont.Put( aFontItem, EE_CHAR_FONTINFO_CJK );
1749 0 : if( SvtScriptType::COMPLEX & nScriptBreak )
1750 0 : aSetFont.Put( aFontItem, EE_CHAR_FONTINFO_CTL );
1751 0 : pOLV->SetAttribs(aSetFont);
1752 :
1753 : // Erase selection
1754 0 : ESelection aSel(pOLV->GetSelection());
1755 0 : aSel.nStartPara = aSel.nEndPara;
1756 0 : aSel.nStartPos = aSel.nEndPos;
1757 0 : pOLV->SetSelection(aSel);
1758 :
1759 : // Restore old font
1760 0 : pOLV->SetAttribs( aFontSet );
1761 :
1762 : // From now on show it again
1763 0 : pOutliner->SetUpdateMode(true);
1764 0 : pOLV->ShowCursor();
1765 :
1766 0 : rReq.AppendItem( SfxStringItem( GetPool().GetWhich(SID_CHARMAP), sSym ) );
1767 0 : if(!aFont.GetName().isEmpty())
1768 0 : rReq.AppendItem( SfxStringItem( SID_ATTR_SPECIALCHAR, aFont.GetName() ) );
1769 0 : rReq.Done();
1770 0 : }
1771 177 : }
1772 :
1773 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|