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 155 : void DrawViewShell::GetCtrlState(SfxItemSet &rSet)
77 : {
78 155 : 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 155 : 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(((const SvxURLField*) pField)->GetRepresentation());
103 0 : aHLinkItem.SetURL(((const SvxURLField*) pField)->GetURL());
104 0 : aHLinkItem.SetTargetFrame(((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 155 : rSet.Put( SfxBoolItem( SID_READONLY_MODE, mbReadOnly ) );
188 :
189 : // output quality
190 465 : if( SfxItemState::DEFAULT == rSet.GetItemState( SID_OUTPUT_QUALITY_COLOR ) ||
191 310 : SfxItemState::DEFAULT == rSet.GetItemState( SID_OUTPUT_QUALITY_GRAYSCALE ) ||
192 465 : SfxItemState::DEFAULT == rSet.GetItemState( SID_OUTPUT_QUALITY_BLACKWHITE ) ||
193 155 : 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 155 : if ( SfxItemState::DEFAULT == rSet.GetItemState(SID_MAIL_SCROLLBODY_PAGEDOWN) )
203 : {
204 0 : rSet.Put( SfxBoolItem( SID_MAIL_SCROLLBODY_PAGEDOWN, true ) );
205 : }
206 :
207 155 : 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 155 : if ( !GetView()->GetTextEditOutliner() )
221 : {
222 155 : SvtCJKOptions aCJKOptions;
223 155 : 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 155 : GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_HALFWIDTH, true );
233 155 : GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_FULLWIDTH, true );
234 155 : GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_HIRAGANA, true );
235 155 : GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_KATAGANA, true );
236 : }
237 :
238 155 : rSet.DisableItem( SID_TRANSLITERATE_SENTENCE_CASE );
239 155 : rSet.DisableItem( SID_TRANSLITERATE_TITLE_CASE );
240 155 : rSet.DisableItem( SID_TRANSLITERATE_TOGGLE_CASE );
241 155 : rSet.DisableItem( SID_TRANSLITERATE_UPPER );
242 155 : rSet.DisableItem( SID_TRANSLITERATE_LOWER );
243 155 : rSet.DisableItem( SID_TRANSLITERATE_HALFWIDTH );
244 155 : rSet.DisableItem( SID_TRANSLITERATE_FULLWIDTH );
245 155 : rSet.DisableItem( SID_TRANSLITERATE_HIRAGANA );
246 155 : 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 155 : }
271 :
272 923 : void DrawViewShell::GetAttrState( SfxItemSet& rSet )
273 : {
274 923 : SfxWhichIter aIter( rSet );
275 923 : sal_uInt16 nWhich = aIter.FirstWhich();
276 :
277 923 : bool bAttr = false;
278 1846 : SfxAllItemSet aAllSet( *rSet.GetPool() );
279 :
280 2945 : while ( nWhich )
281 : {
282 1099 : sal_uInt16 nSlotId = SfxItemPool::IsWhich(nWhich)
283 680 : ? GetPool().GetSlotId(nWhich)
284 1779 : : nWhich;
285 1099 : switch ( nSlotId )
286 : {
287 : case SID_ATTR_PARA_ADJUST_LEFT:
288 : {
289 0 : SfxItemSet aAttrs( GetDoc()->GetPool() );
290 0 : mpDrawView->GetAttributes( aAttrs );
291 :
292 0 : SvxAdjustItem aItem= ( (const SvxAdjustItem&) aAttrs.Get( EE_PARA_JUST ) );
293 0 : SvxAdjust eAdj = aItem.GetAdjust();
294 0 : if ( eAdj == SVX_ADJUST_LEFT)
295 : {
296 0 : rSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_LEFT, true ) );
297 : }
298 :
299 0 : bAttr = true;
300 :
301 0 : Invalidate(nSlotId);
302 : }
303 0 : break;
304 : case SID_ATTR_PARA_ADJUST_CENTER:
305 : {
306 0 : SfxItemSet aAttrs( GetDoc()->GetPool() );
307 0 : mpDrawView->GetAttributes( aAttrs );
308 :
309 0 : SvxAdjustItem aItem= ( (const SvxAdjustItem&) aAttrs.Get( EE_PARA_JUST ) );
310 0 : SvxAdjust eAdj = aItem.GetAdjust();
311 0 : if ( eAdj == SVX_ADJUST_CENTER)
312 : {
313 0 : rSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_CENTER, true ) );
314 : }
315 :
316 0 : bAttr = true;
317 :
318 0 : Invalidate(nSlotId);
319 : }
320 0 : break;
321 : case SID_ATTR_PARA_ADJUST_RIGHT:
322 : {
323 0 : SfxItemSet aAttrs( GetDoc()->GetPool() );
324 0 : mpDrawView->GetAttributes( aAttrs );
325 :
326 0 : SvxAdjustItem aItem= ( (const SvxAdjustItem&) aAttrs.Get( EE_PARA_JUST ) );
327 0 : SvxAdjust eAdj = aItem.GetAdjust();
328 0 : if ( eAdj == SVX_ADJUST_RIGHT)
329 : {
330 0 : rSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_RIGHT, true ) );
331 : }
332 :
333 0 : bAttr = true;
334 :
335 0 : Invalidate(nSlotId);
336 : }
337 0 : break;
338 : case SID_ATTR_PARA_ADJUST_BLOCK:
339 : {
340 0 : SfxItemSet aAttrs( GetDoc()->GetPool() );
341 0 : mpDrawView->GetAttributes( aAttrs );
342 :
343 0 : SvxAdjustItem aItem= ( (const SvxAdjustItem&) aAttrs.Get( EE_PARA_JUST ) );
344 0 : SvxAdjust eAdj = aItem.GetAdjust();
345 0 : if ( eAdj == SVX_ADJUST_BLOCK)
346 : {
347 0 : rSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_BLOCK, true ) );
348 : }
349 :
350 0 : bAttr = true;
351 :
352 0 : Invalidate(nSlotId);
353 : }
354 0 : break;
355 : case SID_ATTR_PARA_LRSPACE:
356 : {
357 11 : SfxItemSet aAttrs( GetDoc()->GetPool() );
358 11 : mpDrawView->GetAttributes( aAttrs );
359 22 : SvxLRSpaceItem aLRSpace = ( (const SvxLRSpaceItem&) aAttrs.Get( EE_PARA_LRSPACE ) );
360 11 : aLRSpace.SetWhich(SID_ATTR_PARA_LRSPACE);
361 11 : rSet.Put(aLRSpace);
362 11 : bAttr = true;
363 22 : Invalidate(SID_ATTR_PARA_LRSPACE);
364 : }
365 11 : break;
366 : case SID_ATTR_PARA_LINESPACE:
367 : {
368 0 : SfxItemSet aAttrs( GetDoc()->GetPool() );
369 0 : mpDrawView->GetAttributes( aAttrs );
370 0 : SvxLineSpacingItem aLineLR = ( (const SvxLineSpacingItem&) aAttrs.Get( EE_PARA_SBL ) );
371 0 : rSet.Put(aLineLR);
372 0 : bAttr = true;
373 0 : Invalidate(SID_ATTR_PARA_LINESPACE);
374 : }
375 0 : break;
376 : case SID_ATTR_PARA_ULSPACE:
377 : {
378 0 : SfxItemSet aAttrs( GetDoc()->GetPool() );
379 0 : mpDrawView->GetAttributes( aAttrs );
380 0 : SvxULSpaceItem aULSP = ( (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_SET_SUB_SCRIPT:
413 : case SID_SET_SUPER_SCRIPT:
414 : {
415 680 : bAttr = true;
416 : }
417 680 : break;
418 :
419 : case SID_HYPHENATION:
420 : {
421 0 : SfxItemSet aAttrs( GetDoc()->GetPool() );
422 0 : mpDrawView->GetAttributes( aAttrs );
423 0 : if( aAttrs.GetItemState( EE_PARA_HYPHENATE ) >= SfxItemState::DEFAULT )
424 : {
425 0 : bool bValue = ( (const SfxBoolItem&) aAttrs.Get( EE_PARA_HYPHENATE ) ).GetValue();
426 0 : rSet.Put( SfxBoolItem( SID_HYPHENATION, bValue ) );
427 0 : }
428 : }
429 0 : break;
430 :
431 : case SID_STYLE_FAMILY2:
432 : case SID_STYLE_FAMILY3:
433 : case SID_STYLE_FAMILY5:
434 : case SID_STYLE_APPLY: // StyleControl
435 : {
436 0 : SfxStyleSheet* pStyleSheet = mpDrawView->GetStyleSheet();
437 0 : if( pStyleSheet )
438 : {
439 0 : if( nSlotId != SID_STYLE_APPLY && !mpDrawView->AreObjectsMarked() )
440 : {
441 0 : SfxTemplateItem aTmpItem( nWhich, OUString() );
442 0 : aAllSet.Put( aTmpItem, aTmpItem.Which() );
443 : }
444 : else
445 : {
446 0 : if (pStyleSheet->GetFamily() == SD_STYLE_FAMILY_MASTERPAGE)
447 0 : pStyleSheet = ((SdStyleSheet*)pStyleSheet)->GetPseudoStyleSheet();
448 :
449 0 : if( pStyleSheet )
450 : {
451 0 : SfxStyleFamily eFamily = pStyleSheet->GetFamily();
452 :
453 0 : if ((eFamily == SD_STYLE_FAMILY_GRAPHICS && nSlotId == SID_STYLE_FAMILY2) ||
454 0 : (eFamily == SD_STYLE_FAMILY_CELL && nSlotId == SID_STYLE_FAMILY3) ||
455 0 : (eFamily == SD_STYLE_FAMILY_PSEUDO && nSlotId == SID_STYLE_FAMILY5))
456 : {
457 0 : SfxTemplateItem aTmpItem ( nWhich, pStyleSheet->GetName() );
458 0 : aAllSet.Put( aTmpItem, aTmpItem.Which() );
459 : }
460 : else
461 : {
462 0 : SfxTemplateItem aTmpItem(nWhich, OUString());
463 0 : aAllSet.Put(aTmpItem,aTmpItem.Which() );
464 : }
465 : }
466 : }
467 : }
468 : else
469 0 : { SfxTemplateItem aItem( nWhich, OUString() );
470 0 : aAllSet.Put( aItem, aItem.Which() );
471 : }
472 : }
473 0 : break;
474 :
475 : case SID_SET_DEFAULT:
476 : {
477 0 : if( !mpDrawView->GetMarkedObjectList().GetMarkCount() ||
478 0 : ( !mpDrawView->IsTextEdit() && !mpDrawView->GetStyleSheet() )
479 : )
480 0 : rSet.DisableItem( nWhich );
481 : }
482 0 : break;
483 :
484 : case SID_STYLE_WATERCAN:
485 : {
486 0 : SfxPoolItem* pItem = NULL;
487 0 : GetViewFrame()->GetBindings().QueryState(SID_STYLE_FAMILY, pItem);
488 0 : SfxUInt16Item* pFamilyItem = dynamic_cast<SfxUInt16Item*>(pItem);
489 0 : if (pFamilyItem && SfxTemplate::NIdToSfxFamilyId(pFamilyItem->GetValue()) == SD_STYLE_FAMILY_PSEUDO)
490 0 : rSet.Put(SfxBoolItem(nWhich,false));
491 : else
492 : {
493 0 : SfxBoolItem aItem(nWhich, SD_MOD()->GetWaterCan());
494 0 : aAllSet.Put( aItem, aItem.Which());
495 : }
496 0 : delete pItem;
497 : }
498 0 : break;
499 :
500 : case SID_STYLE_NEW:
501 : {
502 0 : SfxPoolItem* pItem = NULL;
503 0 : GetViewFrame()->GetBindings().QueryState(SID_STYLE_FAMILY, pItem);
504 0 : SfxUInt16Item* pFamilyItem = dynamic_cast<SfxUInt16Item*>(pItem);
505 0 : if (pFamilyItem && SfxTemplate::NIdToSfxFamilyId(pFamilyItem->GetValue()) == SD_STYLE_FAMILY_PSEUDO)
506 : {
507 0 : rSet.DisableItem(nWhich);
508 : }
509 0 : delete pItem;
510 : }
511 0 : break;
512 :
513 : case SID_STYLE_DRAGHIERARCHIE:
514 : {
515 0 : SfxPoolItem* pItem = NULL;
516 0 : GetViewFrame()->GetBindings().QueryState(SID_STYLE_FAMILY, pItem);
517 0 : SfxUInt16Item* pFamilyItem = dynamic_cast<SfxUInt16Item*>(pItem);
518 0 : if (pFamilyItem && SfxTemplate::NIdToSfxFamilyId(pFamilyItem->GetValue()) == SD_STYLE_FAMILY_PSEUDO)
519 0 : rSet.DisableItem(nWhich);
520 0 : delete pItem;
521 : }
522 0 : break;
523 :
524 : case SID_STYLE_NEW_BY_EXAMPLE:
525 : {
526 : // It is not possible to create PseudoStyleSheets 'by Example';
527 : // normal style sheets need a selected object for that
528 :
529 0 : SfxPoolItem* pItem = NULL;
530 0 : GetViewFrame()->GetBindings().QueryState(SID_STYLE_FAMILY, pItem);
531 0 : SfxUInt16Item* pFamilyItem = dynamic_cast<SfxUInt16Item*>(pItem);
532 0 : if (pFamilyItem)
533 : {
534 0 : if (SfxTemplate::NIdToSfxFamilyId(pFamilyItem->GetValue()) == SD_STYLE_FAMILY_PSEUDO)
535 : {
536 0 : rSet.DisableItem(nWhich);
537 : }
538 0 : else if (SfxTemplate::NIdToSfxFamilyId(pFamilyItem->GetValue()) == SD_STYLE_FAMILY_GRAPHICS)
539 : {
540 0 : if (!mpDrawView->AreObjectsMarked())
541 : {
542 0 : rSet.DisableItem(nWhich);
543 : }
544 : }
545 : }
546 : // if there is no (yet) a style designer, we have to go back into the
547 : // view state; an actual set family can not be considered
548 : else
549 : {
550 0 : if (!mpDrawView->AreObjectsMarked())
551 : {
552 0 : rSet.DisableItem(nWhich);
553 : }
554 : }
555 0 : delete pItem;
556 : }
557 0 : break;
558 :
559 : case SID_STYLE_UPDATE_BY_EXAMPLE:
560 : {
561 0 : if (!mpDrawView->AreObjectsMarked())
562 : {
563 0 : rSet.DisableItem(nWhich);
564 : }
565 : }
566 0 : break;
567 : case FN_BUL_NUM_RULE_INDEX:
568 : case FN_NUM_NUM_RULE_INDEX:
569 : {
570 0 : SfxItemSet aEditAttr( GetDoc()->GetPool() );
571 0 : mpDrawView->GetAttributes( aEditAttr );
572 :
573 0 : SfxItemSet aNewAttr( GetPool(), EE_ITEMS_START, EE_ITEMS_END );
574 0 : aNewAttr.Put( aEditAttr, false );
575 :
576 0 : boost::scoped_ptr<SvxNumRule> pNumRule;
577 0 : const SfxPoolItem* pTmpItem=NULL;
578 0 : sal_uInt16 nNumItemId = SID_ATTR_NUMBERING_RULE;
579 :
580 0 : rSet.Put(SfxUInt16Item(FN_NUM_NUM_RULE_INDEX,DEFAULT_NONE));
581 0 : rSet.Put(SfxUInt16Item(FN_BUL_NUM_RULE_INDEX,DEFAULT_NONE));
582 0 : sal_uInt16 nActNumLvl = mpDrawView->GetSelectionLevel();
583 0 : pTmpItem=GetNumBulletItem(aNewAttr, nNumItemId);
584 :
585 0 : if (pTmpItem)
586 0 : pNumRule.reset(new SvxNumRule(*((SvxNumBulletItem*)pTmpItem)->GetNumRule()));
587 :
588 0 : if ( pNumRule )
589 : {
590 0 : sal_uInt16 nMask = 1;
591 0 : sal_uInt16 nCount = 0;
592 0 : sal_uInt16 nCurLevel = (sal_uInt16)0xFFFF;
593 0 : for(sal_uInt16 i = 0; i < pNumRule->GetLevelCount(); i++)
594 : {
595 0 : if(nActNumLvl & nMask)
596 : {
597 0 : nCount++;
598 0 : nCurLevel = i;
599 : }
600 0 : nMask <<= 1;
601 : }
602 0 : if ( nCount == 1 )
603 : {
604 0 : bool bBullets = false;
605 0 : const SvxNumberFormat* pNumFmt = pNumRule->Get(nCurLevel);
606 0 : if ( pNumFmt )
607 : {
608 0 : switch(pNumFmt->GetNumberingType())
609 : {
610 : case SVX_NUM_CHAR_SPECIAL:
611 : case SVX_NUM_BITMAP:
612 0 : bBullets = true;
613 0 : break;
614 :
615 : default:
616 0 : bBullets = false;
617 : }
618 :
619 0 : rSet.Put(SfxUInt16Item(FN_BUL_NUM_RULE_INDEX,(sal_uInt16)0xFFFF));
620 0 : rSet.Put(SfxUInt16Item(FN_NUM_NUM_RULE_INDEX,(sal_uInt16)0xFFFF));
621 0 : if ( bBullets )
622 : {
623 0 : NBOTypeMgrBase* pBullets = NBOutlineTypeMgrFact::CreateInstance(eNBOType::MIXBULLETS);
624 0 : if ( pBullets )
625 : {
626 0 : sal_uInt16 nBulIndex = pBullets->GetNBOIndexForNumRule(*pNumRule,nActNumLvl);
627 0 : rSet.Put(SfxUInt16Item(FN_BUL_NUM_RULE_INDEX,nBulIndex));
628 : }
629 : }else
630 : {
631 0 : NBOTypeMgrBase* pNumbering = NBOutlineTypeMgrFact::CreateInstance(eNBOType::NUMBERING);
632 0 : if ( pNumbering )
633 : {
634 0 : sal_uInt16 nBulIndex = pNumbering->GetNBOIndexForNumRule(*pNumRule,nActNumLvl);
635 0 : rSet.Put(SfxUInt16Item(FN_NUM_NUM_RULE_INDEX,nBulIndex));
636 : }
637 : }
638 : }
639 : }
640 0 : }
641 : }
642 0 : break;
643 : //End
644 : // Added by Li Hui for story 179.
645 : case FN_NUM_BULLET_ON:
646 : case FN_NUM_NUMBERING_ON:
647 : {
648 0 : bool bEnable = false;
649 0 : const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList();
650 0 : const size_t nMarkCount = rMarkList.GetMarkCount();
651 0 : for (size_t nIndex = 0; nIndex < nMarkCount; ++nIndex)
652 : {
653 0 : SdrTextObj* pTextObj = dynamic_cast< SdrTextObj* >(rMarkList.GetMark(nIndex)->GetMarkedSdrObj());
654 0 : if (pTextObj && pTextObj->GetObjInventor() == SdrInventor)
655 : {
656 0 : if (pTextObj->GetObjIdentifier() != OBJ_OLE2)
657 : {
658 0 : bEnable = true;
659 0 : break;
660 : }
661 : }
662 : }
663 0 : if (bEnable)
664 : {
665 0 : rSet.Put(SfxBoolItem(FN_NUM_BULLET_ON, false));
666 0 : rSet.Put(SfxBoolItem(FN_NUM_NUMBERING_ON, false));
667 : }
668 : else
669 : {
670 0 : rSet.DisableItem(FN_NUM_BULLET_ON);
671 0 : rSet.DisableItem(FN_NUM_NUMBERING_ON);
672 : }
673 : }
674 0 : break;
675 : }
676 1099 : nWhich = aIter.NextWhich();
677 : }
678 :
679 923 : boost::scoped_ptr<SfxItemSet> pSet;
680 :
681 923 : if( bAttr )
682 : {
683 581 : pSet.reset(new SfxItemSet( GetDoc()->GetPool() ));
684 581 : mpDrawView->GetAttributes( *pSet );
685 581 : rSet.Put( *pSet, false );
686 : }
687 :
688 923 : rSet.Put( aAllSet, false );
689 :
690 : // there were changes at area and/or line attributes
691 923 : if( bAttr && pSet )
692 : {
693 : // if the view owns selected objects, corresponding items have to be
694 : // changed from SfxItemState::DEFAULT (_ON) to SfxItemState::DISABLED
695 581 : if( mpDrawView->AreObjectsMarked() )
696 : {
697 0 : SfxWhichIter aNewIter( *pSet, XATTR_LINE_FIRST, XATTR_FILL_LAST );
698 0 : nWhich = aNewIter.FirstWhich();
699 0 : while( nWhich )
700 : {
701 0 : if( SfxItemState::DEFAULT == pSet->GetItemState( nWhich ) )
702 : {
703 0 : rSet.ClearItem( nWhich );
704 0 : rSet.DisableItem( nWhich );
705 : }
706 0 : nWhich = aNewIter.NextWhich();
707 0 : }
708 : }
709 :
710 581 : SfxItemState eState = pSet->GetItemState( EE_PARA_LRSPACE );
711 581 : if ( eState == SfxItemState::DONTCARE )
712 : {
713 0 : rSet.InvalidateItem(EE_PARA_LRSPACE);
714 0 : rSet.InvalidateItem(SID_ATTR_PARA_LRSPACE);
715 : }
716 581 : eState = pSet->GetItemState( EE_PARA_SBL );
717 581 : if ( eState == SfxItemState::DONTCARE )
718 : {
719 0 : rSet.InvalidateItem(EE_PARA_SBL);
720 0 : rSet.InvalidateItem(SID_ATTR_PARA_LINESPACE);
721 : }
722 581 : eState = pSet->GetItemState( EE_PARA_ULSPACE );
723 581 : if ( eState == SfxItemState::DONTCARE )
724 : {
725 0 : rSet.InvalidateItem(EE_PARA_ULSPACE);
726 0 : rSet.InvalidateItem(SID_ATTR_PARA_ULSPACE);
727 : }
728 :
729 : SvxEscapement eEsc = (SvxEscapement) ( (const SvxEscapementItem&)
730 581 : pSet->Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue();
731 581 : if( eEsc == SVX_ESCAPEMENT_SUPERSCRIPT )
732 : {
733 0 : rSet.Put( SfxBoolItem( SID_SET_SUPER_SCRIPT, true ) );
734 : }
735 581 : else if( eEsc == SVX_ESCAPEMENT_SUBSCRIPT )
736 : {
737 0 : rSet.Put( SfxBoolItem( SID_SET_SUB_SCRIPT, true ) );
738 : }
739 :
740 581 : eState = pSet->GetItemState( EE_CHAR_KERNING, true );
741 581 : if ( eState == SfxItemState::DONTCARE )
742 : {
743 0 : rSet.InvalidateItem(EE_CHAR_KERNING);
744 0 : rSet.InvalidateItem(SID_ATTR_CHAR_KERNING);
745 : }
746 1846 : }
747 923 : }
748 :
749 0 : OUString DrawViewShell::GetSelectionText(bool bCompleteWords)
750 : {
751 0 : OUString aStrSelection;
752 0 : ::Outliner* pOl = mpDrawView->GetTextEditOutliner();
753 0 : OutlinerView* pOlView = mpDrawView->GetTextEditOutlinerView();
754 :
755 0 : if (pOl && pOlView)
756 : {
757 0 : if (bCompleteWords)
758 : {
759 0 : ESelection aSel = pOlView->GetSelection();
760 0 : OUString aStrCurrentDelimiters = pOl->GetWordDelimiters();
761 :
762 0 : pOl->SetWordDelimiters(" .,;\"'");
763 0 : aStrSelection = pOl->GetWord( aSel.nEndPara, aSel.nEndPos );
764 0 : pOl->SetWordDelimiters( aStrCurrentDelimiters );
765 : }
766 : else
767 : {
768 0 : aStrSelection = pOlView->GetSelected();
769 : }
770 : }
771 :
772 0 : return (aStrSelection);
773 : }
774 :
775 0 : bool DrawViewShell::HasSelection(bool bText) const
776 : {
777 0 : bool bReturn = false;
778 :
779 0 : if (bText)
780 : {
781 0 : OutlinerView* pOlView = mpDrawView->GetTextEditOutlinerView();
782 :
783 0 : if (pOlView && !pOlView->GetSelected().isEmpty())
784 : {
785 0 : bReturn = true;
786 : }
787 : }
788 0 : else if (mpDrawView->GetMarkedObjectList().GetMarkCount() != 0)
789 : {
790 0 : bReturn = true;
791 : }
792 :
793 0 : return bReturn;
794 : }
795 :
796 114 : } // end of namespace sd
797 :
798 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|