xref: /AOO41X/main/sw/source/ui/shells/drwtxtex.cxx (revision 8ef2f12b1aeba1404ab3c221e6e26281826cc4fc)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sw.hxx"
26 
27 #include <com/sun/star/ui/dialogs/XExecutableDialog.hpp>
28 
29 #include <comphelper/processfactory.hxx>
30 #include <i18npool/mslangid.hxx>
31 #include <sfx2/bindings.hxx>
32 #include <sfx2/dispatch.hxx>
33 #include <sfx2/request.hxx>
34 #include <tools/shl.hxx>
35 #include <svx/svdview.hxx>
36 #include <editeng/spltitem.hxx>
37 #include <editeng/lrspitem.hxx>
38 #include <editeng/ulspitem.hxx>
39 #include <editeng/orphitem.hxx>
40 #include <editeng/brkitem.hxx>
41 #include <editeng/widwitem.hxx>
42 #include <editeng/kernitem.hxx>
43 #include <editeng/escpitem.hxx>
44 #include <editeng/lspcitem.hxx>
45 #include <editeng/adjitem.hxx>
46 #include <editeng/crsditem.hxx>
47 #include <editeng/shdditem.hxx>
48 #include <editeng/hyznitem.hxx>
49 #include <editeng/udlnitem.hxx>
50 #include <editeng/fontitem.hxx>
51 #include <editeng/fhgtitem.hxx>
52 #include <editeng/colritem.hxx>
53 #include <editeng/wghtitem.hxx>
54 #include <editeng/cntritem.hxx>
55 #include <editeng/postitem.hxx>
56 #include <editeng/frmdiritem.hxx>
57 #include <svx/svdoutl.hxx>
58 #include <sfx2/viewfrm.hxx>
59 #include <svl/whiter.hxx>
60 #include <svl/cjkoptions.hxx>
61 #include <svl/ctloptions.hxx>
62 #include <svtools/langtab.hxx>
63 #include <svl/languageoptions.hxx>
64 #include <sfx2/bindings.hxx>
65 #include <vcl/msgbox.hxx>
66 #include <sfx2/dispatch.hxx>
67 #include <sfx2/request.hxx>
68 #include <editeng/flditem.hxx>
69 #include <editeng/editstat.hxx>
70 #include <svx/hlnkitem.hxx>
71 #include <svx/htmlmode.hxx>
72 #include <svl/languageoptions.hxx>
73 #include <svl/slstitm.hxx>
74 #include <editeng/langitem.hxx>
75 #include <svtools/langtab.hxx>
76 #include <editeng/unolingu.hxx>
77 #include <editeng/scripttypeitem.hxx>
78 #include <editeng/writingmodeitem.hxx>
79 #include <editeng/eeitem.hxx>
80 #include <editeng/editeng.hxx>
81 #include <editeng/editdata.hxx>
82 #include <editeng/outliner.hxx>
83 #include <vcl/window.hxx>
84 #include <editeng/editview.hxx>
85 #include <vcl/outdev.hxx>
86 #include <editeng/hyznitem.hxx>
87 #include <editeng/kernitem.hxx>
88 #include <editeng/langitem.hxx>
89 #include <editeng/lspcitem.hxx>
90 #include <editeng/orphitem.hxx>
91 #include <editeng/outliner.hxx>
92 #include <editeng/postitem.hxx>
93 #include <editeng/scripttypeitem.hxx>
94 #include <editeng/shdditem.hxx>
95 #include <editeng/spltitem.hxx>
96 #include <svx/svdoutl.hxx>
97 #include <svx/svdview.hxx>
98 #include <editeng/udlnitem.hxx>
99 #include <editeng/unolingu.hxx>
100 #include <editeng/wghtitem.hxx>
101 #include <editeng/widwitem.hxx>
102 #include <editeng/writingmodeitem.hxx>
103 #include <tools/shl.hxx>
104 #include <vcl/msgbox.hxx>
105 #include <vcl/outdev.hxx>
106 #include <vcl/window.hxx>
107 
108 #include <cmdid.h>
109 #include <doc.hxx>
110 #include <docstat.hxx>
111 #include <drwtxtsh.hxx>
112 #include <edtwin.hxx>
113 #include <globals.hrc>
114 #include <hintids.hxx>
115 #include <initui.hxx>               // fuer SpellPointer
116 #include <langhelper.hxx>
117 #include <pardlg.hxx>
118 #include <shells.hrc>
119 #include <string.h>
120 #include <swdtflvr.hxx>
121 #include <swmodule.hxx>
122 #include <swwait.hxx>
123 #include <uitool.hxx>
124 #include <viewopt.hxx>
125 #include <wrtsh.hxx>
126 #include <wview.hxx>
127 
128 #include "swabstdlg.hxx"
129 #include "chrdlg.hrc"
130 #include "misc.hrc"
131 
132 
133 #include <langhelper.hxx>
134 
135 using namespace ::com::sun::star;
136 
137 /*--------------------------------------------------------------------
138     Beschreibung:
139  --------------------------------------------------------------------*/
140 
Execute(SfxRequest & rReq)141 void SwDrawTextShell::Execute( SfxRequest &rReq )
142 {
143     SwWrtShell &rSh = GetShell();
144     OutlinerView* pOLV = pSdrView->GetTextEditOutlinerView();
145     SfxItemSet aEditAttr(pOLV->GetAttribs());
146     SfxItemSet aNewAttr(*aEditAttr.GetPool(), aEditAttr.GetRanges());
147 
148     const sal_uInt16 nSlot = rReq.GetSlot();
149 
150     const sal_uInt16 nWhich = GetPool().GetWhich(nSlot);
151     const SfxItemSet *pNewAttrs = rReq.GetArgs();
152 
153     bool bRestoreSelection = false;
154     ESelection aOldSelection;
155 
156     sal_uInt16 nEEWhich = 0;
157     switch (nSlot)
158     {
159         case SID_LANGUAGE_STATUS:
160         {
161             aOldSelection = pOLV->GetSelection();
162             if (!pOLV->GetEditView().HasSelection())
163             {
164                 bRestoreSelection   = true;
165                 pOLV->GetEditView().SelectCurrentWord();
166             }
167 
168             bRestoreSelection = SwLangHelper::SetLanguageStatus(pOLV,rReq,GetView(),rSh);
169             break;
170         }
171 
172         case SID_THES:
173         {
174             String aReplaceText;
175             SFX_REQUEST_ARG( rReq, pItem2, SfxStringItem, SID_THES, sal_False );
176             if (pItem2)
177                 aReplaceText = pItem2->GetValue();
178             if (aReplaceText.Len() > 0)
179                 ReplaceTextWithSynonym( pOLV->GetEditView(), aReplaceText );
180             break;
181         }
182 
183         case SID_ATTR_CHAR_FONT:
184         case SID_ATTR_CHAR_FONTHEIGHT:
185         case SID_ATTR_CHAR_WEIGHT:
186         case SID_ATTR_CHAR_POSTURE:
187         {
188             SfxItemPool* pPool2 = aEditAttr.GetPool()->GetSecondaryPool();
189             if( !pPool2 )
190                 pPool2 = aEditAttr.GetPool();
191             SvxScriptSetItem aSetItem( nSlot, *pPool2 );
192 
193             // #i78017 establish the same behaviour as in Writer
194             sal_uInt16 nScriptTypes = SCRIPTTYPE_LATIN | SCRIPTTYPE_ASIAN | SCRIPTTYPE_COMPLEX;
195             if (nSlot == SID_ATTR_CHAR_FONT)
196                 nScriptTypes = pOLV->GetSelectedScriptType();
197 
198             aSetItem.PutItemForScriptType( nScriptTypes, pNewAttrs->Get( nWhich ) );
199             aNewAttr.Put( aSetItem.GetItemSet() );
200         }
201         break;
202 
203         case SID_ATTR_CHAR_COLOR: nEEWhich = EE_CHAR_COLOR; break;
204 
205         case SID_ATTR_CHAR_UNDERLINE:
206         {
207             if ( pNewAttrs )
208             {
209                 const SvxTextLineItem& rTextLineItem = static_cast< const SvxTextLineItem& >( pNewAttrs->Get( pNewAttrs->GetPool()->GetWhich(nSlot) ) );
210                 aNewAttr.Put( SvxUnderlineItem( rTextLineItem.GetLineStyle(), EE_CHAR_UNDERLINE ) );
211             }
212             else
213             {
214                 FontUnderline eFU = ((const SvxUnderlineItem&)aEditAttr.Get(EE_CHAR_UNDERLINE)).GetLineStyle();
215                 aNewAttr.Put( SvxUnderlineItem(eFU == UNDERLINE_SINGLE ? UNDERLINE_NONE : UNDERLINE_SINGLE, EE_CHAR_UNDERLINE) );
216             }
217         }
218         break;
219 
220         case SID_ATTR_CHAR_OVERLINE:
221         {
222             FontUnderline eFO = ((const SvxOverlineItem&)aEditAttr.Get(EE_CHAR_OVERLINE)).GetLineStyle();
223             aNewAttr.Put(SvxOverlineItem(eFO == UNDERLINE_SINGLE ? UNDERLINE_NONE : UNDERLINE_SINGLE, EE_CHAR_OVERLINE));
224         }
225         break;
226 
227         case SID_ATTR_CHAR_CONTOUR:     nEEWhich = EE_CHAR_OUTLINE; break;
228         case SID_ATTR_CHAR_SHADOWED:    nEEWhich = EE_CHAR_SHADOW; break;
229         case SID_ATTR_CHAR_STRIKEOUT:   nEEWhich = EE_CHAR_STRIKEOUT; break;
230         case SID_ATTR_CHAR_WORDLINEMODE: nEEWhich = EE_CHAR_WLM; break;
231         case SID_ATTR_CHAR_RELIEF      : nEEWhich = EE_CHAR_RELIEF;  break;
232         case SID_ATTR_CHAR_LANGUAGE    : nEEWhich = EE_CHAR_LANGUAGE;break;
233         case SID_ATTR_CHAR_KERNING     : nEEWhich = EE_CHAR_KERNING; break;
234         case SID_ATTR_CHAR_SCALEWIDTH:   nEEWhich = EE_CHAR_FONTWIDTH; break;
235         case SID_ATTR_CHAR_AUTOKERN  :   nEEWhich = EE_CHAR_PAIRKERNING; break;
236         case SID_ATTR_CHAR_ESCAPEMENT:   nEEWhich = EE_CHAR_ESCAPEMENT; break;
237         case SID_ATTR_PARA_ADJUST_LEFT:
238             aNewAttr.Put(SvxAdjustItem(SVX_ADJUST_LEFT, EE_PARA_JUST));
239         break;
240         case SID_ATTR_PARA_ADJUST_CENTER:
241             aNewAttr.Put(SvxAdjustItem(SVX_ADJUST_CENTER, EE_PARA_JUST));
242         break;
243         case SID_ATTR_PARA_ADJUST_RIGHT:
244             aNewAttr.Put(SvxAdjustItem(SVX_ADJUST_RIGHT, EE_PARA_JUST));
245         break;
246         case SID_ATTR_PARA_ADJUST_BLOCK:
247             aNewAttr.Put(SvxAdjustItem(SVX_ADJUST_BLOCK, EE_PARA_JUST));
248         break;
249         case SID_ATTR_PARA_LRSPACE:
250             {
251                 SvxLRSpaceItem aParaMargin((const SvxLRSpaceItem&)rReq.
252                                         GetArgs()->Get(nSlot));
253                 aParaMargin.SetWhich( EE_PARA_LRSPACE );
254                 aNewAttr.Put(aParaMargin);
255                 rReq.Done();
256             }
257             break;
258         case SID_ATTR_PARA_LINESPACE:
259             {
260                 SvxLineSpacingItem aLineSpace = (const SvxLineSpacingItem&)pNewAttrs->Get(
261                                                             GetPool().GetWhich(nSlot));
262                 aLineSpace.SetWhich( EE_PARA_SBL );
263                 aNewAttr.Put( aLineSpace );
264                 rReq.Done();
265             }
266             break;
267         case SID_ATTR_PARA_ULSPACE:
268             {
269                 SvxULSpaceItem aULSpace = (const SvxULSpaceItem&)pNewAttrs->Get(
270                     GetPool().GetWhich(nSlot));
271                 aULSpace.SetWhich( EE_PARA_ULSPACE );
272                 aNewAttr.Put( aULSpace );
273                 rReq.Done();
274             }
275             break;
276 
277         case SID_ATTR_PARA_LINESPACE_10:
278         {
279             SvxLineSpacingItem aItem(SVX_LINESPACE_ONE_LINE, EE_PARA_SBL);
280             aItem.SetPropLineSpace(100);
281             aNewAttr.Put(aItem);
282         }
283         break;
284         case SID_ATTR_PARA_LINESPACE_15:
285         {
286             SvxLineSpacingItem aItem(SVX_LINESPACE_ONE_POINT_FIVE_LINES, EE_PARA_SBL);
287             aItem.SetPropLineSpace(150);
288             aNewAttr.Put(aItem);
289         }
290         break;
291         case SID_ATTR_PARA_LINESPACE_20:
292         {
293             SvxLineSpacingItem aItem(SVX_LINESPACE_TWO_LINES, EE_PARA_SBL);
294             aItem.SetPropLineSpace(200);
295             aNewAttr.Put(aItem);
296         }
297         break;
298 
299         case FN_SET_SUPER_SCRIPT:
300         {
301             SvxEscapementItem aItem(EE_CHAR_ESCAPEMENT);
302             SvxEscapement eEsc = (SvxEscapement ) ( (const SvxEscapementItem&)
303                             aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue();
304 
305             if( eEsc == SVX_ESCAPEMENT_SUPERSCRIPT )
306                 aItem.SetEscapement( SVX_ESCAPEMENT_OFF );
307             else
308                 aItem.SetEscapement( SVX_ESCAPEMENT_SUPERSCRIPT );
309             aNewAttr.Put( aItem, EE_CHAR_ESCAPEMENT );
310         }
311         break;
312         case FN_SET_SUB_SCRIPT:
313         {
314             SvxEscapementItem aItem(EE_CHAR_ESCAPEMENT);
315             SvxEscapement eEsc = (SvxEscapement ) ( (const SvxEscapementItem&)
316                             aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue();
317 
318             if( eEsc == SVX_ESCAPEMENT_SUBSCRIPT )
319                 aItem.SetEscapement( SVX_ESCAPEMENT_OFF );
320             else
321                 aItem.SetEscapement( SVX_ESCAPEMENT_SUBSCRIPT );
322             aNewAttr.Put( aItem, EE_CHAR_ESCAPEMENT );
323         }
324         break;
325 
326         case SID_CHAR_DLG_EFFECT:
327         case SID_CHAR_DLG:
328         case SID_CHAR_DLG_FOR_PARAGRAPH:
329         {
330             const SfxItemSet* pArgs = rReq.GetArgs();
331 
332             if( !pArgs )
333             {
334                 aOldSelection = pOLV->GetSelection();
335                 if (nSlot == SID_CHAR_DLG_FOR_PARAGRAPH)
336                 {
337                     // select current paragraph (and restore selection later on...)
338                     EditView & rEditView = pOLV->GetEditView();
339                     SwLangHelper::SelectPara( rEditView, rEditView.GetSelection() );
340                     bRestoreSelection = true;
341                 }
342 
343                 SwView* pView = &GetView();
344                 FieldUnit eMetric = ::GetDfltMetric(0 != PTR_CAST(SwWebView, pView));
345                 SW_MOD()->PutItem(SfxUInt16Item(SID_ATTR_METRIC, static_cast< sal_uInt16 >(eMetric)) );
346                 SfxItemSet aDlgAttr(GetPool(), EE_ITEMS_START, EE_ITEMS_END);
347 
348                 // util::Language gibts an der EditEngine nicht! Daher nicht im Set.
349 
350                 aDlgAttr.Put( aEditAttr );
351                 aDlgAttr.Put( SvxKerningItem(0, RES_CHRATR_KERNING) );
352 
353                 SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
354                 DBG_ASSERT(pFact, "SwAbstractDialogFactory fail!");
355 
356                 SfxAbstractTabDialog* pDlg = pFact->CreateSwCharDlg( pView->GetWindow(), *pView, aDlgAttr, DLG_CHAR,0, sal_True );
357                 DBG_ASSERT(pDlg, "Dialogdiet fail!");
358                 if (nSlot == SID_CHAR_DLG_EFFECT)
359                 {
360                     pDlg->SetCurPageId(TP_CHAR_EXT);
361                 }
362                 sal_uInt16 nRet = pDlg->Execute();
363                 if(RET_OK == nRet )
364                 {
365                     rReq.Done( *( pDlg->GetOutputItemSet() ) );
366                     aNewAttr.Put(*pDlg->GetOutputItemSet());
367                 }
368                 delete( pDlg );
369                 if(RET_OK != nRet)
370                     return ;
371             }
372             else
373                 aNewAttr.Put(*pArgs);
374         }
375         break;
376         case FN_FORMAT_FOOTNOTE_DLG:
377         {
378             SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
379             DBG_ASSERT(pFact, "SwAbstractDialogFactory fail!");
380 
381             VclAbstractDialog* pDlg = pFact->CreateSwFootNoteOptionDlg( GetView().GetWindow(), rView.GetWrtShell(), DLG_DOC_FOOTNOTE );
382             DBG_ASSERT(pDlg, "Dialogdiet fail!");
383             pDlg->Execute();
384             delete pDlg;
385             break;
386         }
387         case FN_NUMBERING_OUTLINE_DLG:
388         {
389             SfxItemSet aTmp(GetPool(), FN_PARAM_1, FN_PARAM_1);
390             SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
391             DBG_ASSERT(pFact, "Dialogdiet fail!");
392             SfxAbstractTabDialog* pDlg = pFact->CreateSwTabDialog( DLG_TAB_OUTLINE,
393                                                         GetView().GetWindow(), &aTmp, GetView().GetWrtShell());
394             DBG_ASSERT(pDlg, "Dialogdiet fail!");
395             pDlg->Execute();
396             delete pDlg;
397             rReq.Done();
398         }
399         break;
400         case SID_OPEN_XML_FILTERSETTINGS:
401         {
402             try
403             {
404                 uno::Reference < ui::dialogs::XExecutableDialog > xDialog(::comphelper::getProcessServiceFactory()->createInstance(rtl::OUString::createFromAscii("com.sun.star.comp.ui.XSLTFilterDialog")), uno::UNO_QUERY);
405                 if( xDialog.is() )
406                 {
407                     xDialog->execute();
408                 }
409             }
410             catch( uno::Exception& )
411             {
412             }
413             rReq.Ignore ();
414         }
415         break;
416         case FN_WORDCOUNT_DIALOG:
417         {
418             SwDocStat aCurr;
419             SwDocStat aDocStat( rSh.getIDocumentStatistics()->GetDocStat() );
420             {
421                 SwWait aWait( *GetView().GetDocShell(), true );
422                 rSh.StartAction();
423                 rSh.CountWords( aCurr );
424                 rSh.UpdateDocStat( aDocStat );
425                 rSh.EndAction();
426             }
427 
428             SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
429             DBG_ASSERT(pFact, "Dialogdiet fail!");
430             AbstractSwWordCountDialog* pDialog = pFact->CreateSwWordCountDialog( GetView().GetWindow() );
431             pDialog->SetValues(aCurr, aDocStat );
432             pDialog->Execute();
433             delete pDialog;
434         }
435         break;
436         case SID_PARA_DLG:
437         {
438             const SfxItemSet* pArgs = rReq.GetArgs();
439 
440             if (!pArgs)
441             {
442                 SwView* pView = &GetView();
443                 FieldUnit eMetric = ::GetDfltMetric(0 != PTR_CAST(SwWebView, pView));
444                 SW_MOD()->PutItem(SfxUInt16Item(SID_ATTR_METRIC, static_cast< sal_uInt16 >(eMetric)) );
445                 SfxItemSet aDlgAttr(GetPool(),
446                                     EE_ITEMS_START, EE_ITEMS_END,
447                                     SID_ATTR_PARA_HYPHENZONE, SID_ATTR_PARA_HYPHENZONE,
448                                     SID_ATTR_PARA_SPLIT, SID_ATTR_PARA_SPLIT,
449                                     SID_ATTR_PARA_WIDOWS, SID_ATTR_PARA_WIDOWS,
450                                     SID_ATTR_PARA_ORPHANS, SID_ATTR_PARA_ORPHANS,
451                                     0);
452 
453                 aDlgAttr.Put(aEditAttr);
454 
455                 // Die Werte sind erst einmal uebernommen worden, um den Dialog anzuzeigen.
456                 // Muss natuerlich noch geaendert werden
457                 // aDlgAttr.Put( SvxParaDlgLimitsItem( 567 * 50, 5670) );
458 
459                 aDlgAttr.Put( SvxHyphenZoneItem( sal_False, RES_PARATR_HYPHENZONE) );
460                 aDlgAttr.Put( SvxFmtBreakItem( SVX_BREAK_NONE, RES_BREAK ) );
461                 aDlgAttr.Put( SvxFmtSplitItem( sal_True, RES_PARATR_SPLIT ) );
462                 aDlgAttr.Put( SvxWidowsItem( 0, RES_PARATR_WIDOWS ) );
463                 aDlgAttr.Put( SvxOrphansItem( 0, RES_PARATR_ORPHANS ) );
464 
465                 SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
466                 DBG_ASSERT(pFact, "SwAbstractDialogFactory fail!");
467 
468                 SfxAbstractTabDialog* pDlg = pFact->CreateSwParaDlg( GetView().GetWindow(), GetView(), aDlgAttr,DLG_STD, DLG_PARA, 0, sal_True );
469                 DBG_ASSERT(pDlg, "Dialogdiet fail!");
470                 sal_uInt16 nRet = pDlg->Execute();
471                 if(RET_OK == nRet)
472                 {
473                     rReq.Done( *( pDlg->GetOutputItemSet() ) );
474                     aNewAttr.Put(*pDlg->GetOutputItemSet());
475                 }
476                 delete( pDlg );
477                 if(RET_OK != nRet)
478                     return;
479             }
480             else
481                 aNewAttr.Put(*pArgs);
482         }
483         break;
484         case SID_AUTOSPELL_CHECK:
485         {
486 //!! JP 16.03.2001: why??           pSdrView = rSh.GetDrawView();
487 //!! JP 16.03.2001: why??           pOutliner = pSdrView->GetTextEditOutliner();
488             SdrOutliner * pOutliner = pSdrView->GetTextEditOutliner();
489             sal_uInt32 nCtrl = pOutliner->GetControlWord();
490 
491             sal_Bool bSet = ((const SfxBoolItem&)rReq.GetArgs()->Get(
492                                                     nSlot)).GetValue();
493             if(bSet)
494                 nCtrl |= EE_CNTRL_ONLINESPELLING|EE_CNTRL_ALLOWBIGOBJS;
495             else
496                 nCtrl &= ~EE_CNTRL_ONLINESPELLING;
497             pOutliner->SetControlWord(nCtrl);
498 
499             rView.ExecuteSlot(rReq);
500         }
501         break;
502         case SID_HYPERLINK_SETLINK:
503         {
504             const SfxPoolItem* pItem = 0;
505             if(pNewAttrs)
506                 pNewAttrs->GetItemState(nSlot, sal_False, &pItem);
507 
508             if(pItem)
509             {
510                 const SvxHyperlinkItem& rHLinkItem = *(const SvxHyperlinkItem *)pItem;
511                 SvxURLField aFld(rHLinkItem.GetURL(), rHLinkItem.GetName(), SVXURLFORMAT_APPDEFAULT);
512                 aFld.SetTargetFrame(rHLinkItem.GetTargetFrame());
513 
514                 const SvxFieldItem* pFieldItem = pOLV->GetFieldAtSelection();
515 
516                 if (pFieldItem && pFieldItem->GetField()->ISA(SvxURLField))
517                 {
518                     // Feld selektieren, so dass es beim Insert geloescht wird
519                     ESelection aSel = pOLV->GetSelection();
520                     aSel.nEndPos++;
521                     pOLV->SetSelection(aSel);
522                 }
523                 pOLV->InsertField(SvxFieldItem(aFld, EE_FEATURE_FIELD));
524             }
525         }
526         break;
527 
528         case SID_TEXTDIRECTION_LEFT_TO_RIGHT:
529         case SID_TEXTDIRECTION_TOP_TO_BOTTOM:
530             // Shellwechsel!
531             {
532                 SdrObject* pTmpObj = pSdrView->GetMarkedObjectList().GetMark(0)->GetMarkedSdrObj();
533                 SdrPageView* pTmpPV = pSdrView->GetSdrPageView();
534                 SdrView* pTmpView = pSdrView;
535 
536                 pSdrView->SdrEndTextEdit(sal_True);
537 
538                 SfxItemSet aAttr( *aNewAttr.GetPool(),
539                             SDRATTR_TEXTDIRECTION,
540                             SDRATTR_TEXTDIRECTION );
541 
542                 aAttr.Put( SvxWritingModeItem(
543                     nSlot == SID_TEXTDIRECTION_LEFT_TO_RIGHT ?
544                         text::WritingMode_LR_TB
545                         : text::WritingMode_TB_RL, SDRATTR_TEXTDIRECTION ) );
546                 pTmpView->SetAttributes( aAttr );
547 
548                 rSh.GetView().BeginTextEdit( pTmpObj, pTmpPV, &rSh.GetView().GetEditWin(), sal_False);
549                 rSh.GetView().AttrChangedNotify( &rSh );
550             }
551             return;
552 
553         case SID_ATTR_PARA_LEFT_TO_RIGHT:
554         case SID_ATTR_PARA_RIGHT_TO_LEFT:
555         {
556             SdrObject* pTmpObj = pSdrView->GetMarkedObjectList().GetMark(0)->GetMarkedSdrObj();
557             SdrPageView* pTmpPV = pSdrView->GetSdrPageView();
558             SdrView* pTmpView = pSdrView;
559 
560             pSdrView->SdrEndTextEdit(sal_True);
561             sal_Bool bLeftToRight = nSlot == SID_ATTR_PARA_LEFT_TO_RIGHT;
562 
563             const SfxPoolItem* pPoolItem;
564             if( pNewAttrs && SFX_ITEM_SET == pNewAttrs->GetItemState( nSlot, sal_True, &pPoolItem ) )
565             {
566                 if( !( (SfxBoolItem*)pPoolItem)->GetValue() )
567                     bLeftToRight = !bLeftToRight;
568             }
569             SfxItemSet aAttr( *aNewAttr.GetPool(),
570                         EE_PARA_JUST, EE_PARA_JUST,
571                         EE_PARA_WRITINGDIR, EE_PARA_WRITINGDIR,
572                         0 );
573 
574             sal_uInt16 nAdjust = SVX_ADJUST_LEFT;
575             if( SFX_ITEM_ON == aEditAttr.GetItemState(EE_PARA_JUST, sal_True, &pPoolItem ) )
576                 nAdjust = ( (SvxAdjustItem*)pPoolItem)->GetEnumValue();
577 
578             if( bLeftToRight )
579             {
580                 aAttr.Put( SvxFrameDirectionItem( FRMDIR_HORI_LEFT_TOP, EE_PARA_WRITINGDIR ) );
581                 if( nAdjust == SVX_ADJUST_RIGHT )
582                     aAttr.Put( SvxAdjustItem( SVX_ADJUST_LEFT, EE_PARA_JUST ) );
583             }
584             else
585             {
586                 aAttr.Put( SvxFrameDirectionItem( FRMDIR_HORI_RIGHT_TOP, EE_PARA_WRITINGDIR ) );
587                 if( nAdjust == SVX_ADJUST_LEFT )
588                     aAttr.Put( SvxAdjustItem( SVX_ADJUST_RIGHT, EE_PARA_JUST ) );
589             }
590             pTmpView->SetAttributes( aAttr );
591             rSh.GetView().BeginTextEdit( pTmpObj, pTmpPV, &rSh.GetView().GetEditWin(), sal_False );
592             rSh.GetView().AttrChangedNotify( &rSh );
593         }
594         return;
595         default:
596             ASSERT(!this, falscher Dispatcher);
597             return;
598     }
599     if(nEEWhich && pNewAttrs)
600         aNewAttr.Put(pNewAttrs->Get(nWhich), nEEWhich);
601 
602     SetAttrToMarked(aNewAttr);
603 
604     GetView().GetViewFrame()->GetBindings().InvalidateAll(sal_False);
605 
606     if (IsTextEdit() && pOLV->GetOutliner()->IsModified())
607         rSh.SetModified();
608 
609     if (bRestoreSelection)
610     {
611         // restore selection
612         pOLV->GetEditView().SetSelection( aOldSelection );
613     }
614 }
615 
616 /*--------------------------------------------------------------------
617     Beschreibung:
618  --------------------------------------------------------------------*/
619 
GetState(SfxItemSet & rSet)620 void SwDrawTextShell::GetState(SfxItemSet& rSet)
621 {
622     if (!IsTextEdit())  // Sonst manchmal Absturz!
623         return;
624 
625     OutlinerView* pOLV = pSdrView->GetTextEditOutlinerView();
626     SfxWhichIter aIter(rSet);
627     sal_uInt16 nWhich = aIter.FirstWhich();
628 
629     SfxItemSet aEditAttr( pOLV->GetAttribs() );
630     const SfxPoolItem *pAdjust = 0, *pLSpace = 0, *pEscItem = 0;
631     int eAdjust, nLSpace, nEsc;
632 
633     while(nWhich)
634     {
635         sal_uInt16 nSlotId = GetPool().GetSlotId( nWhich );
636         sal_Bool bFlag = sal_False;
637         switch( nSlotId )
638         {
639             case SID_LANGUAGE_STATUS://20412:
640             {
641                 nSlotId = SwLangHelper::GetLanguageStatus(pOLV,rSet);;
642                 break;
643             }
644 
645             case SID_THES:
646             {
647                 String          aStatusVal;
648                 LanguageType    nLang = LANGUAGE_NONE;
649                 bool bIsLookUpWord = GetStatusValueForThesaurusFromContext( aStatusVal, nLang, pOLV->GetEditView() );
650                 rSet.Put( SfxStringItem( SID_THES, aStatusVal ) );
651 
652                 // disable "Thesaurus" context menu entry if there is nothing to look up
653                 uno::Reference< linguistic2::XThesaurus >  xThes( ::GetThesaurus() );
654                 lang::Locale aLocale( SvxCreateLocale( nLang ) );
655                 if (!bIsLookUpWord ||
656                     !xThes.is() || nLang == LANGUAGE_NONE || !xThes->hasLocale( aLocale ))
657                     rSet.DisableItem( SID_THES );
658 
659                 //! avoid puting the same item as SfxBoolItem at the end of this function
660                 nSlotId = 0;
661                 break;
662             }
663 
664         case SID_ATTR_PARA_ADJUST_LEFT:     eAdjust = SVX_ADJUST_LEFT; goto ASK_ADJUST;
665         case SID_ATTR_PARA_ADJUST_RIGHT:    eAdjust = SVX_ADJUST_RIGHT; goto ASK_ADJUST;
666         case SID_ATTR_PARA_ADJUST_CENTER:   eAdjust = SVX_ADJUST_CENTER; goto ASK_ADJUST;
667         case SID_ATTR_PARA_ADJUST_BLOCK:    eAdjust = SVX_ADJUST_BLOCK; goto ASK_ADJUST;
668 ASK_ADJUST:
669             {
670                 if( !pAdjust )
671                     aEditAttr.GetItemState( EE_PARA_JUST, sal_False, &pAdjust);
672 
673                 if( !pAdjust || IsInvalidItem( pAdjust ))
674                     rSet.InvalidateItem( nSlotId ), nSlotId = 0;
675                 else
676                     bFlag = eAdjust == ((SvxAdjustItem*)pAdjust)->GetAdjust();
677             }
678             break;
679 
680         case SID_ATTR_PARA_LRSPACE:
681             {
682                 SfxItemState eState = aEditAttr.GetItemState(EE_PARA_LRSPACE);
683                 if( eState >= SFX_ITEM_DEFAULT )
684                 {
685                     SvxLRSpaceItem aLR = (const SvxLRSpaceItem&) aEditAttr.Get( EE_PARA_LRSPACE );
686                     aLR.SetWhich(SID_ATTR_PARA_LRSPACE);
687                     rSet.Put(aLR);
688                 }
689                 else
690                     rSet.InvalidateItem(nSlotId);
691                 nSlotId = 0;
692             }
693             break;
694         case SID_ATTR_PARA_LINESPACE:
695             {
696                 SfxItemState eState = aEditAttr.GetItemState(EE_PARA_SBL);
697                 if( eState >= SFX_ITEM_DEFAULT )
698                 {
699                     SvxLineSpacingItem aLR = (const SvxLineSpacingItem&) aEditAttr.Get( EE_PARA_SBL );
700                     rSet.Put(aLR);
701                 }
702                 else
703                     rSet.InvalidateItem(nSlotId);
704                 nSlotId = 0;
705             }
706             break;
707         case SID_ATTR_PARA_ULSPACE:
708             {
709                 SfxItemState eState = aEditAttr.GetItemState(EE_PARA_ULSPACE);
710                 if( eState >= SFX_ITEM_DEFAULT )
711                 {
712                     SvxULSpaceItem aULSpace = (const SvxULSpaceItem&) aEditAttr.Get( EE_PARA_ULSPACE );
713                     aULSpace.SetWhich(SID_ATTR_PARA_ULSPACE);
714                     rSet.Put(aULSpace);
715                 }
716                 else
717                     rSet.InvalidateItem(nSlotId);
718                 nSlotId = 0;
719             }
720             break;
721 
722         case SID_ATTR_PARA_LINESPACE_10:    nLSpace = 100;  goto ASK_LINESPACE;
723         case SID_ATTR_PARA_LINESPACE_15:    nLSpace = 150;  goto ASK_LINESPACE;
724         case SID_ATTR_PARA_LINESPACE_20:    nLSpace = 200;  goto ASK_LINESPACE;
725 ASK_LINESPACE:
726             {
727                 if( !pLSpace )
728                     aEditAttr.GetItemState( EE_PARA_SBL, sal_False, &pLSpace );
729 
730                 if( !pLSpace || IsInvalidItem( pLSpace ))
731                     rSet.InvalidateItem( nSlotId ), nSlotId = 0;
732                 else if( nLSpace == ((const SvxLineSpacingItem*)pLSpace)->
733                                                 GetPropLineSpace() )
734                     bFlag = sal_True;
735                 else
736                     nSlotId = 0;
737             }
738             break;
739 
740         case FN_SET_SUPER_SCRIPT:   nEsc = SVX_ESCAPEMENT_SUPERSCRIPT;
741                                     goto ASK_ESCAPE;
742         case FN_SET_SUB_SCRIPT:     nEsc = SVX_ESCAPEMENT_SUBSCRIPT;
743                                     goto ASK_ESCAPE;
744 ASK_ESCAPE:
745             {
746                 if( !pEscItem )
747                     pEscItem = &aEditAttr.Get( EE_CHAR_ESCAPEMENT );
748 
749                 if( nEsc == ((const SvxEscapementItem*)
750                                                 pEscItem)->GetEnumValue() )
751                     bFlag = sal_True;
752                 else
753                     nSlotId = 0;
754             }
755             break;
756 
757         case SID_THESAURUS:
758         {
759             // disable "Thesaurus" if the language is not supported
760             const SfxPoolItem &rItem = GetShell().GetDoc()->GetDefault(
761                             GetWhichOfScript( RES_CHRATR_LANGUAGE,
762                             GetI18NScriptTypeOfLanguage( (sal_uInt16)GetAppLanguage())) );
763             LanguageType nLang = ((const SvxLanguageItem &) rItem).GetLanguage();
764 
765             uno::Reference< linguistic2::XThesaurus >  xThes( ::GetThesaurus() );
766             if (!xThes.is() || nLang == LANGUAGE_NONE || !xThes->hasLocale( SvxCreateLocale( nLang ) ))
767                 rSet.DisableItem( SID_THESAURUS );
768             nSlotId = 0;
769         }
770         break;
771         case SID_HANGUL_HANJA_CONVERSION:
772         case SID_CHINESE_CONVERSION:
773         {
774             if (!SvtCJKOptions().IsAnyEnabled())
775             {
776                 GetView().GetViewFrame()->GetBindings().SetVisibleState( nWhich, sal_False );
777                 rSet.DisableItem(nWhich);
778             }
779             else
780                 GetView().GetViewFrame()->GetBindings().SetVisibleState( nWhich, sal_True );
781         }
782         break;
783 
784         case SID_TEXTDIRECTION_LEFT_TO_RIGHT:
785         case SID_TEXTDIRECTION_TOP_TO_BOTTOM:
786             if ( !SvtLanguageOptions().IsVerticalTextEnabled() )
787             {
788                 rSet.DisableItem( nSlotId );
789                 nSlotId = 0;
790             }
791             else
792             {
793                 SdrOutliner * pOutliner = pSdrView->GetTextEditOutliner();
794                 if( pOutliner )
795                     bFlag = pOutliner->IsVertical() ==
796                             (SID_TEXTDIRECTION_TOP_TO_BOTTOM == nSlotId);
797                 else
798                 {
799                     text::WritingMode eMode = (text::WritingMode)
800                                     ( (const SvxWritingModeItem&) aEditAttr.Get( SDRATTR_TEXTDIRECTION ) ).GetValue();
801 
802                     if( nSlotId == SID_TEXTDIRECTION_LEFT_TO_RIGHT )
803                     {
804                         bFlag = eMode == text::WritingMode_LR_TB;
805                     }
806                     else
807                     {
808                         bFlag = eMode != text::WritingMode_TB_RL;
809                     }
810                 }
811             }
812             break;
813         case SID_ATTR_PARA_LEFT_TO_RIGHT:
814         case SID_ATTR_PARA_RIGHT_TO_LEFT:
815         {
816             if ( !SvtLanguageOptions().IsCTLFontEnabled() )
817             {
818                 rSet.DisableItem( nWhich );
819                 nSlotId = 0;
820             }
821             else
822             {
823                 SdrOutliner * pOutliner = pSdrView->GetTextEditOutliner();
824                 if(pOutliner && pOutliner->IsVertical())
825                 {
826                     rSet.DisableItem( nWhich );
827                     nSlotId = 0;
828                 }
829                 else
830                 {
831                     switch( ( ( (SvxFrameDirectionItem&) aEditAttr.Get( EE_PARA_WRITINGDIR ) ) ).GetValue() )
832                     {
833                         case FRMDIR_HORI_LEFT_TOP:
834                             bFlag = nWhich == SID_ATTR_PARA_LEFT_TO_RIGHT;
835                         break;
836 
837                         case FRMDIR_HORI_RIGHT_TOP:
838                             bFlag = nWhich != SID_ATTR_PARA_LEFT_TO_RIGHT;
839                         break;
840                     }
841                 }
842             }
843         }
844         break;
845         case SID_TRANSLITERATE_HALFWIDTH:
846         case SID_TRANSLITERATE_FULLWIDTH:
847         case SID_TRANSLITERATE_HIRAGANA:
848         case SID_TRANSLITERATE_KATAGANA:
849         {
850             SvtCJKOptions aCJKOptions;
851             if(!aCJKOptions.IsChangeCaseMapEnabled())
852             {
853                 rSet.DisableItem(nWhich);
854                 GetView().GetViewFrame()->GetBindings().SetVisibleState( nWhich, sal_False );
855             }
856             else
857                 GetView().GetViewFrame()->GetBindings().SetVisibleState( nWhich, sal_True );
858         }
859         break;
860         case SID_INSERT_RLM :
861         case SID_INSERT_LRM :
862         case SID_INSERT_ZWNBSP :
863         case SID_INSERT_ZWSP:
864         {
865             SvtCTLOptions aCTLOptions;
866             sal_Bool bEnabled = aCTLOptions.IsCTLFontEnabled();
867             GetView().GetViewFrame()->GetBindings().SetVisibleState( nWhich, bEnabled );
868             if(!bEnabled)
869                 rSet.DisableItem(nWhich);
870         }
871         break;
872         default:
873             nSlotId = 0;                // don't know this slot
874             break;
875         }
876 
877         if( nSlotId )
878             rSet.Put( SfxBoolItem( nWhich, bFlag ));
879 
880         nWhich = aIter.NextWhich();
881     }
882 }
883 
884 /*--------------------------------------------------------------------
885     Beschreibung:
886  --------------------------------------------------------------------*/
GetDrawTxtCtrlState(SfxItemSet & rSet)887 void SwDrawTextShell::GetDrawTxtCtrlState(SfxItemSet& rSet)
888 {
889     if (!IsTextEdit())  // Sonst Absturz!
890         return;
891 
892     OutlinerView* pOLV = pSdrView->GetTextEditOutlinerView();
893     SfxItemSet aEditAttr(pOLV->GetAttribs());
894 
895     SfxWhichIter aIter(rSet);
896     sal_uInt16 nWhich = aIter.FirstWhich();
897     sal_uInt16 nScriptType = pOLV->GetSelectedScriptType();
898     while(nWhich)
899     {
900         sal_uInt16 nEEWhich = 0;
901         sal_uInt16 nSlotId = GetPool().GetSlotId( nWhich );
902         switch( nSlotId )
903         {
904             case SID_ATTR_CHAR_FONT:
905             case SID_ATTR_CHAR_FONTHEIGHT:
906             case SID_ATTR_CHAR_WEIGHT:
907             case SID_ATTR_CHAR_POSTURE:
908             {
909                 SfxItemPool* pEditPool = aEditAttr.GetPool()->GetSecondaryPool();
910                 if( !pEditPool )
911                     pEditPool = aEditAttr.GetPool();
912                 SvxScriptSetItem aSetItem( nSlotId, *pEditPool );
913                 aSetItem.GetItemSet().Put( aEditAttr, sal_False );
914                 const SfxPoolItem* pI = aSetItem.GetItemOfScript( nScriptType );
915                 if( pI )
916                     rSet.Put( *pI, nWhich );
917                 else
918                     rSet.InvalidateItem( nWhich );
919             }
920             break;
921             case SID_ATTR_CHAR_COLOR: nEEWhich = EE_CHAR_COLOR; break;
922             case SID_ATTR_CHAR_UNDERLINE: nEEWhich = EE_CHAR_UNDERLINE;break;
923             case SID_ATTR_CHAR_OVERLINE: nEEWhich = EE_CHAR_OVERLINE;break;
924             case SID_ATTR_CHAR_CONTOUR: nEEWhich = EE_CHAR_OUTLINE; break;
925             case SID_ATTR_CHAR_SHADOWED:  nEEWhich = EE_CHAR_SHADOW;break;
926             case SID_ATTR_CHAR_STRIKEOUT: nEEWhich = EE_CHAR_STRIKEOUT;break;
927             case SID_AUTOSPELL_CHECK:
928             {
929                 const SfxPoolItem* pState = rView.GetSlotState(nWhich);
930                 if (pState)
931                     rSet.Put(SfxBoolItem(nWhich, ((const SfxBoolItem*)pState)->GetValue()));
932                 else
933                     rSet.DisableItem( nWhich );
934                 break;
935             }
936             case SID_ATTR_CHAR_WORDLINEMODE: nEEWhich = EE_CHAR_WLM; break;
937             case SID_ATTR_CHAR_RELIEF      : nEEWhich = EE_CHAR_RELIEF;  break;
938             case SID_ATTR_CHAR_LANGUAGE    : nEEWhich = EE_CHAR_LANGUAGE;break;
939             case SID_ATTR_CHAR_KERNING     : nEEWhich = EE_CHAR_KERNING; break;
940             case SID_ATTR_CHAR_SCALEWIDTH:   nEEWhich = EE_CHAR_FONTWIDTH;break;
941             case SID_ATTR_CHAR_AUTOKERN  :   nEEWhich = EE_CHAR_PAIRKERNING; break;
942             case SID_ATTR_CHAR_ESCAPEMENT:   nEEWhich = EE_CHAR_ESCAPEMENT; break;
943         }
944         if(nEEWhich)
945             rSet.Put(aEditAttr.Get(nEEWhich, sal_True), nWhich);
946 
947         nWhich = aIter.NextWhich();
948     }
949 }
950 
951 /*--------------------------------------------------------------------
952     Beschreibung:
953  --------------------------------------------------------------------*/
ExecClpbrd(SfxRequest & rReq)954 void SwDrawTextShell::ExecClpbrd(SfxRequest &rReq)
955 {
956     if (!IsTextEdit())  // Sonst Absturz!
957         return;
958 
959     OutlinerView* pOLV = pSdrView->GetTextEditOutlinerView();
960 
961     ESelection aSel(pOLV->GetSelection());
962     const sal_Bool bCopy = (aSel.nStartPara != aSel.nEndPara) || (aSel.nStartPos != aSel.nEndPos);
963     sal_uInt16 nId = rReq.GetSlot();
964     switch( nId )
965     {
966         case SID_CUT:
967             if (bCopy)
968                 pOLV->Cut();
969             return;
970 
971         case SID_COPY:
972             if (bCopy)
973                 pOLV->Copy();
974             return;
975 
976         case SID_PASTE:
977             pOLV->PasteSpecial();
978             break;
979 
980         default:
981             DBG_ERROR("falscher Dispatcher");
982             return;
983     }
984 }
985 
986 /*--------------------------------------------------------------------
987     Beschreibung:   ClipBoard-Status
988  --------------------------------------------------------------------*/
StateClpbrd(SfxItemSet & rSet)989 void SwDrawTextShell::StateClpbrd(SfxItemSet &rSet)
990 {
991     if (!IsTextEdit())  // Sonst Absturz!
992         return;
993 
994     OutlinerView* pOLV = pSdrView->GetTextEditOutlinerView();
995     ESelection aSel(pOLV->GetSelection());
996     const sal_Bool bCopy = (aSel.nStartPara != aSel.nEndPara) ||
997         (aSel.nStartPos != aSel.nEndPos);
998 
999 
1000     SfxWhichIter aIter(rSet);
1001     sal_uInt16 nWhich = aIter.FirstWhich();
1002 
1003     while(nWhich)
1004     {
1005         switch(nWhich)
1006         {
1007         case SID_CUT:
1008         case SID_COPY:
1009             if( !bCopy )
1010                 rSet.DisableItem( nWhich );
1011             break;
1012 
1013         case SID_PASTE:
1014             {
1015                 TransferableDataHelper aDataHelper(
1016                     TransferableDataHelper::CreateFromSystemClipboard( &GetView().GetEditWin() ) );
1017 
1018                 if( !aDataHelper.GetXTransferable().is()
1019                     || !SwTransferable::IsPaste( GetShell(), aDataHelper ) )
1020                 {
1021                     rSet.DisableItem( nWhich );
1022                 }
1023             }
1024             break;
1025 
1026         case SID_PASTE_SPECIAL:
1027         case SID_CLIPBOARD_FORMAT_ITEMS:
1028             rSet.DisableItem( nWhich );
1029             break;
1030         }
1031 
1032         nWhich = aIter.NextWhich();
1033     }
1034 }
1035 
1036 /*--------------------------------------------------------------------
1037     Beschreibung:   Hyperlink-Status
1038  --------------------------------------------------------------------*/
1039 
StateInsert(SfxItemSet & rSet)1040 void SwDrawTextShell::StateInsert(SfxItemSet &rSet)
1041 {
1042     if (!IsTextEdit())  // Sonst Absturz!
1043         return;
1044 
1045     OutlinerView* pOLV = pSdrView->GetTextEditOutlinerView();
1046     SfxWhichIter aIter(rSet);
1047     sal_uInt16 nWhich = aIter.FirstWhich();
1048 
1049     while(nWhich)
1050     {
1051         switch(nWhich)
1052         {
1053             case SID_HYPERLINK_GETLINK:
1054                 {
1055                     SvxHyperlinkItem aHLinkItem;
1056                     aHLinkItem.SetInsertMode(HLINK_FIELD);
1057 
1058                     const SvxFieldItem* pFieldItem = pOLV->GetFieldAtSelection();
1059 
1060                     if (pFieldItem)
1061                     {
1062                         const SvxFieldData* pField = pFieldItem->GetField();
1063 
1064                         if (pField->ISA(SvxURLField))
1065                         {
1066                             aHLinkItem.SetName(((const SvxURLField*) pField)->GetRepresentation());
1067                             aHLinkItem.SetURL(((const SvxURLField*) pField)->GetURL());
1068                             aHLinkItem.SetTargetFrame(((const SvxURLField*) pField)->GetTargetFrame());
1069                         }
1070                     }
1071                     else
1072                     {
1073                         String sSel(pOLV->GetSelected());
1074                         sSel.Erase(255);
1075                         sSel.EraseTrailingChars();
1076                         aHLinkItem.SetName(sSel);
1077                     }
1078 
1079                     sal_uInt16 nHtmlMode = ::GetHtmlMode(GetView().GetDocShell());
1080                     aHLinkItem.SetInsertMode((SvxLinkInsertMode)(aHLinkItem.GetInsertMode() |
1081                         ((nHtmlMode & HTMLMODE_ON) != 0 ? HLINK_HTMLMODE : 0)));
1082 
1083                     rSet.Put(aHLinkItem);
1084                 }
1085                 break;
1086         }
1087         nWhich = aIter.NextWhich();
1088     }
1089 }
1090 
1091