| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_sd.hxx" |
| |
| #include "DrawViewShell.hxx" |
| #include <com/sun/star/form/FormButtonType.hpp> |
| #include <com/sun/star/beans/XPropertySet.hpp> |
| |
| #ifndef _SVXIDS_HRC |
| #include <svx/svxids.hrc> |
| #endif |
| #ifndef _GLOBL3D_HXX |
| #include <svx/globl3d.hxx> |
| #endif |
| #include <svx/hlnkitem.hxx> |
| #include <editeng/eeitem.hxx> |
| #ifndef _FLDITEM_HXX |
| #include <editeng/flditem.hxx> |
| #endif |
| #include <sfx2/viewfrm.hxx> |
| #include <svl/whiter.hxx> |
| #include <svl/eitem.hxx> |
| #include <svl/itempool.hxx> |
| #include <sfx2/tplpitem.hxx> |
| #ifndef _BINDING_HXX //autogen |
| #include <sfx2/bindings.hxx> |
| #endif |
| #include <sfx2/app.hxx> |
| #include <sfx2/templdlg.hxx> |
| #include <svx/xdef.hxx> |
| #include <svx/svddef.hxx> |
| #include <svx/fmglob.hxx> |
| #include <svx/svdouno.hxx> |
| #include <tools/urlobj.hxx> |
| #include <svx/fmshell.hxx> |
| #include <svl/cjkoptions.hxx> |
| |
| #ifndef SD_FRAME_VIEW |
| #include "FrameView.hxx" |
| #endif |
| #include "Outliner.hxx" |
| #include "app.hrc" |
| |
| #include "app.hxx" |
| #include "stlsheet.hxx" |
| #include "drawview.hxx" |
| #include "drawdoc.hxx" |
| #include "Window.hxx" |
| #include "ViewShellBase.hxx" |
| #include "FormShellManager.hxx" |
| #include "cfgids.hxx" |
| #include "anminfo.hxx" |
| |
| #include <editeng/lspcitem.hxx> |
| #include <editeng/ulspitem.hxx> |
| #include <editeng/lrspitem.hxx> |
| #include <editeng/escpitem.hxx> |
| #include <editeng/numitem.hxx> |
| #include <editeng/adjitem.hxx> |
| #include <svx/nbdtmgfact.hxx> |
| #include <svx/nbdtmg.hxx> |
| |
| using namespace svx::sidebar; |
| using ::rtl::OUString; |
| using namespace ::com::sun::star; |
| |
| namespace sd { |
| |
| /************************************************************************* |
| |* |
| |* Status von Controller-SfxSlots setzen |
| |* |
| \************************************************************************/ |
| |
| void DrawViewShell::GetCtrlState(SfxItemSet &rSet) |
| { |
| if (rSet.GetItemState(SID_RELOAD) != SFX_ITEM_UNKNOWN) |
| { |
| // "Letzte Version" vom SFx en/disablen lassen |
| GetViewFrame()->GetSlotState (SID_RELOAD, NULL, &rSet); |
| } |
| |
| if (SFX_ITEM_AVAILABLE == rSet.GetItemState(SID_HYPERLINK_GETLINK)) |
| { |
| SvxHyperlinkItem aHLinkItem; |
| |
| OutlinerView* pOLV = mpDrawView->GetTextEditOutlinerView(); |
| |
| if (pOLV) |
| { |
| bool bField = false; |
| const SvxFieldItem* pFieldItem = pOLV->GetFieldAtSelection(); |
| if (pFieldItem) |
| { |
| ESelection aSel = pOLV->GetSelection(); |
| if ( abs( aSel.nEndPos - aSel.nStartPos ) == 1 ) |
| { |
| const SvxFieldData* pField = pFieldItem->GetField(); |
| if (pField->ISA(SvxURLField)) |
| { |
| aHLinkItem.SetName(((const SvxURLField*) pField)->GetRepresentation()); |
| aHLinkItem.SetURL(((const SvxURLField*) pField)->GetURL()); |
| aHLinkItem.SetTargetFrame(((const SvxURLField*) pField)->GetTargetFrame()); |
| bField = true; |
| } |
| } |
| } |
| if (!bField) |
| { |
| // use selected text as name for urls |
| String sReturn = pOLV->GetSelected(); |
| sReturn.Erase(255); |
| sReturn.EraseTrailingChars(); |
| aHLinkItem.SetName(sReturn); |
| } |
| } |
| else |
| { |
| if (mpDrawView->GetMarkedObjectList().GetMarkCount() > 0) |
| { |
| bool bFound = false; |
| |
| SdrObject* pMarkedObj = mpDrawView->GetMarkedObjectList().GetMark(0)->GetMarkedSdrObj(); |
| if( pMarkedObj && (FmFormInventor == pMarkedObj->GetObjInventor()) ) |
| { |
| SdrUnoObj* pUnoCtrl = dynamic_cast< SdrUnoObj* >( pMarkedObj ); |
| |
| if(pUnoCtrl) try |
| { |
| uno::Reference< awt::XControlModel > xControlModel( pUnoCtrl->GetUnoControlModel(), uno::UNO_QUERY_THROW ); |
| uno::Reference< beans::XPropertySet > xPropSet( xControlModel, uno::UNO_QUERY_THROW ); |
| uno::Reference< beans::XPropertySetInfo > xPropInfo( xPropSet->getPropertySetInfo(), uno::UNO_QUERY_THROW ); |
| |
| form::FormButtonType eButtonType = form::FormButtonType_URL; |
| const OUString sButtonType( RTL_CONSTASCII_USTRINGPARAM( "ButtonType" ) ); |
| if(xPropInfo->hasPropertyByName( sButtonType ) && (xPropSet->getPropertyValue( sButtonType ) >>= eButtonType ) ) |
| { |
| OUString aString; |
| |
| // Label |
| const OUString sLabel( RTL_CONSTASCII_USTRINGPARAM( "Label" ) ); |
| if(xPropInfo->hasPropertyByName(sLabel)) |
| { |
| if( xPropSet->getPropertyValue(sLabel) >>= aString ) |
| aHLinkItem.SetName(String( aString )); |
| } |
| |
| // URL |
| const OUString sTargetURL(RTL_CONSTASCII_USTRINGPARAM( "TargetURL" )); |
| if(xPropInfo->hasPropertyByName(sTargetURL)) |
| { |
| if( xPropSet->getPropertyValue(sTargetURL) >>= aString ) |
| aHLinkItem.SetURL(String( aString )); |
| } |
| |
| // Target |
| const OUString sTargetFrame( RTL_CONSTASCII_USTRINGPARAM( "TargetFrame" ) ); |
| if(xPropInfo->hasPropertyByName(sTargetFrame) ) |
| { |
| if( xPropSet->getPropertyValue(sTargetFrame) >>= aString ) |
| aHLinkItem.SetTargetFrame(String( aString )); |
| } |
| |
| aHLinkItem.SetInsertMode(HLINK_BUTTON); |
| bFound = true; |
| } |
| } |
| catch( uno::Exception& ) |
| { |
| } |
| } |
| |
| // try interaction link |
| if( !bFound && pMarkedObj ) |
| { |
| SdAnimationInfo* pInfo = SdDrawDocument::GetShapeUserData(*pMarkedObj); |
| if( pInfo && (pInfo->meClickAction == presentation::ClickAction_DOCUMENT) ) |
| aHLinkItem.SetURL( pInfo->GetBookmark()); |
| aHLinkItem.SetInsertMode(HLINK_BUTTON); |
| } |
| } |
| } |
| |
| rSet.Put(aHLinkItem); |
| } |
| rSet.Put( SfxBoolItem( SID_READONLY_MODE, mbReadOnly ) ); |
| |
| // Ausgabequalitaet |
| if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_OUTPUT_QUALITY_COLOR ) || |
| SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_OUTPUT_QUALITY_GRAYSCALE ) || |
| SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_OUTPUT_QUALITY_BLACKWHITE ) || |
| SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_OUTPUT_QUALITY_CONTRAST ) ) |
| { |
| const sal_uLong nMode = (sal_Int32)GetActiveWindow()->GetDrawMode(); |
| rSet.Put( SfxBoolItem( SID_OUTPUT_QUALITY_COLOR, (sal_Bool)((sal_uLong)OUTPUT_DRAWMODE_COLOR == nMode) ) ); |
| rSet.Put( SfxBoolItem( SID_OUTPUT_QUALITY_GRAYSCALE, (sal_Bool)((sal_uLong)OUTPUT_DRAWMODE_GRAYSCALE == nMode) ) ); |
| rSet.Put( SfxBoolItem( SID_OUTPUT_QUALITY_BLACKWHITE, (sal_Bool)((sal_uLong)OUTPUT_DRAWMODE_BLACKWHITE == nMode) ) ); |
| rSet.Put( SfxBoolItem( SID_OUTPUT_QUALITY_CONTRAST, (sal_Bool)((sal_uLong)OUTPUT_DRAWMODE_CONTRAST == nMode) ) ); |
| } |
| |
| if ( SFX_ITEM_AVAILABLE == rSet.GetItemState(SID_MAIL_SCROLLBODY_PAGEDOWN) ) |
| { |
| rSet.Put( SfxBoolItem( SID_MAIL_SCROLLBODY_PAGEDOWN, sal_True ) ); |
| } |
| |
| if ( SFX_ITEM_AVAILABLE == rSet.GetItemState(SID_ATTR_YEAR2000) ) |
| { |
| FmFormShell* pFormShell = GetViewShellBase().GetFormShellManager()->GetFormShell(); |
| if (pFormShell != NULL) |
| { |
| sal_uInt16 nState = 0; |
| if (pFormShell->GetY2KState(nState)) |
| rSet.Put( SfxUInt16Item( SID_ATTR_YEAR2000, nState ) ); |
| else |
| rSet.DisableItem( SID_ATTR_YEAR2000 ); |
| } |
| } |
| |
| if ( !GetView()->GetTextEditOutliner() ) |
| { |
| SvtCJKOptions aCJKOptions; |
| if( !aCJKOptions.IsChangeCaseMapEnabled() ) |
| { |
| GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_HALFWIDTH, sal_False ); |
| GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_FULLWIDTH, sal_False ); |
| GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_HIRAGANA, sal_False ); |
| GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_KATAGANA, sal_False ); |
| } |
| else |
| { |
| GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_HALFWIDTH, sal_True ); |
| GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_FULLWIDTH, sal_True ); |
| GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_HIRAGANA, sal_True ); |
| GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_KATAGANA, sal_True ); |
| } |
| |
| rSet.DisableItem( SID_TRANSLITERATE_SENTENCE_CASE ); |
| rSet.DisableItem( SID_TRANSLITERATE_TITLE_CASE ); |
| rSet.DisableItem( SID_TRANSLITERATE_TOGGLE_CASE ); |
| rSet.DisableItem( SID_TRANSLITERATE_UPPER ); |
| rSet.DisableItem( SID_TRANSLITERATE_LOWER ); |
| rSet.DisableItem( SID_TRANSLITERATE_HALFWIDTH ); |
| rSet.DisableItem( SID_TRANSLITERATE_FULLWIDTH ); |
| rSet.DisableItem( SID_TRANSLITERATE_HIRAGANA ); |
| rSet.DisableItem( SID_TRANSLITERATE_KATAGANA ); |
| } |
| else |
| { |
| SvtCJKOptions aCJKOptions; |
| if( !aCJKOptions.IsChangeCaseMapEnabled() ) |
| { |
| GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_HALFWIDTH, sal_False ); |
| GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_FULLWIDTH, sal_False ); |
| GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_HIRAGANA, sal_False ); |
| GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_KATAGANA, sal_False ); |
| rSet.DisableItem( SID_TRANSLITERATE_HALFWIDTH ); |
| rSet.DisableItem( SID_TRANSLITERATE_FULLWIDTH ); |
| rSet.DisableItem( SID_TRANSLITERATE_HIRAGANA ); |
| rSet.DisableItem( SID_TRANSLITERATE_KATAGANA ); |
| } |
| else |
| { |
| GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_HALFWIDTH, sal_True ); |
| GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_FULLWIDTH, sal_True ); |
| GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_HIRAGANA, sal_True ); |
| GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_KATAGANA, sal_True ); |
| } |
| } |
| } |
| |
| |
| /************************************************************************* |
| |* |
| |* Status der Attribut-Items |
| |* |
| \************************************************************************/ |
| |
| void DrawViewShell::GetAttrState( SfxItemSet& rSet ) |
| { |
| SfxWhichIter aIter( rSet ); |
| sal_uInt16 nWhich = aIter.FirstWhich(); |
| |
| sal_Bool bAttr = sal_False; |
| SfxAllItemSet aAllSet( *rSet.GetPool() ); |
| |
| while ( nWhich ) |
| { |
| sal_uInt16 nSlotId = SfxItemPool::IsWhich(nWhich) |
| ? GetPool().GetSlotId(nWhich) |
| : nWhich; |
| switch ( nSlotId ) |
| { |
| case SID_ATTR_PARA_ADJUST_LEFT: |
| { |
| SfxItemSet aAttrs( GetDoc()->GetPool() ); |
| mpDrawView->GetAttributes( aAttrs ); |
| |
| SvxAdjustItem aItem= ( (const SvxAdjustItem&) aAttrs.Get( EE_PARA_JUST ) ); |
| SvxAdjust eAdj = aItem.GetAdjust(); |
| if ( eAdj == SVX_ADJUST_LEFT) |
| { |
| rSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_LEFT, sal_True ) ); |
| } |
| |
| bAttr = sal_True; |
| |
| Invalidate(nSlotId); |
| } |
| break; |
| case SID_ATTR_PARA_ADJUST_CENTER: |
| { |
| SfxItemSet aAttrs( GetDoc()->GetPool() ); |
| mpDrawView->GetAttributes( aAttrs ); |
| |
| SvxAdjustItem aItem= ( (const SvxAdjustItem&) aAttrs.Get( EE_PARA_JUST ) ); |
| SvxAdjust eAdj = aItem.GetAdjust(); |
| if ( eAdj == SVX_ADJUST_CENTER) |
| { |
| rSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_CENTER, sal_True ) ); |
| } |
| |
| bAttr = sal_True; |
| |
| Invalidate(nSlotId); |
| } |
| break; |
| case SID_ATTR_PARA_ADJUST_RIGHT: |
| { |
| SfxItemSet aAttrs( GetDoc()->GetPool() ); |
| mpDrawView->GetAttributes( aAttrs ); |
| |
| SvxAdjustItem aItem= ( (const SvxAdjustItem&) aAttrs.Get( EE_PARA_JUST ) ); |
| SvxAdjust eAdj = aItem.GetAdjust(); |
| if ( eAdj == SVX_ADJUST_RIGHT) |
| { |
| rSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_RIGHT, sal_True ) ); |
| } |
| |
| bAttr = sal_True; |
| |
| Invalidate(nSlotId); |
| } |
| break; |
| case SID_ATTR_PARA_ADJUST_BLOCK: |
| { |
| SfxItemSet aAttrs( GetDoc()->GetPool() ); |
| mpDrawView->GetAttributes( aAttrs ); |
| |
| SvxAdjustItem aItem= ( (const SvxAdjustItem&) aAttrs.Get( EE_PARA_JUST ) ); |
| SvxAdjust eAdj = aItem.GetAdjust(); |
| if ( eAdj == SVX_ADJUST_BLOCK) |
| { |
| rSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_BLOCK, sal_True ) ); |
| } |
| |
| bAttr = sal_True; |
| |
| Invalidate(nSlotId); |
| } |
| break; |
| case SID_ATTR_PARA_LRSPACE: |
| { |
| SfxItemSet aAttrs( GetDoc()->GetPool() ); |
| mpDrawView->GetAttributes( aAttrs ); |
| SvxLRSpaceItem aLRSpace = ( (const SvxLRSpaceItem&) aAttrs.Get( EE_PARA_LRSPACE ) ); |
| aLRSpace.SetWhich(SID_ATTR_PARA_LRSPACE); |
| rSet.Put(aLRSpace); |
| bAttr = sal_True; |
| Invalidate(SID_ATTR_PARA_LRSPACE); |
| } |
| break; |
| case SID_ATTR_PARA_LINESPACE: |
| { |
| SfxItemSet aAttrs( GetDoc()->GetPool() ); |
| mpDrawView->GetAttributes( aAttrs ); |
| SvxLineSpacingItem aLineLR = ( (const SvxLineSpacingItem&) aAttrs.Get( EE_PARA_SBL ) ); |
| rSet.Put(aLineLR); |
| bAttr = sal_True; |
| Invalidate(SID_ATTR_PARA_LINESPACE); |
| } |
| break; |
| case SID_ATTR_PARA_ULSPACE: |
| { |
| SfxItemSet aAttrs( GetDoc()->GetPool() ); |
| mpDrawView->GetAttributes( aAttrs ); |
| SvxULSpaceItem aULSP = ( (const SvxULSpaceItem&) aAttrs.Get( EE_PARA_ULSPACE ) ); |
| aULSP.SetWhich(SID_ATTR_PARA_ULSPACE); |
| rSet.Put(aULSP); |
| bAttr = sal_True; |
| Invalidate(SID_ATTR_PARA_ULSPACE); |
| } |
| break; |
| case SID_ATTR_FILL_STYLE: |
| case SID_ATTR_FILL_COLOR: |
| case SID_ATTR_FILL_GRADIENT: |
| case SID_ATTR_FILL_HATCH: |
| case SID_ATTR_FILL_BITMAP: |
| case SID_ATTR_FILL_SHADOW: |
| case SID_ATTR_FILL_TRANSPARENCE: |
| case SID_ATTR_FILL_FLOATTRANSPARENCE: |
| case SID_ATTR_LINE_STYLE: |
| case SID_ATTR_LINE_DASH: |
| case SID_ATTR_LINE_WIDTH: |
| case SID_ATTR_LINE_COLOR: |
| case SID_ATTR_LINE_TRANSPARENCE: |
| case SID_ATTR_LINE_JOINT: |
| case SID_ATTR_LINE_CAP: |
| case SID_ATTR_TEXT_FITTOSIZE: |
| case SID_ATTR_CHAR_FONT: |
| case SID_ATTR_CHAR_FONTHEIGHT: |
| case SID_ATTR_CHAR_SHADOWED: |
| case SID_ATTR_CHAR_POSTURE: |
| case SID_ATTR_CHAR_UNDERLINE: |
| case SID_ATTR_CHAR_STRIKEOUT: |
| case SID_ATTR_CHAR_WEIGHT: |
| case SID_ATTR_CHAR_COLOR: |
| case SID_ATTR_CHAR_KERNING: |
| case SID_SET_SUB_SCRIPT: |
| case SID_SET_SUPER_SCRIPT: |
| { |
| bAttr = sal_True; |
| } |
| break; |
| |
| case SID_HYPHENATION: |
| { |
| SfxItemSet aAttrs( GetDoc()->GetPool() ); |
| mpDrawView->GetAttributes( aAttrs ); |
| if( aAttrs.GetItemState( EE_PARA_HYPHENATE ) >= SFX_ITEM_AVAILABLE ) |
| { |
| sal_Bool bValue = ( (const SfxBoolItem&) aAttrs.Get( EE_PARA_HYPHENATE ) ).GetValue(); |
| rSet.Put( SfxBoolItem( SID_HYPHENATION, bValue ) ); |
| } |
| } |
| break; |
| |
| case SID_STYLE_FAMILY2: |
| case SID_STYLE_FAMILY3: |
| case SID_STYLE_FAMILY5: |
| case SID_STYLE_APPLY: // StyleControl |
| { |
| SfxStyleSheet* pStyleSheet = mpDrawView->GetStyleSheet(); |
| if( pStyleSheet ) |
| { |
| if( nSlotId != SID_STYLE_APPLY && !mpDrawView->AreObjectsMarked() ) |
| { |
| SfxTemplateItem aTmpItem( nWhich, String() ); |
| aAllSet.Put( aTmpItem, aTmpItem.Which() ); |
| } |
| else |
| { |
| if (pStyleSheet->GetFamily() == SD_STYLE_FAMILY_MASTERPAGE) |
| pStyleSheet = ((SdStyleSheet*)pStyleSheet)->GetPseudoStyleSheet(); |
| |
| if( pStyleSheet ) |
| { |
| SfxStyleFamily eFamily = pStyleSheet->GetFamily(); |
| |
| if ((eFamily == SD_STYLE_FAMILY_GRAPHICS && nSlotId == SID_STYLE_FAMILY2) || |
| (eFamily == SD_STYLE_FAMILY_CELL && nSlotId == SID_STYLE_FAMILY3) || |
| (eFamily == SD_STYLE_FAMILY_PSEUDO && nSlotId == SID_STYLE_FAMILY5)) |
| { |
| SfxTemplateItem aTmpItem ( nWhich, pStyleSheet->GetName() ); |
| aAllSet.Put( aTmpItem, aTmpItem.Which() ); |
| } |
| else |
| { |
| SfxTemplateItem aTmpItem(nWhich, String()); |
| aAllSet.Put(aTmpItem,aTmpItem.Which() ); |
| } |
| } |
| } |
| } |
| else |
| { SfxTemplateItem aItem( nWhich, String() ); |
| aAllSet.Put( aItem, aItem.Which() ); |
| // rSet.DisableItem( nWhich ); |
| } |
| } |
| break; |
| |
| case SID_SET_DEFAULT: |
| { |
| if( !mpDrawView->GetMarkedObjectList().GetMarkCount() || |
| ( !mpDrawView->IsTextEdit() && !mpDrawView->GetStyleSheet() ) |
| ) |
| rSet.DisableItem( nWhich ); |
| } |
| break; |
| |
| case SID_STYLE_WATERCAN: |
| { |
| ISfxTemplateCommon* pTemplateCommon = SFX_APP()->GetCurrentTemplateCommon(GetViewFrame()->GetBindings()); |
| if (pTemplateCommon && pTemplateCommon->GetActualFamily() == SD_STYLE_FAMILY_PSEUDO) |
| rSet.Put(SfxBoolItem(nWhich,sal_False)); |
| else |
| { |
| SfxBoolItem aItem(nWhich, SD_MOD()->GetWaterCan()); |
| aAllSet.Put( aItem, aItem.Which()); |
| } |
| } |
| break; |
| |
| case SID_STYLE_NEW: |
| { |
| ISfxTemplateCommon* pTemplateCommon = SFX_APP()->GetCurrentTemplateCommon(GetViewFrame()->GetBindings()); |
| if (pTemplateCommon && pTemplateCommon->GetActualFamily() == SD_STYLE_FAMILY_PSEUDO) |
| rSet.DisableItem(nWhich); |
| } |
| break; |
| |
| case SID_STYLE_DRAGHIERARCHIE: |
| { |
| ISfxTemplateCommon* pTemplateCommon = SFX_APP()->GetCurrentTemplateCommon(GetViewFrame()->GetBindings()); |
| if (pTemplateCommon && pTemplateCommon->GetActualFamily() == SD_STYLE_FAMILY_PSEUDO) |
| rSet.DisableItem(nWhich); |
| } |
| break; |
| |
| case SID_STYLE_NEW_BY_EXAMPLE: |
| { |
| // PseudoStyleSheets koennen nicht 'by Example' erzeugt werden; |
| // normale StyleSheets brauchen dafuer ein selektiertes Objekt |
| ISfxTemplateCommon* pTemplCommon = SFX_APP()->GetCurrentTemplateCommon(GetViewFrame()->GetBindings()); |
| if (pTemplCommon) |
| { |
| if (pTemplCommon->GetActualFamily() == SD_STYLE_FAMILY_PSEUDO) |
| { |
| rSet.DisableItem(nWhich); |
| } |
| else if (pTemplCommon->GetActualFamily() == SD_STYLE_FAMILY_GRAPHICS) |
| { |
| if (!mpDrawView->AreObjectsMarked()) |
| { |
| rSet.DisableItem(nWhich); |
| } |
| } |
| } |
| // falls (noch) kein Gestalter da ist, muessen wir uns auf den |
| // View-Zustand zurueckziehen; eine aktuell eingestellte Familie |
| // kann nicht beruecksichtigt werden |
| else |
| { |
| if (!mpDrawView->AreObjectsMarked()) |
| { |
| rSet.DisableItem(nWhich); |
| } |
| } |
| |
| } |
| break; |
| |
| case SID_STYLE_UPDATE_BY_EXAMPLE: |
| { |
| if (!mpDrawView->AreObjectsMarked()) |
| { |
| rSet.DisableItem(nWhich); |
| } |
| } |
| break; |
| case FN_BUL_NUM_RULE_INDEX: |
| case FN_NUM_NUM_RULE_INDEX: |
| { |
| SfxItemSet aEditAttr( GetDoc()->GetPool() ); |
| mpDrawView->GetAttributes( aEditAttr ); |
| |
| SfxItemSet aNewAttr( GetPool(), EE_ITEMS_START, EE_ITEMS_END ); |
| aNewAttr.Put( aEditAttr, sal_False ); |
| |
| |
| sal_uInt16 nActNumLvl = (sal_uInt16)0xFFFF; |
| SvxNumRule* pNumRule = NULL; |
| const SfxPoolItem* pTmpItem=NULL; |
| sal_uInt16 nNumItemId = SID_ATTR_NUMBERING_RULE; |
| |
| //if(SFX_ITEM_SET == aNewAttr.GetItemState(SID_PARAM_CUR_NUM_LEVEL, sal_False, &pTmpItem)) |
| // nActNumLvl = ((const SfxUInt16Item*)pTmpItem)->GetValue(); |
| rSet.Put(SfxUInt16Item(FN_NUM_NUM_RULE_INDEX,DEFAULT_NONE)); |
| rSet.Put(SfxUInt16Item(FN_BUL_NUM_RULE_INDEX,DEFAULT_NONE)); |
| nActNumLvl = mpDrawView->GetSelectionLevel(); |
| pTmpItem=GetNumBulletItem(aNewAttr, nNumItemId); |
| |
| if (pTmpItem) |
| pNumRule = new SvxNumRule(*((SvxNumBulletItem*)pTmpItem)->GetNumRule()); |
| |
| if ( pNumRule ) |
| { |
| sal_uInt16 nMask = 1; |
| sal_uInt16 nCount = 0; |
| sal_uInt16 nCurLevel = (sal_uInt16)0xFFFF; |
| for(sal_uInt16 i = 0; i < pNumRule->GetLevelCount(); i++) |
| { |
| if(nActNumLvl & nMask) |
| { |
| nCount++; |
| nCurLevel = i; |
| } |
| nMask <<= 1; |
| } |
| if ( nCount == 1 ) |
| { |
| sal_Bool bBullets = sal_False; |
| const SvxNumberFormat* pNumFmt = pNumRule->Get(nCurLevel); |
| if ( pNumFmt ) |
| { |
| switch(pNumFmt->GetNumberingType()) |
| { |
| case SVX_NUM_CHAR_SPECIAL: |
| case SVX_NUM_BITMAP: |
| bBullets = sal_True; |
| break; |
| |
| default: |
| bBullets = sal_False; |
| } |
| |
| rSet.Put(SfxUInt16Item(FN_BUL_NUM_RULE_INDEX,(sal_uInt16)0xFFFF)); |
| rSet.Put(SfxUInt16Item(FN_NUM_NUM_RULE_INDEX,(sal_uInt16)0xFFFF)); |
| if ( bBullets ) |
| { |
| NBOTypeMgrBase* pBullets = NBOutlineTypeMgrFact::CreateInstance(eNBOType::MIXBULLETS); |
| if ( pBullets ) |
| { |
| sal_uInt16 nBulIndex = pBullets->GetNBOIndexForNumRule(*pNumRule,nActNumLvl); |
| rSet.Put(SfxUInt16Item(FN_BUL_NUM_RULE_INDEX,nBulIndex)); |
| } |
| }else |
| { |
| NBOTypeMgrBase* pNumbering = NBOutlineTypeMgrFact::CreateInstance(eNBOType::NUMBERING); |
| if ( pNumbering ) |
| { |
| sal_uInt16 nBulIndex = pNumbering->GetNBOIndexForNumRule(*pNumRule,nActNumLvl); |
| rSet.Put(SfxUInt16Item(FN_NUM_NUM_RULE_INDEX,nBulIndex)); |
| } |
| } |
| } |
| } |
| } |
| } |
| break; |
| //End |
| // Added by Li Hui for story 179. |
| case FN_NUM_BULLET_ON: |
| case FN_NUM_NUMBERING_ON: |
| { |
| sal_Bool bEnable = sal_False; |
| const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList(); |
| const sal_uInt32 nMarkCount = rMarkList.GetMarkCount(); |
| for (sal_uInt32 nIndex = 0; nIndex < nMarkCount; nIndex++) |
| { |
| SdrTextObj* pTextObj = dynamic_cast< SdrTextObj* >(rMarkList.GetMark(nIndex)->GetMarkedSdrObj()); |
| if (pTextObj && pTextObj->GetObjInventor() == SdrInventor) |
| { |
| if (pTextObj->GetObjIdentifier() != OBJ_OLE2) |
| { |
| bEnable = sal_True; |
| break; |
| } |
| } |
| } |
| if (bEnable) |
| { |
| rSet.Put(SfxBoolItem(FN_NUM_BULLET_ON, sal_False)); |
| rSet.Put(SfxBoolItem(FN_NUM_NUMBERING_ON, sal_False)); |
| } |
| else |
| { |
| rSet.DisableItem(FN_NUM_BULLET_ON); |
| rSet.DisableItem(FN_NUM_NUMBERING_ON); |
| } |
| } |
| break; |
| } |
| nWhich = aIter.NextWhich(); |
| } |
| |
| SfxItemSet* pSet = NULL; |
| |
| if( bAttr ) |
| { |
| pSet = new SfxItemSet( GetDoc()->GetPool() ); |
| mpDrawView->GetAttributes( *pSet ); |
| rSet.Put( *pSet, sal_False ); |
| } |
| |
| rSet.Put( aAllSet, sal_False ); |
| |
| // Flaechen und/oder Linienattribute wurden geaendert |
| if( bAttr && pSet ) |
| { |
| // Wenn die View selektierte Objekte besitzt, muessen entspr. Items |
| // von SFX_ITEM_DEFAULT (_ON) auf SFX_ITEM_DISABLED geaendert werden |
| if( mpDrawView->AreObjectsMarked() ) |
| { |
| SfxWhichIter aNewIter( *pSet, XATTR_LINE_FIRST, XATTR_FILL_LAST ); |
| nWhich = aNewIter.FirstWhich(); |
| while( nWhich ) |
| { |
| if( SFX_ITEM_DEFAULT == pSet->GetItemState( nWhich ) ) |
| { |
| rSet.ClearItem( nWhich ); |
| rSet.DisableItem( nWhich ); |
| } |
| nWhich = aNewIter.NextWhich(); |
| } |
| } |
| |
| SfxItemState eState = pSet->GetItemState( EE_PARA_LRSPACE ); |
| if ( eState == SFX_ITEM_DONTCARE ) |
| { |
| rSet.InvalidateItem(EE_PARA_LRSPACE); |
| rSet.InvalidateItem(SID_ATTR_PARA_LRSPACE); |
| } |
| eState = pSet->GetItemState( EE_PARA_SBL ); |
| if ( eState == SFX_ITEM_DONTCARE ) |
| { |
| rSet.InvalidateItem(EE_PARA_SBL); |
| rSet.InvalidateItem(SID_ATTR_PARA_LINESPACE); |
| } |
| eState = pSet->GetItemState( EE_PARA_ULSPACE ); |
| if ( eState == SFX_ITEM_DONTCARE ) |
| { |
| rSet.InvalidateItem(EE_PARA_ULSPACE); |
| rSet.InvalidateItem(SID_ATTR_PARA_ULSPACE); |
| } |
| |
| SvxEscapement eEsc = (SvxEscapement) ( (const SvxEscapementItem&) |
| pSet->Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue(); |
| if( eEsc == SVX_ESCAPEMENT_SUPERSCRIPT ) |
| { |
| rSet.Put( SfxBoolItem( SID_SET_SUPER_SCRIPT, sal_True ) ); |
| } |
| else if( eEsc == SVX_ESCAPEMENT_SUBSCRIPT ) |
| { |
| rSet.Put( SfxBoolItem( SID_SET_SUB_SCRIPT, sal_True ) ); |
| } |
| |
| eState = pSet->GetItemState( EE_CHAR_KERNING, sal_True ); |
| if ( eState == SFX_ITEM_DONTCARE ) |
| { |
| rSet.InvalidateItem(EE_CHAR_KERNING); |
| rSet.InvalidateItem(SID_ATTR_CHAR_KERNING); |
| } |
| delete pSet; |
| } |
| } |
| |
| |
| /************************************************************************* |
| |* |
| |* Text der Selektion zurueckgeben |
| |* |
| \************************************************************************/ |
| |
| String DrawViewShell::GetSelectionText(sal_Bool bCompleteWords) |
| { |
| String aStrSelection; |
| ::Outliner* pOl = mpDrawView->GetTextEditOutliner(); |
| OutlinerView* pOlView = mpDrawView->GetTextEditOutlinerView(); |
| |
| if (pOl && pOlView) |
| { |
| if (bCompleteWords) |
| { |
| ESelection aSel = pOlView->GetSelection(); |
| String aStrCurrentDelimiters = pOl->GetWordDelimiters(); |
| |
| pOl->SetWordDelimiters( String( RTL_CONSTASCII_USTRINGPARAM( " .,;\"'" ))); |
| aStrSelection = pOl->GetWord( aSel.nEndPara, aSel.nEndPos ); |
| pOl->SetWordDelimiters( aStrCurrentDelimiters ); |
| } |
| else |
| { |
| aStrSelection = pOlView->GetSelected(); |
| } |
| } |
| |
| return (aStrSelection); |
| } |
| |
| /************************************************************************* |
| |* |
| |* Ist etwas selektiert? |
| |* |
| \************************************************************************/ |
| |
| sal_Bool DrawViewShell::HasSelection(sal_Bool bText) const |
| { |
| sal_Bool bReturn = sal_False; |
| |
| if (bText) |
| { |
| OutlinerView* pOlView = mpDrawView->GetTextEditOutlinerView(); |
| |
| if (pOlView && pOlView->GetSelected().Len() != 0) |
| { |
| bReturn = sal_True; |
| } |
| } |
| else if (mpDrawView->GetMarkedObjectList().GetMarkCount() != 0) |
| { |
| bReturn = sal_True; |
| } |
| |
| return bReturn; |
| } |
| |
| } // end of namespace sd |