office-gobmx/cui/source/tabpages/tparea.cxx
2011-03-12 23:58:22 -06:00

2537 lines
85 KiB
C++

/* -*- 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
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
*
************************************************************************/
#include <tools/shl.hxx>
#include <tools/urlobj.hxx>
#include <sfx2/app.hxx>
#include <sfx2/module.hxx>
#include <svx/dialogs.hrc>
#define _SVX_TPAREA_CXX
#if defined (UNX) || defined (ICC) || defined(WNT)
#include <stdlib.h>
#endif
#include "svx/xattr.hxx"
#include <svx/xpool.hxx>
#include <cuires.hrc>
#include "tabarea.hrc"
#include <svx/xflbckit.hxx>
#include <svx/svdattr.hxx>
#include <svx/xtable.hxx>
#include <svx/xlineit0.hxx>
#include "svx/drawitem.hxx"
#include "cuitabarea.hxx"
#include "dlgname.hxx"
#include <dialmgr.hxx>
#include "svx/dlgutil.hxx"
#include <svl/intitem.hxx>
#include <sfx2/request.hxx>
#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 )
{
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
{
XFillStyle eStyle = (XFillStyle) aTypeLB.GetSelectEntryPos();
switch( eStyle )
{
case XFILL_GRADIENT:
{
nPageType = PT_GRADIENT;
nPos = aLbGradient.GetSelectEntryPos();
}
break;
case XFILL_HATCH:
{
nPageType = PT_HATCH;
nPos = aLbHatching.GetSelectEntryPos();
}
break;
case XFILL_BITMAP:
{
nPageType = PT_BITMAP;
nPos = aLbBitmap.GetSelectEntryPos();
}
break;
case XFILL_SOLID:
{
nPageType = PT_COLOR;
nPos = aLbColor.GetSelectEntryPos();
}
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<long>(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<long>(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<long>(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<long>(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,SvxColorTableItem,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)
SetColorTable(pColorTabItem->GetColorTable());
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: */