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