/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /************************************************************************* * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 3 * only, as published by the Free Software Foundation. * * OpenOffice.org is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License version 3 for more details * (a copy is included in the LICENSE file that accompanied this code). * * You should have received a copy of the GNU Lesser General Public License * version 3 along with OpenOffice.org. If not, see * * for a copy of the LGPLv3 License. * ************************************************************************/ #include #include #include #include #include #define _SVX_TPAREA_CXX #if defined (UNX) || defined (ICC) || defined(WNT) #include #endif #include "svx/xattr.hxx" #include #include #include "tabarea.hrc" #include #include #include #include #include "svx/drawitem.hxx" #include "cuitabarea.hxx" #include "dlgname.hxx" #include #include "svx/dlgutil.hxx" #include #include #include "paragrph.hrc" #define DLGWIN this->GetParent()->GetParent() // static ---------------------------------------------------------------- static sal_uInt16 pAreaRanges[] = { XATTR_GRADIENTSTEPCOUNT, XATTR_GRADIENTSTEPCOUNT, SID_ATTR_FILL_STYLE, SID_ATTR_FILL_BITMAP, 0 }; static sal_uInt16 pTransparenceRanges[] = { XATTR_FILLTRANSPARENCE, XATTR_FILLTRANSPARENCE, SDRATTR_SHADOWTRANSPARENCE, SDRATTR_SHADOWTRANSPARENCE, XATTR_FILLFLOATTRANSPARENCE, XATTR_FILLFLOATTRANSPARENCE, 0 }; /************************************************************************* |* |* Dialog for transparence |* \************************************************************************/ IMPL_LINK(SvxTransparenceTabPage, ClickTransOffHdl_Impl, void *, EMPTYARG) { // disable all other controls ActivateLinear(sal_False); ActivateGradient(sal_False); // Preview rXFSet.ClearItem (XATTR_FILLTRANSPARENCE); rXFSet.ClearItem (XATTR_FILLFLOATTRANSPARENCE); aCtlXRectPreview.SetAttributes( aXFillAttr.GetItemSet() ); aCtlBitmapPreview.SetAttributes( aXFillAttr.GetItemSet() ); InvalidatePreview( sal_False ); return( 0L ); } IMPL_LINK(SvxTransparenceTabPage, ClickTransLinearHdl_Impl, void *, EMPTYARG) { // enable linear, disable other ActivateLinear(sal_True); ActivateGradient(sal_False); // preview rXFSet.ClearItem (XATTR_FILLFLOATTRANSPARENCE); ModifyTransparentHdl_Impl (NULL); return( 0L ); } IMPL_LINK(SvxTransparenceTabPage, ClickTransGradientHdl_Impl, void *, EMPTYARG) { // enable gradient, disable other ActivateLinear(sal_False); ActivateGradient(sal_True); // preview rXFSet.ClearItem (XATTR_FILLTRANSPARENCE); ModifiedTrgrHdl_Impl (NULL); return( 0L ); } void SvxTransparenceTabPage::ActivateLinear(sal_Bool bActivate) { aMtrTransparent.Enable(bActivate); } IMPL_LINK(SvxTransparenceTabPage, ModifyTransparentHdl_Impl, void*, EMPTYARG) { sal_uInt16 nPos = (sal_uInt16)aMtrTransparent.GetValue(); XFillTransparenceItem aItem(nPos); rXFSet.Put(XFillTransparenceItem(aItem)); // preview InvalidatePreview(); return 0L; } IMPL_LINK(SvxTransparenceTabPage, ModifiedTrgrHdl_Impl, void *, pControl) { if(pControl == &aLbTrgrGradientType || pControl == this) { XGradientStyle eXGS = (XGradientStyle)aLbTrgrGradientType.GetSelectEntryPos(); SetControlState_Impl( eXGS ); } // preview sal_uInt8 nStartCol = (sal_uInt8)(((sal_uInt16)aMtrTrgrStartValue.GetValue() * 255) / 100); sal_uInt8 nEndCol = (sal_uInt8)(((sal_uInt16)aMtrTrgrEndValue.GetValue() * 255) / 100); XGradient aTmpGradient( Color(nStartCol, nStartCol, nStartCol), Color(nEndCol, nEndCol, nEndCol), (XGradientStyle)aLbTrgrGradientType.GetSelectEntryPos(), (sal_uInt16)aMtrTrgrAngle.GetValue() * 10, (sal_uInt16)aMtrTrgrCenterX.GetValue(), (sal_uInt16)aMtrTrgrCenterY.GetValue(), (sal_uInt16)aMtrTrgrBorder.GetValue(), 100, 100); String aString; XFillFloatTransparenceItem aItem( rXFSet.GetPool()/*aString*/, aTmpGradient); rXFSet.Put ( aItem ); InvalidatePreview(); return( 0L ); } void SvxTransparenceTabPage::ActivateGradient(sal_Bool bActivate) { aFtTrgrType.Enable(bActivate); aLbTrgrGradientType.Enable(bActivate); aFtTrgrCenterX.Enable(bActivate); aMtrTrgrCenterX.Enable(bActivate); aFtTrgrCenterY.Enable(bActivate); aMtrTrgrCenterY.Enable(bActivate); aFtTrgrAngle.Enable(bActivate); aMtrTrgrAngle.Enable(bActivate); aFtTrgrBorder.Enable(bActivate); aMtrTrgrBorder.Enable(bActivate); aFtTrgrStartValue.Enable(bActivate); aMtrTrgrStartValue.Enable(bActivate); aFtTrgrEndValue.Enable(bActivate); aMtrTrgrEndValue.Enable(bActivate); if(bActivate) { XGradientStyle eXGS = (XGradientStyle)aLbTrgrGradientType.GetSelectEntryPos(); SetControlState_Impl( eXGS ); } } IMPL_LINK(SvxTransparenceTabPage, ChangeTrgrTypeHdl_Impl, void *, EMPTYARG) { return( 0L ); } void SvxTransparenceTabPage::SetControlState_Impl(XGradientStyle eXGS) { switch(eXGS) { case XGRAD_LINEAR: case XGRAD_AXIAL: aFtTrgrCenterX.Disable(); aMtrTrgrCenterX.Disable(); aFtTrgrCenterY.Disable(); aMtrTrgrCenterY.Disable(); aFtTrgrAngle.Enable(); aMtrTrgrAngle.Enable(); break; case XGRAD_RADIAL: aFtTrgrCenterX.Enable(); aMtrTrgrCenterX.Enable(); aFtTrgrCenterY.Enable(); aMtrTrgrCenterY.Enable(); aFtTrgrAngle.Disable(); aMtrTrgrAngle.Disable(); break; case XGRAD_ELLIPTICAL: aFtTrgrCenterX.Enable(); aMtrTrgrCenterX.Enable(); aFtTrgrCenterY.Enable(); aMtrTrgrCenterY.Enable(); aFtTrgrAngle.Enable(); aMtrTrgrAngle.Enable(); break; case XGRAD_SQUARE: case XGRAD_RECT: aFtTrgrCenterX.Enable(); aMtrTrgrCenterX.Enable(); aFtTrgrCenterY.Enable(); aMtrTrgrCenterY.Enable(); aFtTrgrAngle.Enable(); aMtrTrgrAngle.Enable(); break; } } SvxTransparenceTabPage::SvxTransparenceTabPage(Window* pParent, const SfxItemSet& rInAttrs) : SvxTabPage ( pParent, CUI_RES( RID_SVXPAGE_TRANSPARENCE ), rInAttrs), rOutAttrs ( rInAttrs ), nPageType(0), nDlgType(0), aFlProp ( this, CUI_RES( FL_PROP ) ), aRbtTransOff ( this, CUI_RES( RBT_TRANS_OFF ) ), aRbtTransLinear ( this, CUI_RES( RBT_TRANS_LINEAR ) ), aRbtTransGradient ( this, CUI_RES( RBT_TRANS_GRADIENT ) ), aMtrTransparent ( this, CUI_RES( MTR_TRANSPARENT ) ), aFtTrgrType ( this, CUI_RES( FT_TRGR_TYPE ) ), aLbTrgrGradientType ( this, CUI_RES( LB_TRGR_GRADIENT_TYPES ) ), aFtTrgrCenterX ( this, CUI_RES( FT_TRGR_CENTER_X ) ), aMtrTrgrCenterX ( this, CUI_RES( MTR_TRGR_CENTER_X ) ), aFtTrgrCenterY ( this, CUI_RES( FT_TRGR_CENTER_Y ) ), aMtrTrgrCenterY ( this, CUI_RES( MTR_TRGR_CENTER_Y ) ), aFtTrgrAngle ( this, CUI_RES( FT_TRGR_ANGLE ) ), aMtrTrgrAngle ( this, CUI_RES( MTR_TRGR_ANGLE ) ), aFtTrgrBorder ( this, CUI_RES( FT_TRGR_BORDER ) ), aMtrTrgrBorder ( this, CUI_RES( MTR_TRGR_BORDER ) ), aFtTrgrStartValue ( this, CUI_RES( FT_TRGR_START_VALUE ) ), aMtrTrgrStartValue ( this, CUI_RES( MTR_TRGR_START_VALUE ) ), aFtTrgrEndValue ( this, CUI_RES( FT_TRGR_END_VALUE ) ), aMtrTrgrEndValue ( this, CUI_RES( MTR_TRGR_END_VALUE ) ), aCtlBitmapPreview ( this, CUI_RES( CTL_BITMAP_PREVIEW ) ), aCtlXRectPreview ( this, CUI_RES( CTL_TRANS_PREVIEW ) ), bBitmap ( sal_False ), pXPool ( (XOutdevItemPool*) rInAttrs.GetPool() ), aXFillAttr ( pXPool ), rXFSet ( aXFillAttr.GetItemSet() ) { FreeResource(); String accName = String(CUI_RES(STR_EXAMPLE)); aCtlBitmapPreview.SetAccessibleName(accName); aCtlXRectPreview.SetAccessibleName(accName); aMtrTransparent.SetAccessibleRelationLabeledBy( &aRbtTransLinear ); // main selection aRbtTransOff.SetClickHdl(LINK(this, SvxTransparenceTabPage, ClickTransOffHdl_Impl)); aRbtTransLinear.SetClickHdl(LINK(this, SvxTransparenceTabPage, ClickTransLinearHdl_Impl)); aRbtTransGradient.SetClickHdl(LINK(this, SvxTransparenceTabPage, ClickTransGradientHdl_Impl)); // linear transparency aMtrTransparent.SetValue( 50 ); aMtrTransparent.SetModifyHdl(LINK(this, SvxTransparenceTabPage, ModifyTransparentHdl_Impl)); // gradient transparency aMtrTrgrEndValue.SetValue( 100 ); aMtrTrgrStartValue.SetValue( 0 ); aLbTrgrGradientType.SetSelectHdl(LINK(this, SvxTransparenceTabPage, ChangeTrgrTypeHdl_Impl)); Link aLink = LINK( this, SvxTransparenceTabPage, ModifiedTrgrHdl_Impl); aLbTrgrGradientType.SetSelectHdl( aLink ); aMtrTrgrCenterX.SetModifyHdl( aLink ); aMtrTrgrCenterY.SetModifyHdl( aLink ); aMtrTrgrAngle.SetModifyHdl( aLink ); aMtrTrgrBorder.SetModifyHdl( aLink ); aMtrTrgrStartValue.SetModifyHdl( aLink ); aMtrTrgrEndValue.SetModifyHdl( aLink ); // this page needs ExchangeSupport SetExchangeSupport(); } void SvxTransparenceTabPage::Construct() { } SfxTabPage* SvxTransparenceTabPage::Create(Window* pWindow, const SfxItemSet& rAttrs) { return(new SvxTransparenceTabPage(pWindow, rAttrs)); } sal_uInt16* SvxTransparenceTabPage::GetRanges() { return(pTransparenceRanges); } sal_Bool SvxTransparenceTabPage::FillItemSet(SfxItemSet& rAttrs) { const SfxPoolItem* pGradientItem = NULL; const SfxPoolItem* pLinearItem = NULL; SfxItemState eStateGradient(rOutAttrs.GetItemState(XATTR_FILLFLOATTRANSPARENCE, sal_True, &pGradientItem)); SfxItemState eStateLinear(rOutAttrs.GetItemState(XATTR_FILLTRANSPARENCE, sal_True, &pLinearItem)); sal_Bool bGradActive = (eStateGradient == SFX_ITEM_SET && ((XFillFloatTransparenceItem*)pGradientItem)->IsEnabled()); sal_Bool bLinearActive = (eStateLinear == SFX_ITEM_SET && ((XFillTransparenceItem*)pLinearItem)->GetValue() != 0); // #103765# sal_Bool bGradUsed = (eStateGradient == SFX_ITEM_DONTCARE); sal_Bool bLinearUsed = (eStateLinear == SFX_ITEM_DONTCARE); sal_Bool bModified(sal_False); sal_Bool bSwitchOffLinear(sal_False); sal_Bool bSwitchOffGradient(sal_False); if(aMtrTransparent.IsEnabled()) { // linear transparence sal_uInt16 nPos = (sal_uInt16)aMtrTransparent.GetValue(); if(nPos != (sal_uInt16)aMtrTransparent.GetSavedValue().ToInt32() || !bLinearActive) { XFillTransparenceItem aItem(nPos); SdrShadowTransparenceItem aShadowItem(nPos); const SfxPoolItem* pOld = GetOldItem(rAttrs, XATTR_FILLTRANSPARENCE); if(!pOld || !(*(const XFillTransparenceItem*)pOld == aItem) || !bLinearActive) { rAttrs.Put(aItem); rAttrs.Put(aShadowItem); bModified = sal_True; bSwitchOffGradient = sal_True; } } } else if(aLbTrgrGradientType.IsEnabled()) { // transparence gradient, fill ItemSet from values if(!bGradActive || (XGradientStyle)aLbTrgrGradientType.GetSelectEntryPos() != (XGradientStyle)aLbTrgrGradientType.GetSavedValue() || (sal_uInt16)aMtrTrgrAngle.GetValue() != (sal_uInt16)aMtrTrgrAngle.GetSavedValue().ToInt32() || (sal_uInt16)aMtrTrgrCenterX.GetValue() != (sal_uInt16)aMtrTrgrCenterX.GetSavedValue().ToInt32() || (sal_uInt16)aMtrTrgrCenterY.GetValue() != (sal_uInt16)aMtrTrgrCenterY.GetSavedValue().ToInt32() || (sal_uInt16)aMtrTrgrBorder.GetValue() != (sal_uInt16)aMtrTrgrBorder.GetSavedValue().ToInt32() || (sal_uInt16)aMtrTrgrStartValue.GetValue() != (sal_uInt16)aMtrTrgrStartValue.GetSavedValue().ToInt32() || (sal_uInt16)aMtrTrgrEndValue.GetValue() != (sal_uInt16)aMtrTrgrEndValue.GetSavedValue().ToInt32() ) { sal_uInt8 nStartCol = (sal_uInt8)(((sal_uInt16)aMtrTrgrStartValue.GetValue() * 255) / 100); sal_uInt8 nEndCol = (sal_uInt8)(((sal_uInt16)aMtrTrgrEndValue.GetValue() * 255) / 100); XGradient aTmpGradient( Color(nStartCol, nStartCol, nStartCol), Color(nEndCol, nEndCol, nEndCol), (XGradientStyle)aLbTrgrGradientType.GetSelectEntryPos(), (sal_uInt16)aMtrTrgrAngle.GetValue() * 10, (sal_uInt16)aMtrTrgrCenterX.GetValue(), (sal_uInt16)aMtrTrgrCenterY.GetValue(), (sal_uInt16)aMtrTrgrBorder.GetValue(), 100, 100); String aString; XFillFloatTransparenceItem aItem( rXFSet.GetPool()/*aString*/, aTmpGradient); const SfxPoolItem* pOld = GetOldItem(rAttrs, XATTR_FILLFLOATTRANSPARENCE); if(!pOld || !(*(const XFillFloatTransparenceItem*)pOld == aItem) || !bGradActive) { rAttrs.Put(aItem); bModified = sal_True; bSwitchOffLinear = sal_True; } } } else { // no transparence bSwitchOffGradient = sal_True; bSwitchOffLinear = sal_True; } // disable unused XFillFloatTransparenceItem if(bSwitchOffGradient && (bGradActive || bGradUsed)) { Color aColor(COL_BLACK); XGradient aGrad(aColor, Color(COL_WHITE)); aGrad.SetStartIntens(100); aGrad.SetEndIntens(100); String aString; XFillFloatTransparenceItem aItem( rXFSet.GetPool()/*aString*/, aGrad); aItem.SetEnabled(sal_False); rAttrs.Put(aItem); bModified = sal_True; } // disable unused XFillFloatTransparenceItem if(bSwitchOffLinear && (bLinearActive || bLinearUsed)) { XFillTransparenceItem aItem(0); SdrShadowTransparenceItem aShadowItem(0); rAttrs.Put(aItem); rAttrs.Put(aShadowItem); bModified = sal_True; } rAttrs.Put (CntUInt16Item(SID_PAGE_TYPE,nPageType)); return bModified; } void SvxTransparenceTabPage::Reset(const SfxItemSet& rAttrs) { const SfxPoolItem* pGradientItem = NULL; SfxItemState eStateGradient(rAttrs.GetItemState(XATTR_FILLFLOATTRANSPARENCE, sal_True, &pGradientItem)); if(!pGradientItem) pGradientItem = &rAttrs.Get(XATTR_FILLFLOATTRANSPARENCE); sal_Bool bGradActive = (eStateGradient == SFX_ITEM_SET && ((XFillFloatTransparenceItem*)pGradientItem)->IsEnabled()); const SfxPoolItem* pLinearItem = NULL; SfxItemState eStateLinear(rAttrs.GetItemState(XATTR_FILLTRANSPARENCE, sal_True, &pLinearItem)); if(!pLinearItem) pLinearItem = &rAttrs.Get(XATTR_FILLTRANSPARENCE); sal_Bool bLinearActive = (eStateLinear == SFX_ITEM_SET && ((XFillTransparenceItem*)pLinearItem)->GetValue() != 0); // transparence gradient const XGradient& rGradient = ((XFillFloatTransparenceItem*)pGradientItem)->GetGradientValue(); XGradientStyle eXGS(rGradient.GetGradientStyle()); aLbTrgrGradientType.SelectEntryPos(sal::static_int_cast< sal_uInt16 >(eXGS)); aMtrTrgrAngle.SetValue(rGradient.GetAngle() / 10); aMtrTrgrBorder.SetValue(rGradient.GetBorder()); aMtrTrgrCenterX.SetValue(rGradient.GetXOffset()); aMtrTrgrCenterY.SetValue(rGradient.GetYOffset()); aMtrTrgrStartValue.SetValue((sal_uInt16)((((sal_uInt16)rGradient.GetStartColor().GetRed() + 1) * 100) / 255)); aMtrTrgrEndValue.SetValue((sal_uInt16)((((sal_uInt16)rGradient.GetEndColor().GetRed() + 1) * 100) / 255)); // linear transparence sal_uInt16 nTransp = ((XFillTransparenceItem*)pLinearItem)->GetValue(); aMtrTransparent.SetValue(bLinearActive ? nTransp : 50); ModifyTransparentHdl_Impl(NULL); // select the correct radio button if(bGradActive) { // transparence gradient, set controls appropriate to item aRbtTransGradient.Check(); ClickTransGradientHdl_Impl(NULL); } else if(bLinearActive) { // linear transparence aRbtTransLinear.Check(); ClickTransLinearHdl_Impl(NULL); } else { // no transparence aRbtTransOff.Check(); ClickTransOffHdl_Impl(NULL); ModifiedTrgrHdl_Impl(NULL); } // save values aMtrTransparent.SaveValue(); aLbTrgrGradientType.SaveValue(); aMtrTrgrCenterX.SaveValue(); aMtrTrgrCenterY.SaveValue(); aMtrTrgrAngle.SaveValue(); aMtrTrgrBorder.SaveValue(); aMtrTrgrStartValue.SaveValue(); aMtrTrgrEndValue.SaveValue(); sal_Bool bActive = InitPreview ( rAttrs ); InvalidatePreview ( bActive ); } void SvxTransparenceTabPage::ActivatePage(const SfxItemSet& rSet) { SFX_ITEMSET_ARG (&rSet,pPageTypeItem,CntUInt16Item,SID_PAGE_TYPE,sal_False); if (pPageTypeItem) SetPageType(pPageTypeItem->GetValue()); if(nDlgType == 0) // Flaechen-Dialog nPageType = PT_TRANSPARENCE; InitPreview ( rSet ); } int SvxTransparenceTabPage::DeactivatePage(SfxItemSet* _pSet) { if( _pSet ) FillItemSet( *_pSet ); return(LEAVE_PAGE); } void SvxTransparenceTabPage::PointChanged(Window* , RECT_POINT eRcPt) { eRP = eRcPt; } // // Preview-Methods // sal_Bool SvxTransparenceTabPage::InitPreview ( const SfxItemSet& rSet ) { // set transparencetyp for preview if ( aRbtTransOff.IsChecked() ) { ClickTransOffHdl_Impl(NULL); } else if ( aRbtTransLinear.IsChecked() ) { ClickTransLinearHdl_Impl(NULL); } else if ( aRbtTransGradient.IsChecked() ) { ClickTransGradientHdl_Impl(NULL); } // Get fillstyle for preview rXFSet.Put ( ( XFillStyleItem& ) rSet.Get(XATTR_FILLSTYLE) ); rXFSet.Put ( ( XFillColorItem& ) rSet.Get(XATTR_FILLCOLOR) ); rXFSet.Put ( ( XFillGradientItem& ) rSet.Get(XATTR_FILLGRADIENT) ); rXFSet.Put ( ( XFillHatchItem& ) rSet.Get(XATTR_FILLHATCH) ); rXFSet.Put ( ( XFillBackgroundItem&)rSet.Get(XATTR_FILLBACKGROUND) ); rXFSet.Put ( ( XFillBitmapItem& ) rSet.Get(XATTR_FILLBITMAP) ); aCtlXRectPreview.SetAttributes( aXFillAttr.GetItemSet() ); aCtlBitmapPreview.SetAttributes( aXFillAttr.GetItemSet() ); bBitmap = ( ( ( XFillStyleItem& )rSet.Get(XATTR_FILLSTYLE) ).GetValue() == XFILL_BITMAP ); // show the right preview window if ( bBitmap ) { aCtlBitmapPreview.Show(); aCtlXRectPreview.Hide(); } else { aCtlBitmapPreview.Hide(); aCtlXRectPreview.Show(); } return !aRbtTransOff.IsChecked(); } void SvxTransparenceTabPage::InvalidatePreview (sal_Bool bEnable) { if ( bBitmap ) { if ( bEnable ) { aCtlBitmapPreview.Enable(); aCtlBitmapPreview.SetAttributes( aXFillAttr.GetItemSet() ); } else aCtlBitmapPreview.Disable(); aCtlBitmapPreview.Invalidate(); } else { if ( bEnable ) { aCtlXRectPreview.Enable(); aCtlXRectPreview.SetAttributes( aXFillAttr.GetItemSet() ); } else aCtlXRectPreview.Disable(); aCtlXRectPreview.Invalidate(); } } void SvxTransparenceTabPage::PageCreated (SfxAllItemSet aSet) { SFX_ITEMSET_ARG (&aSet,pPageTypeItem,SfxUInt16Item,SID_PAGE_TYPE,sal_False); SFX_ITEMSET_ARG (&aSet,pDlgTypeItem,SfxUInt16Item,SID_DLG_TYPE,sal_False); if (pPageTypeItem) SetPageType(pPageTypeItem->GetValue()); if (pDlgTypeItem) SetDlgType(pDlgTypeItem->GetValue()); Construct(); } /************************************************************************* |* |* Dialog to modify fill-attributes |* \************************************************************************/ SvxAreaTabPage::SvxAreaTabPage( Window* pParent, const SfxItemSet& rInAttrs ) : SvxTabPage ( pParent, CUI_RES( RID_SVXPAGE_AREA ), rInAttrs ), aFlProp ( this, CUI_RES( FL_PROP ) ), aTypeLB ( this, CUI_RES( LB_AREA_TYPE ) ), aLbColor ( this, CUI_RES( LB_COLOR ) ), aLbGradient ( this, CUI_RES( LB_GRADIENT ) ), aLbHatching ( this, CUI_RES( LB_HATCHING ) ), aLbBitmap ( this, CUI_RES( LB_BITMAP ) ), aCtlBitmapPreview ( this, CUI_RES( CTL_BITMAP_PREVIEW ) ), aTsbStepCount ( this, CUI_RES( TSB_STEPCOUNT ) ), aFlStepCount ( this, CUI_RES( FL_STEPCOUNT ) ), aNumFldStepCount ( this, CUI_RES( NUM_FLD_STEPCOUNT ) ), aCbxHatchBckgrd ( this, CUI_RES( CB_HATCHBCKGRD ) ), aLbHatchBckgrdColor ( this, CUI_RES( LB_HATCHBCKGRDCOLOR ) ), aFlSize ( this, CUI_RES( FL_SIZE ) ), aTsbOriginal ( this, CUI_RES( TSB_ORIGINAL ) ), aTsbScale ( this, CUI_RES( TSB_SCALE ) ), aFtXSize ( this, CUI_RES( FT_X_SIZE ) ), aMtrFldXSize ( this, CUI_RES( MTR_FLD_X_SIZE ) ), aFtYSize ( this, CUI_RES( FT_Y_SIZE ) ), aMtrFldYSize ( this, CUI_RES( MTR_FLD_Y_SIZE ) ), aFlPosition ( this, CUI_RES( FL_POSITION ) ), aCtlPosition ( this, CUI_RES( CTL_POSITION ), RP_RM, 110, 80, CS_RECT ), aFtXOffset ( this, CUI_RES( FT_X_OFFSET ) ), aMtrFldXOffset ( this, CUI_RES( MTR_FLD_X_OFFSET ) ), aFtYOffset ( this, CUI_RES( FT_Y_OFFSET ) ), aMtrFldYOffset ( this, CUI_RES( MTR_FLD_Y_OFFSET ) ), aTsbTile ( this, CUI_RES( TSB_TILE ) ), aTsbStretch ( this, CUI_RES( TSB_STRETCH ) ), aFlOffset ( this, CUI_RES( FL_OFFSET ) ), aRbtRow ( this, CUI_RES( RBT_ROW ) ), aRbtColumn ( this, CUI_RES( RBT_COLUMN ) ), aMtrFldOffset ( this, CUI_RES( MTR_FLD_OFFSET ) ), aCtlXRectPreview ( this, CUI_RES( CTL_COLOR_PREVIEW ) ), rOutAttrs ( rInAttrs ), pColorTab( NULL ), pGradientList( NULL ), pHatchingList( NULL ), pBitmapList( NULL ), pXPool ( (XOutdevItemPool*) rInAttrs.GetPool() ), aXFillAttr ( pXPool ), rXFSet ( aXFillAttr.GetItemSet() ) { FreeResource(); String accName = String(CUI_RES(STR_EXAMPLE)); aCtlXRectPreview.SetAccessibleName(accName); aCtlBitmapPreview.SetAccessibleName(accName); // Gruppen, die sich ueberlagern aLbBitmap.Hide(); aCtlBitmapPreview.Hide(); aFlStepCount.Hide(); aTsbStepCount.Hide(); aNumFldStepCount.Hide(); aTsbTile.Hide(); aTsbStretch.Hide(); aTsbScale.Hide(); aTsbOriginal.Hide(); aFtXSize.Hide(); aMtrFldXSize.Hide(); aFtYSize.Hide(); aMtrFldYSize.Hide(); aFlSize.Hide(); aRbtRow.Hide(); aRbtColumn.Hide(); aMtrFldOffset.Hide(); aFlOffset.Hide(); aCtlPosition.Hide(); aFtXOffset.Hide(); aMtrFldXOffset.Hide(); aFtYOffset.Hide(); aMtrFldYOffset.Hide(); aFlPosition.Hide(); // Controls for Hatch-Background aCbxHatchBckgrd.Hide(); aLbHatchBckgrdColor.Hide(); aTsbOriginal.EnableTriState( sal_False ); // this page needs ExchangeSupport SetExchangeSupport(); // set Metrics eFUnit = GetModuleFieldUnit( rInAttrs ); switch ( eFUnit ) { case FUNIT_M: case FUNIT_KM: eFUnit = FUNIT_MM; break; default: ;//prevent warning } SetFieldUnit( aMtrFldXSize, eFUnit, sal_True ); SetFieldUnit( aMtrFldYSize, eFUnit, sal_True ); // get PoolUnit SfxItemPool* pPool = rOutAttrs.GetPool(); DBG_ASSERT( pPool, "Wo ist der Pool?" ); ePoolUnit = pPool->GetMetric( XATTR_FILLBMP_SIZEX ); // Setzen Output-Devices rXFSet.Put( XFillStyleItem( XFILL_SOLID ) ); rXFSet.Put( XFillColorItem( String(), COL_BLACK ) ); aCtlXRectPreview.SetAttributes( aXFillAttr.GetItemSet() ); aCtlBitmapPreview.SetAttributes( aXFillAttr.GetItemSet() ); aLbColor.SetSelectHdl( LINK( this, SvxAreaTabPage, ModifyColorHdl_Impl ) ); aLbHatchBckgrdColor.SetSelectHdl( LINK( this, SvxAreaTabPage, ModifyHatchBckgrdColorHdl_Impl ) ); aCbxHatchBckgrd.SetToggleHdl( LINK( this, SvxAreaTabPage, ToggleHatchBckgrdColorHdl_Impl ) ); aLbGradient.SetSelectHdl( LINK( this, SvxAreaTabPage, ModifyGradientHdl_Impl ) ); aLbHatching.SetSelectHdl( LINK( this, SvxAreaTabPage, ModifyHatchingHdl_Impl ) ); aLbBitmap.SetSelectHdl( LINK( this, SvxAreaTabPage, ModifyBitmapHdl_Impl ) ); aTsbStepCount.SetClickHdl( LINK( this, SvxAreaTabPage, ModifyStepCountHdl_Impl ) ); aNumFldStepCount.SetModifyHdl( LINK( this, SvxAreaTabPage, ModifyStepCountHdl_Impl ) ); Link aLink( LINK( this, SvxAreaTabPage, ModifyTileHdl_Impl ) ); aTsbTile.SetClickHdl( aLink ); aTsbStretch.SetClickHdl( aLink ); aTsbOriginal.SetClickHdl( aLink ); aMtrFldXSize.SetModifyHdl( aLink ); aMtrFldYSize.SetModifyHdl( aLink ); aRbtRow.SetClickHdl( aLink ); aRbtColumn.SetClickHdl( aLink ); aMtrFldOffset.SetModifyHdl( aLink ); aMtrFldXOffset.SetModifyHdl( aLink ); aMtrFldYOffset.SetModifyHdl( aLink ); aTsbScale.SetClickHdl( LINK( this, SvxAreaTabPage, ClickScaleHdl_Impl ) ); aTypeLB.SetSelectHdl( LINK( this, SvxAreaTabPage, SelectDialogTypeHdl_Impl ) ); // #i76307# always paint the preview in LTR, because this is what the document does aCtlXRectPreview.EnableRTL(sal_False); aNumFldStepCount.SetAccessibleRelationLabeledBy( &aTsbStepCount ); aCtlPosition.SetAccessibleRelationMemberOf( &aFlPosition ); aLbHatchBckgrdColor.SetAccessibleRelationLabeledBy( &aCbxHatchBckgrd ); aLbHatchBckgrdColor.SetAccessibleName(aCbxHatchBckgrd.GetText()); aLbColor.SetAccessibleRelationMemberOf( &aFlProp ); aMtrFldOffset.SetAccessibleRelationLabeledBy(&aFlOffset); aMtrFldOffset.SetAccessibleName(aFlOffset.GetText()); } // ----------------------------------------------------------------------- void SvxAreaTabPage::Construct() { // fill colortables / lists aLbColor.Fill( pColorTab ); aLbHatchBckgrdColor.Fill ( pColorTab ); aLbGradient.Fill( pGradientList ); aLbHatching.Fill( pHatchingList ); aLbBitmap.Fill( pBitmapList ); } // ----------------------------------------------------------------------- void SvxAreaTabPage::ActivatePage( const SfxItemSet& rSet ) { sal_uInt16 nCount; SFX_ITEMSET_ARG (&rSet,pPageTypeItem,SfxUInt16Item,SID_PAGE_TYPE,sal_False); SFX_ITEMSET_ARG (&rSet,pPosItem,SfxUInt16Item,SID_TABPAGE_POS,sal_False); if (pPageTypeItem) SetPageType(pPageTypeItem->GetValue()); if (pPosItem) SetPos(pPosItem->GetValue()); if( nDlgType == 0 ) // Flaechen-Dialog { *pbAreaTP = sal_True; if( pColorTab.is() ) { sal_uInt16 _nPos = 0; // Bitmapliste if( *pnBitmapListState ) { if( *pnBitmapListState & CT_CHANGED ) pBitmapList = ( (SvxAreaTabDialog*) DLGWIN )-> GetNewBitmapList(); _nPos = aLbBitmap.GetSelectEntryPos(); aLbBitmap.Clear(); aLbBitmap.Fill( pBitmapList ); nCount = aLbBitmap.GetEntryCount(); if( nCount == 0 ) ; // This case should never occur else if( nCount <= _nPos ) aLbBitmap.SelectEntryPos( 0 ); else aLbBitmap.SelectEntryPos( _nPos ); ModifyBitmapHdl_Impl( this ); } // hatch-liste if( *pnHatchingListState ) { if( *pnHatchingListState & CT_CHANGED ) pHatchingList = ( (SvxAreaTabDialog*) DLGWIN )-> GetNewHatchingList(); _nPos = aLbHatching.GetSelectEntryPos(); aLbHatching.Clear(); aLbHatching.Fill( pHatchingList ); nCount = aLbHatching.GetEntryCount(); if( nCount == 0 ) ; // This case should never occur else if( nCount <= _nPos ) aLbHatching.SelectEntryPos( 0 ); else aLbHatching.SelectEntryPos( _nPos ); ModifyHatchingHdl_Impl( this ); ModifyHatchBckgrdColorHdl_Impl( this ); } // gradient-liste if( *pnGradientListState ) { if( *pnGradientListState & CT_CHANGED ) pGradientList = ( (SvxAreaTabDialog*) DLGWIN )-> GetNewGradientList(); _nPos = aLbGradient.GetSelectEntryPos(); aLbGradient.Clear(); aLbGradient.Fill( pGradientList ); nCount = aLbGradient.GetEntryCount(); if( nCount == 0 ) ; // This case should never occur else if( nCount <= _nPos ) aLbGradient.SelectEntryPos( 0 ); else aLbGradient.SelectEntryPos( _nPos ); ModifyGradientHdl_Impl( this ); } // ColorTable if( *pnColorTableState ) { if( *pnColorTableState & CT_CHANGED ) pColorTab = ( (SvxAreaTabDialog*) DLGWIN )-> GetNewColorTable(); // aLbColor _nPos = aLbColor.GetSelectEntryPos(); aLbColor.Clear(); aLbColor.Fill( pColorTab ); nCount = aLbColor.GetEntryCount(); if( nCount == 0 ) ; // This case should never occur else if( nCount <= _nPos ) aLbColor.SelectEntryPos( 0 ); else aLbColor.SelectEntryPos( _nPos ); ModifyColorHdl_Impl( this ); // Backgroundcolor of hatch _nPos = aLbHatchBckgrdColor.GetSelectEntryPos(); aLbHatchBckgrdColor.Clear(); aLbHatchBckgrdColor.Fill( pColorTab ); nCount = aLbHatchBckgrdColor.GetEntryCount(); if( nCount == 0 ) ; // This case should never occur else if( nCount <= _nPos ) aLbHatchBckgrdColor.SelectEntryPos( 0 ); else aLbHatchBckgrdColor.SelectEntryPos( _nPos ); ModifyHatchBckgrdColorHdl_Impl( this ); } // evaluate if any other Tabpage set another filltype if( aTypeLB.GetSelectEntryPos() > XFILL_NONE) { switch( nPageType ) { case PT_GRADIENT: aTypeLB.SelectEntryPos( XFILL_GRADIENT ); aLbGradient.SelectEntryPos( _nPos ); ClickGradientHdl_Impl( this ); break; case PT_HATCH: aTypeLB.SelectEntryPos( XFILL_HATCH ); aLbHatching.SelectEntryPos( _nPos ); ClickHatchingHdl_Impl( this ); break; case PT_BITMAP: aTypeLB.SelectEntryPos( XFILL_BITMAP ); aLbBitmap.SelectEntryPos( _nPos ); ClickBitmapHdl_Impl( this ); break; case PT_COLOR: aTypeLB.SelectEntryPos( XFILL_SOLID ); aLbColor.SelectEntryPos( _nPos ); aLbHatchBckgrdColor.SelectEntryPos( _nPos ); ClickColorHdl_Impl( this ); break; } } nPageType = PT_AREA; } } } // ----------------------------------------------------------------------- int SvxAreaTabPage::DeactivatePage( SfxItemSet* _pSet ) { if( nDlgType == 0 ) // Flaechen-Dialog { sal_uInt16 nPosOrig = nPos; XFillStyle eStyle = (XFillStyle) aTypeLB.GetSelectEntryPos(); switch( eStyle ) { case XFILL_GRADIENT: { nPageType = PT_GRADIENT; nPos = aLbGradient.GetSelectEntryPos(); if( nPosOrig != nPos ) *pnGradientListState |= CT_MODIFIED; } break; case XFILL_HATCH: { nPageType = PT_HATCH; nPos = aLbHatching.GetSelectEntryPos(); if( nPosOrig != nPos ) *pnHatchingListState |= CT_MODIFIED; } break; case XFILL_BITMAP: { nPageType = PT_BITMAP; nPos = aLbBitmap.GetSelectEntryPos(); if( nPosOrig != nPos ) *pnBitmapListState |= CT_MODIFIED; } break; case XFILL_SOLID: { nPageType = PT_COLOR; nPos = aLbColor.GetSelectEntryPos(); if( nPosOrig != nPos ) *pnColorTableState |= CT_MODIFIED; } break; default: ;//prevent warning } } if( _pSet ) FillItemSet( *_pSet ); return( LEAVE_PAGE ); } // ----------------------------------------------------------------------- sal_Bool SvxAreaTabPage::FillItemSet( SfxItemSet& rAttrs ) { const SfxPoolItem* pOld = NULL; sal_uInt16 _nPos; sal_Bool bModified = sal_False; if( nDlgType != 0 || *pbAreaTP ) { XFillStyle eStyle = (XFillStyle) aTypeLB.GetSelectEntryPos(); XFillStyle eSavedStyle = (XFillStyle) aTypeLB.GetSavedValue(); switch( eStyle ) { case XFILL_NONE: { if( eSavedStyle != eStyle ) { XFillStyleItem aStyleItem( XFILL_NONE ); pOld = GetOldItem( rAttrs, XATTR_FILLSTYLE ); if ( !pOld || !( *(const XFillStyleItem*)pOld == aStyleItem ) ) { rAttrs.Put( aStyleItem ); bModified = sal_True; } } } break; case XFILL_SOLID: { _nPos = aLbColor.GetSelectEntryPos(); if( _nPos != LISTBOX_ENTRY_NOTFOUND && _nPos != aLbColor.GetSavedValue() ) { XFillColorItem aItem( aLbColor.GetSelectEntry(), aLbColor.GetSelectEntryColor() ); pOld = GetOldItem( rAttrs, XATTR_FILLCOLOR ); if ( !pOld || !( *(const XFillColorItem*)pOld == aItem ) ) { rAttrs.Put( aItem ); bModified = sal_True; } } // NEU if( (eSavedStyle != eStyle) && ( bModified || SFX_ITEM_SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLCOLOR ), sal_True ) ) ) { XFillStyleItem aStyleItem( XFILL_SOLID ); pOld = GetOldItem( rAttrs, XATTR_FILLSTYLE ); if ( !pOld || !( *(const XFillStyleItem*)pOld == aStyleItem ) ) { rAttrs.Put( aStyleItem ); bModified = sal_True; } } } break; case XFILL_GRADIENT: { _nPos = aLbGradient.GetSelectEntryPos(); if( _nPos != LISTBOX_ENTRY_NOTFOUND && _nPos != aLbGradient.GetSavedValue() ) { XGradient aGradient = pGradientList->GetGradient( _nPos )->GetGradient(); String aString = aLbGradient.GetSelectEntry(); XFillGradientItem aItem( aString, aGradient ); pOld = GetOldItem( rAttrs, XATTR_FILLGRADIENT ); if ( !pOld || !( *(const XFillGradientItem*)pOld == aItem ) ) { rAttrs.Put( aItem ); bModified = sal_True; } } // NEU if( (eSavedStyle != eStyle) && ( bModified || SFX_ITEM_SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLGRADIENT ), sal_True ) ) ) { XFillStyleItem aStyleItem( XFILL_GRADIENT ); pOld = GetOldItem( rAttrs, XATTR_FILLSTYLE ); if ( !pOld || !( *(const XFillStyleItem*)pOld == aStyleItem ) ) { rAttrs.Put( aStyleItem ); bModified = sal_True; } } } break; case XFILL_HATCH: { _nPos = aLbHatching.GetSelectEntryPos(); if( _nPos != LISTBOX_ENTRY_NOTFOUND && _nPos != aLbHatching.GetSavedValue() ) { XHatch aHatching = pHatchingList->GetHatch( _nPos )->GetHatch(); String aString = aLbHatching.GetSelectEntry(); XFillHatchItem aItem( aString, aHatching ); pOld = GetOldItem( rAttrs, XATTR_FILLHATCH ); if ( !pOld || !( *(const XFillHatchItem*)pOld == aItem ) ) { rAttrs.Put( aItem ); bModified = sal_True; } } XFillBackgroundItem aItem ( aCbxHatchBckgrd.IsChecked() ); rAttrs.Put( aItem ); nPos = aLbHatchBckgrdColor.GetSelectEntryPos(); if( nPos != LISTBOX_ENTRY_NOTFOUND && nPos != aLbHatchBckgrdColor.GetSavedValue() ) { XFillColorItem aFillColorItem( aLbHatchBckgrdColor.GetSelectEntry(), aLbHatchBckgrdColor.GetSelectEntryColor() ); pOld = GetOldItem( rAttrs, XATTR_FILLCOLOR ); if ( !pOld || !( *(const XFillColorItem*)pOld == aFillColorItem ) ) { rAttrs.Put( aFillColorItem ); bModified = sal_True; } } // NEU if( (eSavedStyle != eStyle) && ( bModified || SFX_ITEM_SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLHATCH ), sal_True ) ) ) { XFillStyleItem aStyleItem( XFILL_HATCH ); pOld = GetOldItem( rAttrs, XATTR_FILLSTYLE ); if ( !pOld || !( *(const XFillStyleItem*)pOld == aStyleItem ) ) { rAttrs.Put( aStyleItem ); bModified = sal_True; } } } break; case XFILL_BITMAP: { nPos = aLbBitmap.GetSelectEntryPos(); if( nPos != LISTBOX_ENTRY_NOTFOUND && nPos != aLbBitmap.GetSavedValue() ) { XOBitmap aXOBitmap = pBitmapList->GetBitmap( nPos )->GetXBitmap(); String aString = aLbBitmap.GetSelectEntry(); XFillBitmapItem aFillBitmapItem( aString, aXOBitmap ); pOld = GetOldItem( rAttrs, XATTR_FILLBITMAP ); if ( !pOld || !( *(const XFillBitmapItem*)pOld == aFillBitmapItem ) ) { rAttrs.Put( aFillBitmapItem ); bModified = sal_True; } } // NEU if( (eSavedStyle != eStyle) && ( bModified || SFX_ITEM_SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLBITMAP ), sal_True ) ) ) { XFillStyleItem aStyleItem( XFILL_BITMAP ); pOld = GetOldItem( rAttrs, XATTR_FILLSTYLE ); if ( !pOld || !( *(const XFillStyleItem*)pOld == aStyleItem ) ) { rAttrs.Put( aStyleItem ); bModified = sal_True; } } } break; } // Schrittweite if( aTsbStepCount.IsEnabled() ) { sal_uInt16 nValue = 0; sal_Bool bValueModified = sal_False; TriState eState = aTsbStepCount.GetState(); if( eState == STATE_CHECK ) { if( eState != aTsbStepCount.GetSavedValue() ) bValueModified = sal_True; } else { // Zustand != Disabled ? if( aNumFldStepCount.GetText().Len() > 0 ) { nValue = (sal_uInt16) aNumFldStepCount.GetValue(); if( nValue != (sal_uInt16) aNumFldStepCount.GetSavedValue().ToInt32() ) bValueModified = sal_True; } } if( bValueModified ) { XGradientStepCountItem aFillBitmapItem( nValue ); pOld = GetOldItem( rAttrs, XATTR_GRADIENTSTEPCOUNT ); if ( !pOld || !( *(const XGradientStepCountItem*)pOld == aFillBitmapItem ) ) { rAttrs.Put( aFillBitmapItem ); bModified = sal_True; } } } // Kacheln if( aTsbTile.IsEnabled() ) { TriState eState = aTsbTile.GetState(); if( eState != aTsbTile.GetSavedValue() ) { XFillBmpTileItem aFillBmpTileItem( sal::static_int_cast< sal_Bool >( eState ) ); pOld = GetOldItem( rAttrs, XATTR_FILLBMP_TILE ); if ( !pOld || !( *(const XFillBmpTileItem*)pOld == aFillBmpTileItem ) ) { rAttrs.Put( aFillBmpTileItem ); bModified = sal_True; } } } // Stretchen if( aTsbStretch.IsEnabled() ) { TriState eState = aTsbStretch.GetState(); if( eState != aTsbStretch.GetSavedValue() ) { XFillBmpStretchItem aFillBmpStretchItem( sal::static_int_cast< sal_Bool >( eState ) ); pOld = GetOldItem( rAttrs, XATTR_FILLBMP_STRETCH ); if ( !pOld || !( *(const XFillBmpStretchItem*)pOld == aFillBmpStretchItem ) ) { rAttrs.Put( aFillBmpStretchItem ); bModified = sal_True; } } } // Originalgroesse (im UI) wird wie folgt benutzt: // Controls sind disabled, muessen aber gesetzt werden. // SizeX = 0; SizeY = 0; Log = sal_True //aTsbScale TriState eState = aTsbScale.GetState(); if( eState != aTsbScale.GetSavedValue() || ( !aTsbScale.IsEnabled() && aTsbOriginal.IsEnabled() && aTsbScale.GetSavedValue() != STATE_CHECK ) ) { XFillBmpSizeLogItem* pItem = NULL; if( aTsbScale.IsEnabled() ) pItem = new XFillBmpSizeLogItem( eState == STATE_NOCHECK ); else if( aTsbOriginal.IsEnabled() && aTsbOriginal.GetState() == STATE_CHECK ) pItem = new XFillBmpSizeLogItem( sal_True ); if( pItem ) { pOld = GetOldItem( rAttrs, XATTR_FILLBMP_SIZELOG ); if ( !pOld || !( *(const XFillBmpSizeLogItem*)pOld == *pItem ) ) { rAttrs.Put( *pItem ); bModified = sal_True; } delete pItem; } } //aMtrFldXSize String aStr = aMtrFldXSize.GetText(); { XFillBmpSizeXItem* pItem = NULL; TriState eScaleState = aTsbScale.GetState(); if( aMtrFldXSize.IsEnabled() && aStr.Len() > 0 && aStr != aMtrFldXSize.GetSavedValue() ) { if( eScaleState == STATE_NOCHECK ) pItem = new XFillBmpSizeXItem( GetCoreValue( aMtrFldXSize, ePoolUnit ) ); else { // Prozentwerte werden negativ gesetzt, damit // diese nicht skaliert werden; dieses wird // im Item beruecksichtigt pItem = new XFillBmpSizeXItem( -labs( static_cast(aMtrFldXSize.GetValue()) ) ); } } else if( aTsbOriginal.IsEnabled() && aTsbOriginal.GetState() == STATE_CHECK && aMtrFldXSize.GetSavedValue().Len() > 0 ) pItem = new XFillBmpSizeXItem( 0 ); if( pItem ) { pOld = GetOldItem( rAttrs, XATTR_FILLBMP_SIZEX ); if ( !pOld || !( *(const XFillBmpSizeXItem*)pOld == *pItem ) ) { rAttrs.Put( *pItem ); bModified = sal_True; } delete pItem; } } //aMtrFldYSize aStr = aMtrFldYSize.GetText(); { XFillBmpSizeYItem* pItem = NULL; TriState eScaleState = aTsbScale.GetState(); if( aMtrFldYSize.IsEnabled() && aStr.Len() > 0 && aStr != aMtrFldYSize.GetSavedValue() ) { if( eScaleState == STATE_NOCHECK ) pItem = new XFillBmpSizeYItem( GetCoreValue( aMtrFldYSize, ePoolUnit ) ); else { // Prozentwerte werden negativ gesetzt, damit // diese vom MetricItem nicht skaliert werden; // dieses wird im Item beruecksichtigt pItem = new XFillBmpSizeYItem( -labs( static_cast(aMtrFldYSize.GetValue()) ) ); } } else if( aTsbOriginal.IsEnabled() && aTsbOriginal.GetState() == STATE_CHECK && aMtrFldYSize.GetSavedValue().Len() > 0 ) pItem = new XFillBmpSizeYItem( 0 ); if( pItem ) { pOld = GetOldItem( rAttrs, XATTR_FILLBMP_SIZEY ); if ( !pOld || !( *(const XFillBmpSizeYItem*)pOld == *pItem ) ) { rAttrs.Put( *pItem ); bModified = sal_True; } delete pItem; } } //aRbtRow //aRbtColumn //aMtrFldOffset if( aMtrFldOffset.IsEnabled() ) { String aMtrString = aMtrFldOffset.GetText(); if( ( aMtrString.Len() > 0 && aMtrString != aMtrFldOffset.GetSavedValue() ) || aRbtRow.GetSavedValue() != aRbtRow.IsChecked() || aRbtColumn.GetSavedValue() != aRbtColumn.IsChecked() ) { if( aRbtRow.IsChecked() ) { XFillBmpTileOffsetXItem aFillBmpTileOffsetXItem( (sal_uInt16) aMtrFldOffset.GetValue() ); pOld = GetOldItem( rAttrs, XATTR_FILLBMP_TILEOFFSETX ); if ( !pOld || !( *(const XFillBmpTileOffsetXItem*)pOld == aFillBmpTileOffsetXItem ) ) { rAttrs.Put( aFillBmpTileOffsetXItem ); rAttrs.Put( XFillBmpTileOffsetYItem( 0 ) ); bModified = sal_True; } } else if( aRbtColumn.IsChecked() ) { XFillBmpTileOffsetYItem aFillBmpTileOffsetYItem( (sal_uInt16) aMtrFldOffset.GetValue() ); pOld = GetOldItem( rAttrs, XATTR_FILLBMP_TILEOFFSETY ); if ( !pOld || !( *(const XFillBmpTileOffsetYItem*)pOld == aFillBmpTileOffsetYItem ) ) { rAttrs.Put( aFillBmpTileOffsetYItem ); rAttrs.Put( XFillBmpTileOffsetXItem( 0 ) ); bModified = sal_True; } } } } //aCtlPosition if( aCtlPosition.IsEnabled() ) { sal_Bool bPut = sal_False; RECT_POINT _eRP = aCtlPosition.GetActualRP(); if( SFX_ITEM_DONTCARE == rOutAttrs.GetItemState( XATTR_FILLBMP_POS ) ) bPut = sal_True; else { RECT_POINT eValue = ( ( const XFillBmpPosItem& ) rOutAttrs.Get( XATTR_FILLBMP_POS ) ).GetValue(); if( eValue != _eRP ) bPut = sal_True; } if( bPut ) { XFillBmpPosItem aFillBmpPosItem( _eRP ); pOld = GetOldItem( rAttrs, XATTR_FILLBMP_POS ); if ( !pOld || !( *(const XFillBmpPosItem*)pOld == aFillBmpPosItem ) ) { rAttrs.Put( aFillBmpPosItem ); bModified = sal_True; } } } //aMtrFldXOffset if( aMtrFldXOffset.IsEnabled() ) { String sMtrXOffset = aMtrFldXOffset.GetText(); if( sMtrXOffset.Len() > 0 && sMtrXOffset != aMtrFldXOffset.GetSavedValue() ) { XFillBmpPosOffsetXItem aFillBmpPosOffsetXItem( (sal_uInt16) aMtrFldXOffset.GetValue() ); pOld = GetOldItem( rAttrs, XATTR_FILLBMP_POSOFFSETX ); if ( !pOld || !( *(const XFillBmpPosOffsetXItem*)pOld == aFillBmpPosOffsetXItem ) ) { rAttrs.Put( aFillBmpPosOffsetXItem ); bModified = sal_True; } } } //aMtrFldYOffset if( aMtrFldYOffset.IsEnabled() ) { String sMtrYOffset = aMtrFldYOffset.GetText(); if( sMtrYOffset.Len() > 0 && sMtrYOffset != aMtrFldYOffset.GetSavedValue() ) { XFillBmpPosOffsetYItem aFillBmpPosOffsetYItem( (sal_uInt16) aMtrFldYOffset.GetValue() ); pOld = GetOldItem( rAttrs, XATTR_FILLBMP_POSOFFSETY ); if ( !pOld || !( *(const XFillBmpPosOffsetYItem*)pOld == aFillBmpPosOffsetYItem ) ) { rAttrs.Put( aFillBmpPosOffsetYItem ); bModified = sal_True; } } } rAttrs.Put (SfxUInt16Item(SID_PAGE_TYPE,nPageType)); rAttrs.Put (SfxUInt16Item(SID_TABPAGE_POS,nPos)); } return( bModified ); } // ----------------------------------------------------------------------- void SvxAreaTabPage::Reset( const SfxItemSet& rAttrs ) { XFillStyle eXFS; if( rAttrs.GetItemState( XATTR_FILLSTYLE ) != SFX_ITEM_DONTCARE ) { eXFS = (XFillStyle) ( ( ( const XFillStyleItem& ) rAttrs. Get( GetWhich( XATTR_FILLSTYLE ) ) ).GetValue() ); aTypeLB.SelectEntryPos( sal::static_int_cast< sal_uInt16 >( eXFS ) ); switch( eXFS ) { case XFILL_NONE: ClickInvisibleHdl_Impl( this ); break; case XFILL_SOLID: if( SFX_ITEM_DONTCARE != rAttrs.GetItemState( XATTR_FILLCOLOR ) ) { XFillColorItem aColorItem( ( const XFillColorItem& ) rAttrs.Get( XATTR_FILLCOLOR ) ); aLbColor.SelectEntry( aColorItem.GetColorValue() ); aLbHatchBckgrdColor.SelectEntry( aColorItem.GetColorValue() ); } ClickColorHdl_Impl( this ); break; case XFILL_GRADIENT: if( SFX_ITEM_DONTCARE != rAttrs.GetItemState( XATTR_FILLGRADIENT ) ) { XFillGradientItem aGradientItem( ( ( const XFillGradientItem& ) rAttrs.Get( XATTR_FILLGRADIENT ) ) ); String aString( aGradientItem.GetName() ); XGradient aGradient( aGradientItem.GetGradientValue() ); aLbGradient.SelectEntryByList( pGradientList, aString, aGradient ); } ClickGradientHdl_Impl( this ); break; case XFILL_HATCH: if( SFX_ITEM_DONTCARE != rAttrs.GetItemState( XATTR_FILLHATCH ) ) { aLbHatching.SelectEntry( ( ( const XFillHatchItem& ) rAttrs.Get( XATTR_FILLHATCH ) ).GetName() ); } ClickHatchingHdl_Impl( this ); if ( SFX_ITEM_DONTCARE != rAttrs.GetItemState ( XATTR_FILLBACKGROUND ) ) { aCbxHatchBckgrd.Check ( ( ( const XFillBackgroundItem& ) rAttrs.Get ( XATTR_FILLBACKGROUND ) ).GetValue() ); } ToggleHatchBckgrdColorHdl_Impl( this ); if( SFX_ITEM_DONTCARE != rAttrs.GetItemState( XATTR_FILLCOLOR ) ) { XFillColorItem aColorItem( ( const XFillColorItem& ) rAttrs.Get( XATTR_FILLCOLOR ) ); aLbColor.SelectEntry( aColorItem.GetColorValue() ); aLbHatchBckgrdColor.SelectEntry( aColorItem.GetColorValue() ); } break; case XFILL_BITMAP: { if( SFX_ITEM_DONTCARE != rAttrs.GetItemState( XATTR_FILLBITMAP ) ) { XFillBitmapItem aBitmapItem( ( const XFillBitmapItem& ) rAttrs.Get( XATTR_FILLBITMAP ) ); String aString( aBitmapItem.GetName() ); aLbBitmap.SelectEntry( aString ); } ClickBitmapHdl_Impl( this ); } break; default: break; } } else { // Alle LBs nicht zug"anglich machen aLbColor.Hide(); aLbGradient.Hide(); aLbHatching.Hide(); aLbBitmap.Hide(); aCtlBitmapPreview.Hide(); aLbColor.Disable(); aLbColor.Show(); // Damit Reset() auch mit Zurueck richtig funktioniert aTypeLB.SetNoSelection(); } // Schrittweite if( ( rAttrs.GetItemState( XATTR_GRADIENTSTEPCOUNT ) != SFX_ITEM_DONTCARE ) || ( rAttrs.GetItemState( XATTR_FILLSTYLE ) != SFX_ITEM_DONTCARE ) ) { aTsbStepCount.EnableTriState( sal_False ); sal_uInt16 nValue = ( ( const XGradientStepCountItem& ) rAttrs.Get( XATTR_GRADIENTSTEPCOUNT ) ).GetValue(); if( nValue == 0 ) { aTsbStepCount.SetState( STATE_CHECK ); aNumFldStepCount.SetText( String() ); } else { aTsbStepCount.SetState( STATE_NOCHECK ); aNumFldStepCount.SetValue( nValue ); } ModifyStepCountHdl_Impl( &aTsbStepCount ); } else { aTsbStepCount.SetState( STATE_DONTKNOW ); aNumFldStepCount.SetText( String() ); } // Attribute fuer die Bitmap-Fuellung // Ist Kacheln gesetzt? if( rAttrs.GetItemState( XATTR_FILLBMP_TILE ) != SFX_ITEM_DONTCARE ) { aTsbTile.EnableTriState( sal_False ); if( ( ( const XFillBmpTileItem& ) rAttrs.Get( XATTR_FILLBMP_TILE ) ).GetValue() ) aTsbTile.SetState( STATE_CHECK ); else aTsbTile.SetState( STATE_NOCHECK ); } else aTsbTile.SetState( STATE_DONTKNOW ); // Ist Stretchen gesetzt? if( rAttrs.GetItemState( XATTR_FILLBMP_STRETCH ) != SFX_ITEM_DONTCARE ) { aTsbStretch.EnableTriState( sal_False ); if( ( ( const XFillBmpStretchItem& ) rAttrs.Get( XATTR_FILLBMP_STRETCH ) ).GetValue() ) aTsbStretch.SetState( STATE_CHECK ); else aTsbStretch.SetState( STATE_NOCHECK ); } else aTsbStretch.SetState( STATE_DONTKNOW ); //aTsbScale if( rAttrs.GetItemState( XATTR_FILLBMP_SIZELOG ) != SFX_ITEM_DONTCARE ) { aTsbScale.EnableTriState( sal_False ); if( ( ( const XFillBmpSizeLogItem& ) rAttrs.Get( XATTR_FILLBMP_SIZELOG ) ).GetValue() ) aTsbScale.SetState( STATE_NOCHECK ); else aTsbScale.SetState( STATE_CHECK ); ClickScaleHdl_Impl( NULL ); } else aTsbScale.SetState( STATE_DONTKNOW ); // Status fuer Originalgroesse ermitteln TriState eOriginal = STATE_NOCHECK; //aMtrFldXSize if( rAttrs.GetItemState( XATTR_FILLBMP_SIZEX ) != SFX_ITEM_DONTCARE ) { sal_Int32 nValue = ( ( const XFillBmpSizeXItem& ) rAttrs.Get( XATTR_FILLBMP_SIZEX ) ).GetValue(); if( aTsbScale.GetState() == STATE_CHECK ) { // Wenn im Item eine Prozentangabe steckt, // so ist diese wegen des MetricItems negativ aMtrFldXSize.SetValue( labs( nValue ) ); } else SetMetricValue( aMtrFldXSize, nValue, ePoolUnit ); aMtrFldXSize.SaveValue(); if( nValue == 0 ) { eOriginal = STATE_CHECK; // Wert ist beim Ausschalten von Originalgroesse sonst zu klein // (Performance-Problem) aMtrFldXSize.SetValue( 100 ); } } else { aMtrFldXSize.SetText( String() ); aMtrFldXSize.SaveValue(); } //aMtrFldYSize if( rAttrs.GetItemState( XATTR_FILLBMP_SIZEY ) != SFX_ITEM_DONTCARE ) { sal_Int32 nValue = ( ( const XFillBmpSizeYItem& ) rAttrs.Get( XATTR_FILLBMP_SIZEY ) ).GetValue(); if( aTsbScale.GetState() == STATE_CHECK ) { // Wenn im Item eine Prozentangabe steckt, // so ist diese wegen des MetricItems negativ aMtrFldYSize.SetValue( labs( nValue ) ); } else SetMetricValue( aMtrFldYSize, nValue, ePoolUnit ); aMtrFldYSize.SaveValue(); if( nValue == 0 ) aMtrFldYSize.SetValue( 100 ); //s.o. else eOriginal = STATE_NOCHECK; } else { aMtrFldYSize.SetText( String() ); aMtrFldYSize.SaveValue(); eOriginal = STATE_NOCHECK; } // aTsbOriginal aTsbOriginal.SetState( eOriginal ); // #93372# Setting proper state after changing button ModifyTileHdl_Impl( NULL ); //aRbtRow //aRbtColumn //aMtrFldOffset if( rAttrs.GetItemState( XATTR_FILLBMP_TILEOFFSETX ) != SFX_ITEM_DONTCARE ) { sal_uInt16 nValue = ( ( const XFillBmpTileOffsetXItem& ) rAttrs.Get( XATTR_FILLBMP_TILEOFFSETX ) ).GetValue(); if( nValue > 0 ) { aMtrFldOffset.SetValue( nValue ); aRbtRow.Check(); } else if( rAttrs.GetItemState( XATTR_FILLBMP_TILEOFFSETY ) != SFX_ITEM_DONTCARE ) { nValue = ( ( const XFillBmpTileOffsetYItem& ) rAttrs.Get( XATTR_FILLBMP_TILEOFFSETY ) ).GetValue(); if( nValue > 0 ) { aMtrFldOffset.SetValue( nValue ); aRbtColumn.Check(); } } else aMtrFldOffset.SetValue( 0 ); } else aMtrFldOffset.SetText( String() ); //aCtlPosition if( rAttrs.GetItemState( XATTR_FILLBMP_POS ) != SFX_ITEM_DONTCARE ) { RECT_POINT eValue = ( ( const XFillBmpPosItem& ) rAttrs.Get( XATTR_FILLBMP_POS ) ).GetValue(); aCtlPosition.SetActualRP( eValue ); } else aCtlPosition.Reset(); //aMtrFldXOffset if( rAttrs.GetItemState( XATTR_FILLBMP_POSOFFSETX ) != SFX_ITEM_DONTCARE ) { sal_Int32 nValue = ( ( const XFillBmpPosOffsetXItem& ) rAttrs.Get( XATTR_FILLBMP_POSOFFSETX ) ).GetValue(); aMtrFldXOffset.SetValue( nValue ); } else aMtrFldXOffset.SetText( String() ); //aMtrFldYOffset if( rAttrs.GetItemState( XATTR_FILLBMP_POSOFFSETY ) != SFX_ITEM_DONTCARE ) { sal_Int32 nValue = ( ( const XFillBmpPosOffsetYItem& ) rAttrs.Get( XATTR_FILLBMP_POSOFFSETY ) ).GetValue(); aMtrFldYOffset.SetValue( nValue ); } else aMtrFldYOffset.SetText( String() ); // Erst hier, damit Tile und Stretch mit beruecksichtigt wird if( aTypeLB.GetSelectEntryPos() == XFILL_BITMAP ) ClickBitmapHdl_Impl( NULL ); // Werte sichern aTypeLB.SaveValue(); aLbColor.SaveValue(); aLbGradient.SaveValue(); aLbHatching.SaveValue(); aLbHatchBckgrdColor.SaveValue(); aLbBitmap.SaveValue(); aTsbStepCount.SaveValue(); aNumFldStepCount.SaveValue(); aTsbTile.SaveValue(); aTsbStretch.SaveValue(); aTsbScale.SaveValue(); aRbtRow.SaveValue(); aRbtColumn.SaveValue(); aMtrFldOffset.SaveValue(); aMtrFldXOffset.SaveValue(); aMtrFldYOffset.SaveValue(); } // ----------------------------------------------------------------------- SfxTabPage* SvxAreaTabPage::Create( Window* pWindow, const SfxItemSet& rAttrs ) { return( new SvxAreaTabPage( pWindow, rAttrs ) ); } //------------------------------------------------------------------------ sal_uInt16* SvxAreaTabPage::GetRanges() { return( pAreaRanges ); } //------------------------------------------------------------------------ IMPL_LINK( SvxAreaTabPage, SelectDialogTypeHdl_Impl, ListBox *, EMPTYARG ) { switch( (XFillStyle)aTypeLB.GetSelectEntryPos() ) { case XFILL_NONE: ClickInvisibleHdl_Impl( this ); break; case XFILL_SOLID: ClickColorHdl_Impl( this ); break; case XFILL_GRADIENT: ClickGradientHdl_Impl( this ); break; case XFILL_HATCH: ClickHatchingHdl_Impl( this ); break; case XFILL_BITMAP: ClickBitmapHdl_Impl( this ); break; } return 0; } IMPL_LINK( SvxAreaTabPage, ClickInvisibleHdl_Impl, void *, EMPTYARG ) { aTsbTile.Hide(); aTsbStretch.Hide(); aTsbScale.Hide(); aTsbOriginal.Hide(); aFtXSize.Hide(); aMtrFldXSize.Hide(); aFtYSize.Hide(); aMtrFldYSize.Hide(); aFlSize.Hide(); aRbtRow.Hide(); aRbtColumn.Hide(); aMtrFldOffset.Hide(); aFlOffset.Hide(); aCtlPosition.Hide(); aFtXOffset.Hide(); aMtrFldXOffset.Hide(); aFtYOffset.Hide(); aMtrFldYOffset.Hide(); aFlPosition.Hide(); aLbColor.Hide(); aLbGradient.Hide(); aLbHatching.Hide(); aLbBitmap.Hide(); aCtlXRectPreview.Hide(); aCtlBitmapPreview.Hide(); aFlStepCount.Hide(); aTsbStepCount.Hide(); aNumFldStepCount.Hide(); // Controls for Hatch-Background aCbxHatchBckgrd.Hide(); aLbHatchBckgrdColor.Hide(); rXFSet.Put( XFillStyleItem( XFILL_NONE ) ); aCtlXRectPreview.SetAttributes( aXFillAttr.GetItemSet() ); aCtlBitmapPreview.SetAttributes( aXFillAttr.GetItemSet() ); aCtlXRectPreview.Invalidate(); aCtlBitmapPreview.Invalidate(); return( 0L ); } //------------------------------------------------------------------------ IMPL_LINK( SvxAreaTabPage, ClickColorHdl_Impl, void *, EMPTYARG ) { aTsbTile.Hide(); aTsbStretch.Hide(); aTsbScale.Hide(); aTsbOriginal.Hide(); aFtXSize.Hide(); aMtrFldXSize.Hide(); aFtYSize.Hide(); aMtrFldYSize.Hide(); aFlSize.Hide(); aRbtRow.Hide(); aRbtColumn.Hide(); aMtrFldOffset.Hide(); aFlOffset.Hide(); aCtlPosition.Hide(); aFtXOffset.Hide(); aMtrFldXOffset.Hide(); aFtYOffset.Hide(); aMtrFldYOffset.Hide(); aFlPosition.Hide(); aLbColor.Enable(); aLbColor.Show(); aLbGradient.Hide(); aLbHatching.Hide(); aLbBitmap.Hide(); aCtlXRectPreview.Enable(); aCtlXRectPreview.Show(); aCtlBitmapPreview.Hide(); aFlStepCount.Hide(); aTsbStepCount.Hide(); aNumFldStepCount.Hide(); // Controls for Hatch-Background aCbxHatchBckgrd.Hide(); aLbHatchBckgrdColor.Hide(); // Text der Tabelle setzen String aString( CUI_RES( RID_SVXSTR_TABLE ) ); aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ": " ) ); INetURLObject aURL( pColorTab->GetPath() ); aURL.Append( pColorTab->GetName() ); DBG_ASSERT( aURL.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" ); if( aURL.getBase().getLength() > 18 ) { aString += String(aURL.getBase()).Copy( 0, 15 ); aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "..." ) ); } else aString += String(aURL.getBase()); ModifyColorHdl_Impl( this ); return( 0L ); } //------------------------------------------------------------------------ IMPL_LINK( SvxAreaTabPage, ModifyColorHdl_Impl, void *, EMPTYARG ) { const SfxPoolItem* pPoolItem = NULL; sal_uInt16 _nPos = aLbColor.GetSelectEntryPos(); aLbHatchBckgrdColor.SelectEntryPos( _nPos ); if( _nPos != LISTBOX_ENTRY_NOTFOUND ) { rXFSet.Put( XFillStyleItem( XFILL_SOLID ) ); rXFSet.Put( XFillColorItem( String(), aLbColor.GetSelectEntryColor() ) ); } // NEU else if( SFX_ITEM_SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLCOLOR ), sal_True, &pPoolItem ) ) { rXFSet.Put( XFillStyleItem( XFILL_SOLID ) ); Color aColor( ( ( const XFillColorItem* ) pPoolItem )->GetColorValue() ); rXFSet.Put( XFillColorItem( String(), aColor ) ); } else rXFSet.Put( XFillStyleItem( XFILL_NONE ) ); aCtlXRectPreview.SetAttributes( aXFillAttr.GetItemSet() ); aCtlXRectPreview.Invalidate(); return( 0L ); } //------------------------------------------------------------------------ IMPL_LINK( SvxAreaTabPage, ClickGradientHdl_Impl, void *, EMPTYARG ) { aTsbTile.Hide(); aTsbStretch.Hide(); aTsbScale.Hide(); aTsbOriginal.Hide(); aFtXSize.Hide(); aMtrFldXSize.Hide(); aFtYSize.Hide(); aMtrFldYSize.Hide(); aFlSize.Hide(); aRbtRow.Hide(); aRbtColumn.Hide(); aMtrFldOffset.Hide(); aFlOffset.Hide(); aCtlPosition.Hide(); aFtXOffset.Hide(); aMtrFldXOffset.Hide(); aFtYOffset.Hide(); aMtrFldYOffset.Hide(); aFlPosition.Hide(); aLbColor.Hide(); aLbGradient.Enable(); aLbGradient.Show(); aLbHatching.Hide(); aLbBitmap.Hide(); aCtlXRectPreview.Enable(); aCtlXRectPreview.Show(); aCtlBitmapPreview.Hide(); aFlStepCount.Enable(); aFlStepCount.Show(); aTsbStepCount.Enable(); aTsbStepCount.Show(); aNumFldStepCount.Show(); // Controls for Hatch-Background aCbxHatchBckgrd.Hide(); aLbHatchBckgrdColor.Hide(); // Text der Tabelle setzen String aString( CUI_RES( RID_SVXSTR_TABLE ) ); aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ": " ) ); INetURLObject aURL( pGradientList->GetPath() ); aURL.Append( pGradientList->GetName() ); DBG_ASSERT( aURL.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" ); if( aURL.getBase().getLength() > 18 ) { aString += String(aURL.getBase()).Copy( 0, 15 ); aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "..." ) ); } else aString += String(aURL.getBase()); ModifyGradientHdl_Impl( this ); ModifyStepCountHdl_Impl( &aTsbStepCount ); return( 0L ); } //------------------------------------------------------------------------ IMPL_LINK( SvxAreaTabPage, ModifyGradientHdl_Impl, void *, EMPTYARG ) { const SfxPoolItem* pPoolItem = NULL; sal_uInt16 _nPos = aLbGradient.GetSelectEntryPos(); if( _nPos != LISTBOX_ENTRY_NOTFOUND ) { // ItemSet fuellen und an aCtlXRectPreview weiterleiten XGradientEntry* pEntry = pGradientList->GetGradient( _nPos ); rXFSet.Put( XFillStyleItem( XFILL_GRADIENT ) ); rXFSet.Put( XFillGradientItem( String(), pEntry->GetGradient() ) ); } else if( SFX_ITEM_SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLGRADIENT ), sal_True, &pPoolItem ) ) { rXFSet.Put( XFillStyleItem( XFILL_GRADIENT ) ); rXFSet.Put( XFillGradientItem( String(), ( ( const XFillGradientItem* ) pPoolItem )->GetGradientValue() ) ); } else rXFSet.Put( XFillStyleItem( XFILL_NONE ) ); aCtlXRectPreview.SetAttributes( aXFillAttr.GetItemSet() ); aCtlXRectPreview.Invalidate(); return( 0L ); } //------------------------------------------------------------------------ IMPL_LINK( SvxAreaTabPage, ClickHatchingHdl_Impl, void *, EMPTYARG ) { aLbColor.Hide(); aLbGradient.Hide(); aLbHatching.Enable(); aLbHatching.Show(); aLbBitmap.Hide(); aCtlXRectPreview.Enable(); aCtlXRectPreview.Show(); aCtlBitmapPreview.Hide(); aFlStepCount.Hide(); aTsbStepCount.Hide(); aNumFldStepCount.Hide(); aTsbTile.Hide(); aTsbStretch.Hide(); aTsbScale.Hide(); aTsbOriginal.Hide(); aFtXSize.Hide(); aMtrFldXSize.Hide(); aFtYSize.Hide(); aMtrFldYSize.Hide(); aFlSize.Hide(); aRbtRow.Hide(); aRbtColumn.Hide(); aMtrFldOffset.Hide(); aFlOffset.Hide(); aCtlPosition.Hide(); aFtXOffset.Hide(); aMtrFldXOffset.Hide(); aFtYOffset.Hide(); aMtrFldYOffset.Hide(); aFlPosition.Hide(); // Controls for Hatch-Background aCbxHatchBckgrd.Show(); aLbHatchBckgrdColor.Show(); aCbxHatchBckgrd.Enable(); aLbHatchBckgrdColor.Enable(); // Text der Tabelle setzen String aString( CUI_RES( RID_SVXSTR_TABLE ) ); aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ": " ) ); INetURLObject aURL( pHatchingList->GetPath() ); aURL.Append( pHatchingList->GetName() ); DBG_ASSERT( aURL.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" ); if( aURL.getBase().getLength() > 18 ) { aString += String(String(aURL.getBase()).Copy( 0, 15 )); aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "..." ) ); } else aString += String(aURL.getBase()); ModifyHatchingHdl_Impl( this ); ModifyHatchBckgrdColorHdl_Impl( this ); ToggleHatchBckgrdColorHdl_Impl( this ); return( 0L ); } //------------------------------------------------------------------------ IMPL_LINK( SvxAreaTabPage, ModifyHatchingHdl_Impl, void *, EMPTYARG ) { const SfxPoolItem* pPoolItem = NULL; sal_uInt16 _nPos = aLbHatching.GetSelectEntryPos(); if( _nPos != LISTBOX_ENTRY_NOTFOUND ) { // ItemSet fuellen und an aCtlXRectPreview weiterleiten XHatchEntry* pEntry = pHatchingList->GetHatch( _nPos ); rXFSet.Put( XFillStyleItem( XFILL_HATCH ) ); rXFSet.Put( XFillHatchItem( String(), pEntry->GetHatch() ) ); } else if( SFX_ITEM_SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLHATCH ), sal_True, &pPoolItem ) ) { rXFSet.Put( XFillStyleItem( XFILL_HATCH ) ); rXFSet.Put( XFillHatchItem( String(), ( ( const XFillHatchItem* ) pPoolItem )->GetHatchValue() ) ); } else rXFSet.Put( XFillStyleItem( XFILL_NONE ) ); aCtlXRectPreview.SetAttributes( aXFillAttr.GetItemSet() ); aCtlXRectPreview.Invalidate(); return( 0L ); } //------------------------------------------------------------------------ IMPL_LINK( SvxAreaTabPage, ModifyHatchBckgrdColorHdl_Impl, void *, EMPTYARG ) { const SfxPoolItem* pPoolItem = NULL; sal_uInt16 _nPos = aLbHatchBckgrdColor.GetSelectEntryPos(); aLbColor.SelectEntryPos( _nPos ); if( _nPos != LISTBOX_ENTRY_NOTFOUND ) { rXFSet.Put( XFillColorItem( String(), aLbHatchBckgrdColor.GetSelectEntryColor() ) ); } else if( SFX_ITEM_SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLCOLOR ), sal_True, &pPoolItem ) ) { Color aColor( ( ( const XFillColorItem* ) pPoolItem )->GetColorValue() ); rXFSet.Put( XFillColorItem( String(), aColor ) ); } else rXFSet.Put( XFillStyleItem( XFILL_NONE ) ); aCtlXRectPreview.SetAttributes( aXFillAttr.GetItemSet() ); aCtlXRectPreview.Invalidate(); return( 0L ); } //------------------------------------------------------------------------ IMPL_LINK( SvxAreaTabPage, ToggleHatchBckgrdColorHdl_Impl, void *, EMPTYARG ) { // switch on/off backgroundcolor for hatches aLbHatchBckgrdColor.Enable( aCbxHatchBckgrd.IsChecked() ); XFillBackgroundItem aItem( aCbxHatchBckgrd.IsChecked() ); rXFSet.Put ( aItem, XATTR_FILLBACKGROUND ); aCtlXRectPreview.SetAttributes( aXFillAttr.GetItemSet() ); aCtlXRectPreview.Invalidate(); if( aLbHatchBckgrdColor.GetSelectEntryPos() == LISTBOX_ENTRY_NOTFOUND ) { if ( SFX_ITEM_SET == rOutAttrs.GetItemState( XATTR_FILLCOLOR ) )//>= SFX_ITEM_DEFAULT ) { XFillColorItem aColorItem( (const XFillColorItem&)rOutAttrs.Get( XATTR_FILLCOLOR ) ); aLbHatchBckgrdColor.SelectEntry( aColorItem.GetColorValue() ); } } return( 0L ); } //------------------------------------------------------------------------ IMPL_LINK( SvxAreaTabPage, ClickBitmapHdl_Impl, void *, EMPTYARG ) { aLbColor.Hide(); aLbGradient.Hide(); aLbHatching.Hide(); aLbBitmap.Enable(); aLbBitmap.Show(); aCtlBitmapPreview.Enable(); aCtlBitmapPreview.Show(); aCtlXRectPreview.Hide(); aFlStepCount.Hide(); aTsbStepCount.Hide(); aNumFldStepCount.Hide(); aTsbTile.Enable(); aTsbStretch.Enable(); aTsbScale.Enable(); aTsbOriginal.Enable(); aFtXSize.Enable(); aMtrFldXSize.Enable(); aFtYSize.Enable(); aMtrFldYSize.Enable(); aFlSize.Enable(); aCtlPosition.Enable(); aFtXOffset.Enable(); aMtrFldXOffset.Enable(); aFtYOffset.Enable(); aMtrFldYOffset.Enable(); aFlPosition.Enable(); aRbtRow.Enable(); aRbtColumn.Enable(); aMtrFldOffset.Enable(); aFlOffset.Enable(); // Controls for Hatch-Background aCbxHatchBckgrd.Hide(); aLbHatchBckgrdColor.Hide(); aTsbTile.Show(); aTsbStretch.Show(); aTsbScale.Show(); aTsbOriginal.Show(); aFtXSize.Show(); aMtrFldXSize.Show(); aFtYSize.Show(); aMtrFldYSize.Show(); aFlSize.Show(); aCtlPosition.Show(); aFtXOffset.Show(); aMtrFldXOffset.Show(); aFtYOffset.Show(); aMtrFldYOffset.Show(); aFlPosition.Show(); aRbtRow.Show(); aRbtColumn.Show(); aMtrFldOffset.Show(); aFlOffset.Show(); // Text der Tabelle setzen String aString( CUI_RES( RID_SVXSTR_TABLE ) ); aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ": " ) ); INetURLObject aURL( pBitmapList->GetPath() ); aURL.Append( pBitmapList->GetName() ); DBG_ASSERT( aURL.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" ); if( aURL.getBase().getLength() > 18 ) { aString += String(aURL.getBase()).Copy( 0, 15 ); aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "..." ) ); } else aString += String(aURL.getBase()); ModifyBitmapHdl_Impl( this ); ModifyTileHdl_Impl( &aTsbOriginal ); return( 0L ); } //------------------------------------------------------------------------ IMPL_LINK( SvxAreaTabPage, ModifyBitmapHdl_Impl, void *, EMPTYARG ) { const SfxPoolItem* pPoolItem = NULL; sal_uInt16 _nPos = aLbBitmap.GetSelectEntryPos(); if( _nPos != LISTBOX_ENTRY_NOTFOUND ) { // ItemSet fuellen und an aCtlXRectPreview weiterleiten XBitmapEntry* pEntry = pBitmapList->GetBitmap( _nPos ); rXFSet.Put( XFillStyleItem( XFILL_BITMAP ) ); rXFSet.Put( XFillBitmapItem( String(), pEntry->GetXBitmap() ) ); } else if( SFX_ITEM_SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLBITMAP ), sal_True, &pPoolItem ) ) { rXFSet.Put( XFillStyleItem( XFILL_BITMAP ) ); rXFSet.Put( XFillBitmapItem( String(), ( ( const XFillBitmapItem* ) pPoolItem )->GetBitmapValue() ) ); } else rXFSet.Put( XFillStyleItem( XFILL_NONE ) ); aCtlBitmapPreview.SetAttributes( aXFillAttr.GetItemSet() ); aCtlBitmapPreview.Invalidate(); return( 0L ); } //------------------------------------------------------------------------ IMPL_LINK( SvxAreaTabPage, ModifyStepCountHdl_Impl, void *, p ) { if( p == &aTsbStepCount ) { if( aTsbStepCount.GetState() == STATE_NOCHECK ) { if( aNumFldStepCount.GetText().Len() == 0 ) aNumFldStepCount.SetText( String::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "64") )); aNumFldStepCount.Enable(); } else aNumFldStepCount.Disable(); } sal_uInt16 nValue = 0; if( aTsbStepCount.GetState() != STATE_CHECK ) { // Zustand != Disabled ? if( aNumFldStepCount.GetText().Len() > 0 ) nValue = (sal_uInt16) aNumFldStepCount.GetValue(); } rXFSet.Put( XGradientStepCountItem( nValue ) ); aCtlXRectPreview.SetAttributes( aXFillAttr.GetItemSet() ); aCtlXRectPreview.Invalidate(); return( 0L ); } //------------------------------------------------------------------------ IMPL_LINK( SvxAreaTabPage, ModifyTileHdl_Impl, void *, EMPTYARG ) { TriState eState = aTsbTile.GetState(); if( eState == STATE_CHECK ) { aTsbStretch.Disable(); aRbtRow.Enable(); aRbtColumn.Enable(); aMtrFldOffset.Enable(); aFlOffset.Enable(); aCtlPosition.Enable(); aCtlPosition.Invalidate(); aFtXOffset.Enable(); aMtrFldXOffset.Enable(); aFtYOffset.Enable(); aMtrFldYOffset.Enable(); aFlPosition.Enable(); aTsbScale.Enable(); aTsbOriginal.Enable(); aFtXSize.Enable(); aMtrFldXSize.Enable(); aFtYSize.Enable(); aMtrFldYSize.Enable(); aFlSize.Enable(); } else if( eState == STATE_NOCHECK ) { aTsbStretch.Enable(); aRbtRow.Disable(); aRbtColumn.Disable(); aMtrFldOffset.Disable(); aFlOffset.Disable(); aCtlPosition.Disable(); aCtlPosition.Invalidate(); aFtXOffset.Disable(); aMtrFldXOffset.Disable(); aFtYOffset.Disable(); aMtrFldYOffset.Disable(); aFlPosition.Disable(); if( aTsbStretch.GetState() != STATE_NOCHECK ) { aTsbScale.Disable(); aTsbOriginal.Disable(); aFtXSize.Disable(); aMtrFldXSize.Disable(); aFtYSize.Disable(); aMtrFldYSize.Disable(); aFlSize.Disable(); } else { aTsbScale.Enable(); aTsbOriginal.Enable(); aFtXSize.Enable(); aMtrFldXSize.Enable(); aFtYSize.Enable(); aMtrFldYSize.Enable(); aFlSize.Enable(); } } else { aTsbStretch.Disable(); aRbtRow.Disable(); aRbtColumn.Disable(); aMtrFldOffset.Disable(); aFlOffset.Disable(); aCtlPosition.Disable(); aCtlPosition.Invalidate(); aFtXOffset.Disable(); aMtrFldXOffset.Disable(); aFtYOffset.Disable(); aMtrFldYOffset.Disable(); aFlPosition.Disable(); aTsbScale.Disable(); aTsbOriginal.Disable(); aFtXSize.Disable(); aMtrFldXSize.Disable(); aFtYSize.Disable(); aMtrFldYSize.Disable(); aFlSize.Disable(); } if( aTsbOriginal.GetState() == STATE_CHECK ) { aMtrFldXSize.SetText( String() ); aMtrFldYSize.SetText( String() ); aFtXSize.Disable(); aFtYSize.Disable(); aMtrFldXSize.Disable(); aMtrFldYSize.Disable(); aTsbScale.Disable(); } else { aMtrFldXSize.SetValue( aMtrFldXSize.GetValue() ); aMtrFldYSize.SetValue( aMtrFldYSize.GetValue() ); } rXFSet.Put( XFillBmpTileItem( sal::static_int_cast< sal_Bool >( eState ) ) ); if( aTsbStretch.IsEnabled() ) rXFSet.Put( XFillBmpStretchItem( sal::static_int_cast< sal_Bool >( aTsbStretch.GetState() ) ) ); if( aTsbScale.IsEnabled() ) rXFSet.Put( XFillBmpSizeLogItem( aTsbScale.GetState() == STATE_NOCHECK ) ); if( aMtrFldXSize.IsEnabled() ) { XFillBmpSizeXItem* pItem = NULL; TriState eScaleState = aTsbScale.GetState(); if( eScaleState == STATE_NOCHECK ) pItem = new XFillBmpSizeXItem( GetCoreValue( aMtrFldXSize, ePoolUnit ) ); else pItem = new XFillBmpSizeXItem( -labs( static_cast(aMtrFldXSize.GetValue()) ) ); rXFSet.Put( *pItem ); delete pItem; } else if( aTsbOriginal.IsEnabled() && aTsbOriginal.GetState() == STATE_CHECK ) { // Originalgroesse -> Size == 0 rXFSet.Put( XFillBmpSizeXItem( 0 ) ); rXFSet.Put( XFillBmpSizeLogItem( sal_True ) ); } if( aMtrFldYSize.IsEnabled() ) { XFillBmpSizeYItem* pItem = NULL; TriState eScaleState = aTsbScale.GetState(); if( eScaleState == STATE_NOCHECK ) pItem = new XFillBmpSizeYItem( GetCoreValue( aMtrFldYSize, ePoolUnit ) ); else pItem = new XFillBmpSizeYItem( -labs( static_cast(aMtrFldYSize.GetValue()) ) ); rXFSet.Put( *pItem ); delete pItem; } else if( aTsbOriginal.IsEnabled() && aTsbOriginal.GetState() == STATE_CHECK ) { // Originalgroesse -> Size == 0 rXFSet.Put( XFillBmpSizeYItem( 0 ) ); rXFSet.Put( XFillBmpSizeLogItem( sal_True ) ); } if( aMtrFldOffset.IsEnabled() ) { if( aRbtRow.IsChecked() ) { rXFSet.Put( XFillBmpTileOffsetXItem( (sal_uInt16) aMtrFldOffset.GetValue() ) ); rXFSet.Put( XFillBmpTileOffsetYItem( (sal_uInt16) 0 ) ); } else if( aRbtColumn.IsChecked() ) { rXFSet.Put( XFillBmpTileOffsetXItem( (sal_uInt16) 0 ) ); rXFSet.Put( XFillBmpTileOffsetYItem( (sal_uInt16) aMtrFldOffset.GetValue() ) ); } } if( aCtlPosition.IsEnabled() ) rXFSet.Put( XFillBmpPosItem( aCtlPosition.GetActualRP() ) ); if( aMtrFldXOffset.IsEnabled() ) rXFSet.Put( XFillBmpPosOffsetXItem( (sal_uInt16) aMtrFldXOffset.GetValue() ) ); if( aMtrFldYOffset.IsEnabled() ) rXFSet.Put( XFillBmpPosOffsetYItem( (sal_uInt16) aMtrFldYOffset.GetValue() ) ); aCtlBitmapPreview.SetAttributes( aXFillAttr.GetItemSet() ); aCtlBitmapPreview.Invalidate(); return( 0L ); } //------------------------------------------------------------------------ IMPL_LINK( SvxAreaTabPage, ClickScaleHdl_Impl, void *, EMPTYARG ) { if( aTsbScale.GetState() == STATE_CHECK ) { aMtrFldXSize.SetDecimalDigits( 0 ); aMtrFldXSize.SetUnit( FUNIT_CUSTOM ); aMtrFldXSize.SetValue( 100 ); aMtrFldXSize.SetMax( 100 ); aMtrFldXSize.SetLast( 100 ); aMtrFldYSize.SetDecimalDigits( 0 ); aMtrFldYSize.SetUnit( FUNIT_CUSTOM ); aMtrFldYSize.SetValue( 100 ); aMtrFldYSize.SetMax( 100 ); aMtrFldYSize.SetLast( 100 ); } else { aMtrFldXSize.SetDecimalDigits( 2 ); aMtrFldXSize.SetUnit( eFUnit ); aMtrFldXSize.SetValue( 100 ); aMtrFldXSize.SetMax( 999900 ); aMtrFldXSize.SetLast( 100000 ); aMtrFldYSize.SetDecimalDigits( 2 ); aMtrFldYSize.SetUnit( eFUnit ); aMtrFldYSize.SetValue( 100 ); aMtrFldYSize.SetMax( 999900 ); aMtrFldYSize.SetLast( 100000 ); } ModifyTileHdl_Impl( NULL ); return( 0L ); } //------------------------------------------------------------------------ void SvxAreaTabPage::PointChanged( Window* pWindow, RECT_POINT eRcPt ) { eRP = eRcPt; // Ausrichtung der Bitmapfuellung ModifyTileHdl_Impl( pWindow ); } void SvxAreaTabPage::PageCreated (SfxAllItemSet aSet) { SFX_ITEMSET_ARG (&aSet,pColorTabItem,SvxColorListItem,SID_COLOR_TABLE,sal_False); SFX_ITEMSET_ARG (&aSet,pGradientListItem,SvxGradientListItem,SID_GRADIENT_LIST,sal_False); SFX_ITEMSET_ARG (&aSet,pHatchingListItem,SvxHatchListItem,SID_HATCH_LIST,sal_False); SFX_ITEMSET_ARG (&aSet,pBitmapListItem,SvxBitmapListItem,SID_BITMAP_LIST,sal_False); SFX_ITEMSET_ARG (&aSet,pPageTypeItem,SfxUInt16Item,SID_PAGE_TYPE,sal_False); SFX_ITEMSET_ARG (&aSet,pDlgTypeItem,SfxUInt16Item,SID_DLG_TYPE,sal_False); SFX_ITEMSET_ARG (&aSet,pPosItem,SfxUInt16Item,SID_TABPAGE_POS,sal_False); if (pColorTabItem) SetColorList(pColorTabItem->GetColorList()); if (pGradientListItem) SetGradientList(pGradientListItem->GetGradientList()); if (pHatchingListItem) SetHatchingList(pHatchingListItem->GetHatchList()); if (pBitmapListItem) SetBitmapList(pBitmapListItem->GetBitmapList()); if (pPageTypeItem) SetPageType(pPageTypeItem->GetValue()); if (pDlgTypeItem) SetDlgType(pDlgTypeItem->GetValue()); if (pPosItem) SetPos(pPosItem->GetValue()); Construct(); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */