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 "DrawViewShell.hxx"
21 : #include <com/sun/star/form/FormButtonType.hpp>
22 : #include <com/sun/star/beans/XPropertySet.hpp>
23 : #include <comphelper/string.hxx>
24 : #include <svx/svxids.hrc>
25 : #include <svx/globl3d.hxx>
26 : #include <svx/hlnkitem.hxx>
27 : #include <editeng/eeitem.hxx>
28 : #include <editeng/flditem.hxx>
29 : #include <sfx2/viewfrm.hxx>
30 : #include <svl/whiter.hxx>
31 : #include <svl/eitem.hxx>
32 : #include <svl/itempool.hxx>
33 : #include <sfx2/tplpitem.hxx>
34 : #include <sfx2/bindings.hxx>
35 : #include <sfx2/app.hxx>
36 : #include <sfx2/templdlg.hxx>
37 : #include <svx/xdef.hxx>
38 : #include <svx/svddef.hxx>
39 : #include <svx/fmglob.hxx>
40 : #include <svx/svdouno.hxx>
41 : #include <svx/fmshell.hxx>
42 : #include <svl/cjkoptions.hxx>
43 :
44 : #include "FrameView.hxx"
45 : #include "Outliner.hxx"
46 : #include "app.hrc"
47 :
48 : #include "sdmod.hxx"
49 : #include "stlsheet.hxx"
50 : #include "drawview.hxx"
51 : #include "drawdoc.hxx"
52 : #include "Window.hxx"
53 : #include "ViewShellBase.hxx"
54 : #include "FormShellManager.hxx"
55 : #include "cfgids.hxx"
56 : #include "anminfo.hxx"
57 :
58 : #include <editeng/lspcitem.hxx>
59 : #include <editeng/ulspitem.hxx>
60 : #include <editeng/lrspitem.hxx>
61 : #include <editeng/escapementitem.hxx>
62 : #include <editeng/numitem.hxx>
63 : #include <editeng/adjustitem.hxx>
64 : #include <svx/nbdtmgfact.hxx>
65 : #include <svx/nbdtmg.hxx>
66 : #include <boost/scoped_ptr.hpp>
67 :
68 : using namespace svx::sidebar;
69 : using namespace ::com::sun::star;
70 :
71 : namespace sd {
72 :
73 : /**
74 : * Set state of controller SfxSlots
75 : */
76 78 : void DrawViewShell::GetCtrlState(SfxItemSet &rSet)
77 : {
78 78 : if (rSet.GetItemState(SID_RELOAD) != SfxItemState::UNKNOWN)
79 : {
80 : // let "last version" of SFx en/disable
81 0 : GetViewFrame()->GetSlotState (SID_RELOAD, NULL, &rSet);
82 : }
83 :
84 78 : if (SfxItemState::DEFAULT == rSet.GetItemState(SID_HYPERLINK_GETLINK))
85 : {
86 0 : SvxHyperlinkItem aHLinkItem;
87 :
88 0 : OutlinerView* pOLV = mpDrawView->GetTextEditOutlinerView();
89 :
90 0 : if (pOLV)
91 : {
92 0 : bool bField = false;
93 0 : const SvxFieldItem* pFieldItem = pOLV->GetFieldAtSelection();
94 0 : if (pFieldItem)
95 : {
96 0 : ESelection aSel = pOLV->GetSelection();
97 0 : if ( abs( aSel.nEndPos - aSel.nStartPos ) == 1 )
98 : {
99 0 : const SvxFieldData* pField = pFieldItem->GetField();
100 0 : if (pField->ISA(SvxURLField))
101 : {
102 0 : aHLinkItem.SetName(static_cast<const SvxURLField*>(pField)->GetRepresentation());
103 0 : aHLinkItem.SetURL(static_cast<const SvxURLField*>(pField)->GetURL());
104 0 : aHLinkItem.SetTargetFrame(static_cast<const SvxURLField*>(pField)->GetTargetFrame());
105 0 : bField = true;
106 : }
107 : }
108 : }
109 0 : if (!bField)
110 : {
111 : // use selected text as name for urls
112 0 : OUString sReturn = pOLV->GetSelected();
113 0 : if (sReturn.getLength() > 255)
114 0 : sReturn = sReturn.copy(0, 255);
115 0 : aHLinkItem.SetName(comphelper::string::stripEnd(sReturn, ' '));
116 : }
117 : }
118 : else
119 : {
120 0 : if (mpDrawView->GetMarkedObjectList().GetMarkCount() > 0)
121 : {
122 0 : bool bFound = false;
123 :
124 0 : SdrObject* pMarkedObj = mpDrawView->GetMarkedObjectList().GetMark(0)->GetMarkedSdrObj();
125 0 : if( pMarkedObj && (FmFormInventor == pMarkedObj->GetObjInventor()) )
126 : {
127 0 : SdrUnoObj* pUnoCtrl = dynamic_cast< SdrUnoObj* >( pMarkedObj );
128 :
129 0 : if(pUnoCtrl) try
130 : {
131 0 : uno::Reference< awt::XControlModel > xControlModel( pUnoCtrl->GetUnoControlModel(), uno::UNO_QUERY_THROW );
132 0 : uno::Reference< beans::XPropertySet > xPropSet( xControlModel, uno::UNO_QUERY_THROW );
133 0 : uno::Reference< beans::XPropertySetInfo > xPropInfo( xPropSet->getPropertySetInfo(), uno::UNO_QUERY_THROW );
134 :
135 0 : form::FormButtonType eButtonType = form::FormButtonType_URL;
136 0 : const OUString sButtonType( "ButtonType" );
137 0 : if(xPropInfo->hasPropertyByName( sButtonType ) && (xPropSet->getPropertyValue( sButtonType ) >>= eButtonType ) )
138 : {
139 0 : OUString aString;
140 :
141 : // Label
142 0 : const OUString sLabel( "Label" );
143 0 : if(xPropInfo->hasPropertyByName(sLabel))
144 : {
145 0 : if( xPropSet->getPropertyValue(sLabel) >>= aString )
146 0 : aHLinkItem.SetName(aString);
147 : }
148 :
149 : // URL
150 0 : const OUString sTargetURL( "TargetURL" );
151 0 : if(xPropInfo->hasPropertyByName(sTargetURL))
152 : {
153 0 : if( xPropSet->getPropertyValue(sTargetURL) >>= aString )
154 0 : aHLinkItem.SetURL(aString);
155 : }
156 :
157 : // Target
158 0 : const OUString sTargetFrame( "TargetFrame" );
159 0 : if(xPropInfo->hasPropertyByName(sTargetFrame) )
160 : {
161 0 : if( xPropSet->getPropertyValue(sTargetFrame) >>= aString )
162 0 : aHLinkItem.SetTargetFrame(aString);
163 : }
164 :
165 0 : aHLinkItem.SetInsertMode(HLINK_BUTTON);
166 0 : bFound = true;
167 0 : }
168 : }
169 0 : catch( uno::Exception& )
170 : {
171 : }
172 : }
173 :
174 : // try interaction link
175 0 : if( !bFound && pMarkedObj )
176 : {
177 0 : SdAnimationInfo* pInfo = SdDrawDocument::GetShapeUserData(*pMarkedObj);
178 0 : if( pInfo && (pInfo->meClickAction == presentation::ClickAction_DOCUMENT) )
179 0 : aHLinkItem.SetURL( pInfo->GetBookmark());
180 0 : aHLinkItem.SetInsertMode(HLINK_BUTTON);
181 : }
182 : }
183 : }
184 :
185 0 : rSet.Put(aHLinkItem);
186 : }
187 78 : rSet.Put( SfxBoolItem( SID_READONLY_MODE, mbReadOnly ) );
188 :
189 : // output quality
190 234 : if( SfxItemState::DEFAULT == rSet.GetItemState( SID_OUTPUT_QUALITY_COLOR ) ||
191 156 : SfxItemState::DEFAULT == rSet.GetItemState( SID_OUTPUT_QUALITY_GRAYSCALE ) ||
192 234 : SfxItemState::DEFAULT == rSet.GetItemState( SID_OUTPUT_QUALITY_BLACKWHITE ) ||
193 78 : SfxItemState::DEFAULT == rSet.GetItemState( SID_OUTPUT_QUALITY_CONTRAST ) )
194 : {
195 0 : const sal_uLong nMode = (sal_Int32)GetActiveWindow()->GetDrawMode();
196 0 : rSet.Put( SfxBoolItem( SID_OUTPUT_QUALITY_COLOR, (sal_uLong)OUTPUT_DRAWMODE_COLOR == nMode ) );
197 0 : rSet.Put( SfxBoolItem( SID_OUTPUT_QUALITY_GRAYSCALE, (sal_uLong)OUTPUT_DRAWMODE_GRAYSCALE == nMode ) );
198 0 : rSet.Put( SfxBoolItem( SID_OUTPUT_QUALITY_BLACKWHITE, (sal_uLong)OUTPUT_DRAWMODE_BLACKWHITE == nMode ) );
199 0 : rSet.Put( SfxBoolItem( SID_OUTPUT_QUALITY_CONTRAST, (sal_uLong)OUTPUT_DRAWMODE_CONTRAST == nMode ) );
200 : }
201 :
202 78 : if ( SfxItemState::DEFAULT == rSet.GetItemState(SID_MAIL_SCROLLBODY_PAGEDOWN) )
203 : {
204 0 : rSet.Put( SfxBoolItem( SID_MAIL_SCROLLBODY_PAGEDOWN, true ) );
205 : }
206 :
207 78 : if ( SfxItemState::DEFAULT == rSet.GetItemState(SID_ATTR_YEAR2000) )
208 : {
209 0 : FmFormShell* pFormShell = GetViewShellBase().GetFormShellManager()->GetFormShell();
210 0 : if (pFormShell != NULL)
211 : {
212 0 : sal_uInt16 nState = 0;
213 0 : if (pFormShell->GetY2KState(nState))
214 0 : rSet.Put( SfxUInt16Item( SID_ATTR_YEAR2000, nState ) );
215 : else
216 0 : rSet.DisableItem( SID_ATTR_YEAR2000 );
217 : }
218 : }
219 :
220 78 : if ( !GetView()->GetTextEditOutliner() )
221 : {
222 78 : SvtCJKOptions aCJKOptions;
223 78 : if( !aCJKOptions.IsChangeCaseMapEnabled() )
224 : {
225 0 : GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_HALFWIDTH, false );
226 0 : GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_FULLWIDTH, false );
227 0 : GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_HIRAGANA, false );
228 0 : GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_KATAGANA, false );
229 : }
230 : else
231 : {
232 78 : GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_HALFWIDTH, true );
233 78 : GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_FULLWIDTH, true );
234 78 : GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_HIRAGANA, true );
235 78 : GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_KATAGANA, true );
236 : }
237 :
238 78 : rSet.DisableItem( SID_TRANSLITERATE_SENTENCE_CASE );
239 78 : rSet.DisableItem( SID_TRANSLITERATE_TITLE_CASE );
240 78 : rSet.DisableItem( SID_TRANSLITERATE_TOGGLE_CASE );
241 78 : rSet.DisableItem( SID_TRANSLITERATE_UPPER );
242 78 : rSet.DisableItem( SID_TRANSLITERATE_LOWER );
243 78 : rSet.DisableItem( SID_TRANSLITERATE_HALFWIDTH );
244 78 : rSet.DisableItem( SID_TRANSLITERATE_FULLWIDTH );
245 78 : rSet.DisableItem( SID_TRANSLITERATE_HIRAGANA );
246 78 : rSet.DisableItem( SID_TRANSLITERATE_KATAGANA );
247 : }
248 : else
249 : {
250 0 : SvtCJKOptions aCJKOptions;
251 0 : if( !aCJKOptions.IsChangeCaseMapEnabled() )
252 : {
253 0 : GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_HALFWIDTH, false );
254 0 : GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_FULLWIDTH, false );
255 0 : GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_HIRAGANA, false );
256 0 : GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_KATAGANA, false );
257 0 : rSet.DisableItem( SID_TRANSLITERATE_HALFWIDTH );
258 0 : rSet.DisableItem( SID_TRANSLITERATE_FULLWIDTH );
259 0 : rSet.DisableItem( SID_TRANSLITERATE_HIRAGANA );
260 0 : rSet.DisableItem( SID_TRANSLITERATE_KATAGANA );
261 : }
262 : else
263 : {
264 0 : GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_HALFWIDTH, true );
265 0 : GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_FULLWIDTH, true );
266 0 : GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_HIRAGANA, true );
267 0 : GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_KATAGANA, true );
268 0 : }
269 : }
270 78 : }
271 :
272 727 : void DrawViewShell::GetAttrState( SfxItemSet& rSet )
273 : {
274 727 : SfxWhichIter aIter( rSet );
275 727 : sal_uInt16 nWhich = aIter.FirstWhich();
276 :
277 727 : bool bAttr = false;
278 1454 : SfxAllItemSet aAllSet( *rSet.GetPool() );
279 :
280 2639 : while ( nWhich )
281 : {
282 1185 : sal_uInt16 nSlotId = SfxItemPool::IsWhich(nWhich)
283 770 : ? GetPool().GetSlotId(nWhich)
284 1955 : : nWhich;
285 1185 : switch ( nSlotId )
286 : {
287 : case SID_ATTR_PARA_ADJUST_LEFT:
288 : {
289 1 : SfxItemSet aAttrs( GetDoc()->GetPool() );
290 1 : mpDrawView->GetAttributes( aAttrs );
291 :
292 2 : SvxAdjustItem aItem= static_cast<const SvxAdjustItem&>( aAttrs.Get( EE_PARA_JUST ) );
293 1 : SvxAdjust eAdj = aItem.GetAdjust();
294 1 : if ( eAdj == SVX_ADJUST_LEFT)
295 : {
296 0 : rSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_LEFT, true ) );
297 : }
298 :
299 1 : bAttr = true;
300 :
301 2 : Invalidate(nSlotId);
302 : }
303 1 : break;
304 : case SID_ATTR_PARA_ADJUST_CENTER:
305 : {
306 1 : SfxItemSet aAttrs( GetDoc()->GetPool() );
307 1 : mpDrawView->GetAttributes( aAttrs );
308 :
309 2 : SvxAdjustItem aItem= static_cast<const SvxAdjustItem&>( aAttrs.Get( EE_PARA_JUST ) );
310 1 : SvxAdjust eAdj = aItem.GetAdjust();
311 1 : if ( eAdj == SVX_ADJUST_CENTER)
312 : {
313 1 : rSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_CENTER, true ) );
314 : }
315 :
316 1 : bAttr = true;
317 :
318 2 : Invalidate(nSlotId);
319 : }
320 1 : break;
321 : case SID_ATTR_PARA_ADJUST_RIGHT:
322 : {
323 1 : SfxItemSet aAttrs( GetDoc()->GetPool() );
324 1 : mpDrawView->GetAttributes( aAttrs );
325 :
326 2 : SvxAdjustItem aItem= static_cast<const SvxAdjustItem&>( aAttrs.Get( EE_PARA_JUST ) );
327 1 : SvxAdjust eAdj = aItem.GetAdjust();
328 1 : if ( eAdj == SVX_ADJUST_RIGHT)
329 : {
330 0 : rSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_RIGHT, true ) );
331 : }
332 :
333 1 : bAttr = true;
334 :
335 2 : Invalidate(nSlotId);
336 : }
337 1 : break;
338 : case SID_ATTR_PARA_ADJUST_BLOCK:
339 : {
340 1 : SfxItemSet aAttrs( GetDoc()->GetPool() );
341 1 : mpDrawView->GetAttributes( aAttrs );
342 :
343 2 : SvxAdjustItem aItem= static_cast<const SvxAdjustItem&>( aAttrs.Get( EE_PARA_JUST ) );
344 1 : SvxAdjust eAdj = aItem.GetAdjust();
345 1 : if ( eAdj == SVX_ADJUST_BLOCK)
346 : {
347 0 : rSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_BLOCK, true ) );
348 : }
349 :
350 1 : bAttr = true;
351 :
352 2 : Invalidate(nSlotId);
353 : }
354 1 : break;
355 : case SID_ATTR_PARA_LRSPACE:
356 : {
357 49 : SfxItemSet aAttrs( GetDoc()->GetPool() );
358 49 : mpDrawView->GetAttributes( aAttrs );
359 98 : SvxLRSpaceItem aLRSpace = static_cast<const SvxLRSpaceItem&>( aAttrs.Get( EE_PARA_LRSPACE ) );
360 49 : aLRSpace.SetWhich(SID_ATTR_PARA_LRSPACE);
361 49 : rSet.Put(aLRSpace);
362 49 : bAttr = true;
363 98 : Invalidate(SID_ATTR_PARA_LRSPACE);
364 : }
365 49 : break;
366 : case SID_ATTR_PARA_LINESPACE:
367 : {
368 1 : SfxItemSet aAttrs( GetDoc()->GetPool() );
369 1 : mpDrawView->GetAttributes( aAttrs );
370 2 : SvxLineSpacingItem aLineLR = static_cast<const SvxLineSpacingItem&>( aAttrs.Get( EE_PARA_SBL ) );
371 1 : rSet.Put(aLineLR);
372 1 : bAttr = true;
373 2 : Invalidate(SID_ATTR_PARA_LINESPACE);
374 : }
375 1 : break;
376 : case SID_ATTR_PARA_ULSPACE:
377 : {
378 0 : SfxItemSet aAttrs( GetDoc()->GetPool() );
379 0 : mpDrawView->GetAttributes( aAttrs );
380 0 : SvxULSpaceItem aULSP = static_cast<const SvxULSpaceItem&>( aAttrs.Get( EE_PARA_ULSPACE ) );
381 0 : aULSP.SetWhich(SID_ATTR_PARA_ULSPACE);
382 0 : rSet.Put(aULSP);
383 0 : bAttr = true;
384 0 : Invalidate(SID_ATTR_PARA_ULSPACE);
385 : }
386 0 : break;
387 : case SID_ATTR_FILL_STYLE:
388 : case SID_ATTR_FILL_COLOR:
389 : case SID_ATTR_FILL_GRADIENT:
390 : case SID_ATTR_FILL_HATCH:
391 : case SID_ATTR_FILL_BITMAP:
392 : case SID_ATTR_FILL_SHADOW:
393 : case SID_ATTR_FILL_TRANSPARENCE:
394 : case SID_ATTR_FILL_FLOATTRANSPARENCE:
395 : case SID_ATTR_LINE_STYLE:
396 : case SID_ATTR_LINE_DASH:
397 : case SID_ATTR_LINE_WIDTH:
398 : case SID_ATTR_LINE_COLOR:
399 : case SID_ATTR_LINE_TRANSPARENCE:
400 : case SID_ATTR_LINE_JOINT:
401 : case SID_ATTR_LINE_CAP:
402 : case SID_ATTR_TEXT_FITTOSIZE:
403 : case SID_ATTR_CHAR_FONT:
404 : case SID_ATTR_CHAR_FONTHEIGHT:
405 : case SID_ATTR_CHAR_SHADOWED:
406 : case SID_ATTR_CHAR_POSTURE:
407 : case SID_ATTR_CHAR_UNDERLINE:
408 : case SID_ATTR_CHAR_STRIKEOUT:
409 : case SID_ATTR_CHAR_WEIGHT:
410 : case SID_ATTR_CHAR_COLOR:
411 : case SID_ATTR_CHAR_KERNING:
412 : case SID_ATTR_CHAR_CASEMAP:
413 : case SID_SET_SUB_SCRIPT:
414 : case SID_SET_SUPER_SCRIPT:
415 : {
416 770 : bAttr = true;
417 : }
418 770 : break;
419 :
420 : case SID_HYPHENATION:
421 : {
422 0 : SfxItemSet aAttrs( GetDoc()->GetPool() );
423 0 : mpDrawView->GetAttributes( aAttrs );
424 0 : if( aAttrs.GetItemState( EE_PARA_HYPHENATE ) >= SfxItemState::DEFAULT )
425 : {
426 0 : bool bValue = static_cast<const SfxBoolItem&>( aAttrs.Get( EE_PARA_HYPHENATE ) ).GetValue();
427 0 : rSet.Put( SfxBoolItem( SID_HYPHENATION, bValue ) );
428 0 : }
429 : }
430 0 : break;
431 :
432 : case SID_STYLE_FAMILY2:
433 : case SID_STYLE_FAMILY3:
434 : case SID_STYLE_FAMILY5:
435 : case SID_STYLE_APPLY: // StyleControl
436 : {
437 0 : SfxStyleSheet* pStyleSheet = mpDrawView->GetStyleSheet();
438 0 : if( pStyleSheet )
439 : {
440 0 : if( nSlotId != SID_STYLE_APPLY && !mpDrawView->AreObjectsMarked() )
441 : {
442 0 : SfxTemplateItem aTmpItem( nWhich, OUString() );
443 0 : aAllSet.Put( aTmpItem, aTmpItem.Which() );
444 : }
445 : else
446 : {
447 0 : if (pStyleSheet->GetFamily() == SD_STYLE_FAMILY_MASTERPAGE)
448 0 : pStyleSheet = static_cast<SdStyleSheet*>(pStyleSheet)->GetPseudoStyleSheet();
449 :
450 0 : if( pStyleSheet )
451 : {
452 0 : SfxStyleFamily eFamily = pStyleSheet->GetFamily();
453 :
454 0 : if ((eFamily == SD_STYLE_FAMILY_GRAPHICS && nSlotId == SID_STYLE_FAMILY2) ||
455 0 : (eFamily == SD_STYLE_FAMILY_CELL && nSlotId == SID_STYLE_FAMILY3) ||
456 0 : (eFamily == SD_STYLE_FAMILY_PSEUDO && nSlotId == SID_STYLE_FAMILY5))
457 : {
458 0 : SfxTemplateItem aTmpItem ( nWhich, pStyleSheet->GetName() );
459 0 : aAllSet.Put( aTmpItem, aTmpItem.Which() );
460 : }
461 : else
462 : {
463 0 : SfxTemplateItem aTmpItem(nWhich, OUString());
464 0 : aAllSet.Put(aTmpItem,aTmpItem.Which() );
465 : }
466 : }
467 : }
468 : }
469 : else
470 0 : { SfxTemplateItem aItem( nWhich, OUString() );
471 0 : aAllSet.Put( aItem, aItem.Which() );
472 : }
473 : }
474 0 : break;
475 :
476 : case SID_SET_DEFAULT:
477 : {
478 0 : if( !mpDrawView->GetMarkedObjectList().GetMarkCount() ||
479 0 : ( !mpDrawView->IsTextEdit() && !mpDrawView->GetStyleSheet() )
480 : )
481 0 : rSet.DisableItem( nWhich );
482 : }
483 0 : break;
484 :
485 : case SID_STYLE_WATERCAN:
486 : {
487 0 : SfxPoolItem* pItem = NULL;
488 0 : GetViewFrame()->GetBindings().QueryState(SID_STYLE_FAMILY, pItem);
489 0 : SfxUInt16Item* pFamilyItem = dynamic_cast<SfxUInt16Item*>(pItem);
490 0 : if (pFamilyItem && SfxTemplate::NIdToSfxFamilyId(pFamilyItem->GetValue()) == SD_STYLE_FAMILY_PSEUDO)
491 0 : rSet.Put(SfxBoolItem(nWhich,false));
492 : else
493 : {
494 0 : SfxBoolItem aItem(nWhich, SD_MOD()->GetWaterCan());
495 0 : aAllSet.Put( aItem, aItem.Which());
496 : }
497 0 : delete pItem;
498 : }
499 0 : break;
500 :
501 : case SID_STYLE_NEW:
502 : {
503 0 : SfxPoolItem* pItem = NULL;
504 0 : GetViewFrame()->GetBindings().QueryState(SID_STYLE_FAMILY, pItem);
505 0 : SfxUInt16Item* pFamilyItem = dynamic_cast<SfxUInt16Item*>(pItem);
506 0 : if (pFamilyItem && SfxTemplate::NIdToSfxFamilyId(pFamilyItem->GetValue()) == SD_STYLE_FAMILY_PSEUDO)
507 : {
508 0 : rSet.DisableItem(nWhich);
509 : }
510 0 : delete pItem;
511 : }
512 0 : break;
513 :
514 : case SID_STYLE_DRAGHIERARCHIE:
515 : {
516 0 : SfxPoolItem* pItem = NULL;
517 0 : GetViewFrame()->GetBindings().QueryState(SID_STYLE_FAMILY, pItem);
518 0 : SfxUInt16Item* pFamilyItem = dynamic_cast<SfxUInt16Item*>(pItem);
519 0 : if (pFamilyItem && SfxTemplate::NIdToSfxFamilyId(pFamilyItem->GetValue()) == SD_STYLE_FAMILY_PSEUDO)
520 0 : rSet.DisableItem(nWhich);
521 0 : delete pItem;
522 : }
523 0 : break;
524 :
525 : case SID_STYLE_NEW_BY_EXAMPLE:
526 : {
527 : // It is not possible to create PseudoStyleSheets 'by Example';
528 : // normal style sheets need a selected object for that
529 :
530 0 : SfxPoolItem* pItem = NULL;
531 0 : GetViewFrame()->GetBindings().QueryState(SID_STYLE_FAMILY, pItem);
532 0 : SfxUInt16Item* pFamilyItem = dynamic_cast<SfxUInt16Item*>(pItem);
533 0 : if (pFamilyItem)
534 : {
535 0 : if (SfxTemplate::NIdToSfxFamilyId(pFamilyItem->GetValue()) == SD_STYLE_FAMILY_PSEUDO)
536 : {
537 0 : rSet.DisableItem(nWhich);
538 : }
539 0 : else if (SfxTemplate::NIdToSfxFamilyId(pFamilyItem->GetValue()) == SD_STYLE_FAMILY_GRAPHICS)
540 : {
541 0 : if (!mpDrawView->AreObjectsMarked())
542 : {
543 0 : rSet.DisableItem(nWhich);
544 : }
545 : }
546 : }
547 : // if there is no (yet) a style designer, we have to go back into the
548 : // view state; an actual set family can not be considered
549 : else
550 : {
551 0 : if (!mpDrawView->AreObjectsMarked())
552 : {
553 0 : rSet.DisableItem(nWhich);
554 : }
555 : }
556 0 : delete pItem;
557 : }
558 0 : break;
559 :
560 : case SID_STYLE_UPDATE_BY_EXAMPLE:
561 : {
562 0 : if (!mpDrawView->AreObjectsMarked())
563 : {
564 0 : rSet.DisableItem(nWhich);
565 : }
566 : }
567 0 : break;
568 : case FN_BUL_NUM_RULE_INDEX:
569 : case FN_NUM_NUM_RULE_INDEX:
570 : {
571 0 : SfxItemSet aEditAttr( GetDoc()->GetPool() );
572 0 : mpDrawView->GetAttributes( aEditAttr );
573 :
574 0 : SfxItemSet aNewAttr( GetPool(), EE_ITEMS_START, EE_ITEMS_END );
575 0 : aNewAttr.Put( aEditAttr, false );
576 :
577 0 : boost::scoped_ptr<SvxNumRule> pNumRule;
578 0 : const SfxPoolItem* pTmpItem=NULL;
579 0 : sal_uInt16 nNumItemId = SID_ATTR_NUMBERING_RULE;
580 0 : sal_uInt16 nActNumLvl = mpDrawView->GetSelectionLevel();
581 0 : pTmpItem=GetNumBulletItem(aNewAttr, nNumItemId);
582 :
583 0 : if (pTmpItem)
584 0 : pNumRule.reset(new SvxNumRule(*static_cast<const SvxNumBulletItem*>(pTmpItem)->GetNumRule()));
585 :
586 0 : if ( pNumRule )
587 : {
588 0 : sal_uInt16 nMask = 1;
589 0 : sal_uInt16 nCount = 0;
590 0 : sal_uInt16 nCurLevel = (sal_uInt16)0xFFFF;
591 0 : for(sal_uInt16 i = 0; i < pNumRule->GetLevelCount(); i++)
592 : {
593 0 : if(nActNumLvl & nMask)
594 : {
595 0 : nCount++;
596 0 : nCurLevel = i;
597 : }
598 0 : nMask <<= 1;
599 : }
600 0 : if ( nCount == 1 )
601 : {
602 0 : const SvxNumberFormat* pNumFmt = pNumRule->Get(nCurLevel);
603 0 : if ( pNumFmt )
604 : {
605 0 : bool bBullets = false;
606 0 : switch(pNumFmt->GetNumberingType())
607 : {
608 : case SVX_NUM_CHAR_SPECIAL:
609 : case SVX_NUM_BITMAP:
610 0 : bBullets = true;
611 0 : break;
612 :
613 : default:
614 0 : bBullets = false;
615 : }
616 :
617 0 : rSet.Put(SfxUInt16Item(FN_BUL_NUM_RULE_INDEX,(sal_uInt16)0xFFFF));
618 0 : rSet.Put(SfxUInt16Item(FN_NUM_NUM_RULE_INDEX,(sal_uInt16)0xFFFF));
619 0 : if ( bBullets )
620 : {
621 0 : NBOTypeMgrBase* pBullets = NBOutlineTypeMgrFact::CreateInstance(eNBOType::BULLETS);
622 0 : if ( pBullets )
623 : {
624 0 : sal_uInt16 nBulIndex = pBullets->GetNBOIndexForNumRule(*pNumRule,nActNumLvl);
625 0 : rSet.Put(SfxUInt16Item(FN_BUL_NUM_RULE_INDEX,nBulIndex));
626 : }
627 : }else
628 : {
629 0 : NBOTypeMgrBase* pNumbering = NBOutlineTypeMgrFact::CreateInstance(eNBOType::NUMBERING);
630 0 : if ( pNumbering )
631 : {
632 0 : sal_uInt16 nBulIndex = pNumbering->GetNBOIndexForNumRule(*pNumRule,nActNumLvl);
633 0 : rSet.Put(SfxUInt16Item(FN_NUM_NUM_RULE_INDEX,nBulIndex));
634 : }
635 : }
636 : }
637 : }
638 0 : }
639 : }
640 0 : break;
641 : case FN_NUM_BULLET_ON:
642 : case FN_NUM_NUMBERING_ON:
643 : {
644 2 : bool bEnable = false;
645 2 : const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList();
646 2 : const size_t nMarkCount = rMarkList.GetMarkCount();
647 2 : for (size_t nIndex = 0; nIndex < nMarkCount; ++nIndex)
648 : {
649 2 : SdrTextObj* pTextObj = dynamic_cast< SdrTextObj* >(rMarkList.GetMark(nIndex)->GetMarkedSdrObj());
650 2 : if (pTextObj && pTextObj->GetObjInventor() == SdrInventor)
651 : {
652 2 : if (pTextObj->GetObjIdentifier() != OBJ_OLE2)
653 : {
654 2 : bEnable = true;
655 2 : break;
656 : }
657 : }
658 : }
659 2 : if (bEnable)
660 : {
661 2 : rSet.Put(SfxBoolItem(FN_NUM_BULLET_ON, false));
662 2 : rSet.Put(SfxBoolItem(FN_NUM_NUMBERING_ON, false));
663 : }
664 : else
665 : {
666 0 : rSet.DisableItem(FN_NUM_BULLET_ON);
667 0 : rSet.DisableItem(FN_NUM_NUMBERING_ON);
668 : }
669 : }
670 2 : break;
671 : }
672 1185 : nWhich = aIter.NextWhich();
673 : }
674 :
675 727 : boost::scoped_ptr<SfxItemSet> pSet;
676 :
677 727 : if( bAttr )
678 : {
679 526 : pSet.reset(new SfxItemSet( GetDoc()->GetPool() ));
680 526 : mpDrawView->GetAttributes( *pSet );
681 526 : rSet.Put( *pSet, false );
682 : }
683 :
684 727 : rSet.Put( aAllSet, false );
685 :
686 : // there were changes at area and/or line attributes
687 727 : if( bAttr && pSet )
688 : {
689 : // if the view owns selected objects, corresponding items have to be
690 : // changed from SfxItemState::DEFAULT (_ON) to SfxItemState::DISABLED
691 526 : if( mpDrawView->AreObjectsMarked() )
692 : {
693 19 : SfxWhichIter aNewIter( *pSet, XATTR_LINE_FIRST, XATTR_FILL_LAST );
694 19 : nWhich = aNewIter.FirstWhich();
695 684 : while( nWhich )
696 : {
697 646 : if( SfxItemState::DEFAULT == pSet->GetItemState( nWhich ) )
698 : {
699 0 : rSet.ClearItem( nWhich );
700 0 : rSet.DisableItem( nWhich );
701 : }
702 646 : nWhich = aNewIter.NextWhich();
703 19 : }
704 : }
705 :
706 526 : SfxItemState eState = pSet->GetItemState( EE_PARA_LRSPACE );
707 526 : if ( eState == SfxItemState::DONTCARE )
708 : {
709 0 : rSet.InvalidateItem(EE_PARA_LRSPACE);
710 0 : rSet.InvalidateItem(SID_ATTR_PARA_LRSPACE);
711 : }
712 526 : eState = pSet->GetItemState( EE_PARA_SBL );
713 526 : if ( eState == SfxItemState::DONTCARE )
714 : {
715 0 : rSet.InvalidateItem(EE_PARA_SBL);
716 0 : rSet.InvalidateItem(SID_ATTR_PARA_LINESPACE);
717 : }
718 526 : eState = pSet->GetItemState( EE_PARA_ULSPACE );
719 526 : if ( eState == SfxItemState::DONTCARE )
720 : {
721 0 : rSet.InvalidateItem(EE_PARA_ULSPACE);
722 0 : rSet.InvalidateItem(SID_ATTR_PARA_ULSPACE);
723 : }
724 :
725 : SvxEscapement eEsc = (SvxEscapement) static_cast<const SvxEscapementItem&>(
726 526 : pSet->Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue();
727 526 : if( eEsc == SVX_ESCAPEMENT_SUPERSCRIPT )
728 : {
729 0 : rSet.Put( SfxBoolItem( SID_SET_SUPER_SCRIPT, true ) );
730 : }
731 526 : else if( eEsc == SVX_ESCAPEMENT_SUBSCRIPT )
732 : {
733 0 : rSet.Put( SfxBoolItem( SID_SET_SUB_SCRIPT, true ) );
734 : }
735 :
736 526 : eState = pSet->GetItemState( EE_CHAR_KERNING, true );
737 526 : if ( eState == SfxItemState::DONTCARE )
738 : {
739 0 : rSet.InvalidateItem(EE_CHAR_KERNING);
740 0 : rSet.InvalidateItem(SID_ATTR_CHAR_KERNING);
741 : }
742 1454 : }
743 727 : }
744 :
745 0 : OUString DrawViewShell::GetSelectionText(bool bCompleteWords)
746 : {
747 0 : OUString aStrSelection;
748 0 : ::Outliner* pOl = mpDrawView->GetTextEditOutliner();
749 0 : OutlinerView* pOlView = mpDrawView->GetTextEditOutlinerView();
750 :
751 0 : if (pOl && pOlView)
752 : {
753 0 : if (bCompleteWords)
754 : {
755 0 : ESelection aSel = pOlView->GetSelection();
756 0 : OUString aStrCurrentDelimiters = pOl->GetWordDelimiters();
757 :
758 0 : pOl->SetWordDelimiters(" .,;\"'");
759 0 : aStrSelection = pOl->GetWord( aSel.nEndPara, aSel.nEndPos );
760 0 : pOl->SetWordDelimiters( aStrCurrentDelimiters );
761 : }
762 : else
763 : {
764 0 : aStrSelection = pOlView->GetSelected();
765 : }
766 : }
767 :
768 0 : return aStrSelection;
769 : }
770 :
771 0 : bool DrawViewShell::HasSelection(bool bText) const
772 : {
773 0 : bool bReturn = false;
774 :
775 0 : if (bText)
776 : {
777 0 : OutlinerView* pOlView = mpDrawView->GetTextEditOutlinerView();
778 :
779 0 : if (pOlView && !pOlView->GetSelected().isEmpty())
780 : {
781 0 : bReturn = true;
782 : }
783 : }
784 0 : else if (mpDrawView->GetMarkedObjectList().GetMarkCount() != 0)
785 : {
786 0 : bReturn = true;
787 : }
788 :
789 0 : return bReturn;
790 : }
791 :
792 66 : } // end of namespace sd
793 :
794 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|