blob: 4a2dad80ca3f8430af9008f117afe594bf0a4ad4 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_svx.hxx"
// include ---------------------------------------------------------------
#include <sfx2/module.hxx>
#include <sfx2/dispatch.hxx>
#include <tools/shl.hxx>
#define _SVX_FONTWORK_CXX
#include <svx/svdobj.hxx>
#include <svx/svdopath.hxx>
#include <svx/svdview.hxx>
#include <svx/svdocirc.hxx>
#include <svx/xtextit.hxx>
#include <svx/dialmgr.hxx>
#include "svx/dlgutil.hxx"
#include <svx/dialogs.hrc>
#include "fontwork.hrc"
#include <svx/fontwork.hxx>
#include <editeng/outlobj.hxx>
#include <basegfx/polygon/b2dpolygon.hxx>
#include <basegfx/point/b2dpoint.hxx>
SFX_IMPL_DOCKINGWINDOW( SvxFontWorkChildWindow, SID_FONTWORK );
/*************************************************************************
|*
|* ControllerItem fuer Fontwork
|*
\************************************************************************/
SvxFontWorkControllerItem::SvxFontWorkControllerItem
(
sal_uInt16 _nId,
SvxFontWorkDialog& rDlg,
SfxBindings& rBindings
) :
SfxControllerItem( _nId, rBindings ),
rFontWorkDlg( rDlg )
{
}
/*************************************************************************
|*
|* StateChanged-Methode fuer FontWork-Items
|*
\************************************************************************/
void SvxFontWorkControllerItem::StateChanged( sal_uInt16 /*nSID*/, SfxItemState /*eState*/,
const SfxPoolItem* pItem )
{
switch ( GetId() )
{
case SID_FORMTEXT_STYLE:
{
const XFormTextStyleItem* pStateItem =
PTR_CAST(XFormTextStyleItem, pItem);
DBG_ASSERT(pStateItem || pItem == 0, "XFormTextStyleItem erwartet");
rFontWorkDlg.SetStyle_Impl(pStateItem);
break;
}
case SID_FORMTEXT_ADJUST:
{
const XFormTextAdjustItem* pStateItem =
PTR_CAST(XFormTextAdjustItem, pItem);
DBG_ASSERT(pStateItem || pItem == 0, "XFormTextAdjustItem erwartet");
rFontWorkDlg.SetAdjust_Impl(pStateItem);
break;
}
case SID_FORMTEXT_DISTANCE:
{
const XFormTextDistanceItem* pStateItem =
PTR_CAST(XFormTextDistanceItem, pItem);
DBG_ASSERT(pStateItem || pItem == 0, "XFormTextDistanceItem erwartet");
rFontWorkDlg.SetDistance_Impl(pStateItem);
break;
}
case SID_FORMTEXT_START:
{
const XFormTextStartItem* pStateItem =
PTR_CAST(XFormTextStartItem, pItem);
DBG_ASSERT(pStateItem || pItem == 0, "XFormTextStartItem erwartet");
rFontWorkDlg.SetStart_Impl(pStateItem);
break;
}
case SID_FORMTEXT_MIRROR:
{
const XFormTextMirrorItem* pStateItem =
PTR_CAST(XFormTextMirrorItem, pItem);
DBG_ASSERT(pStateItem || pItem == 0, "XFormTextMirrorItem erwartet");
rFontWorkDlg.SetMirror_Impl(pStateItem);
break;
}
case SID_FORMTEXT_HIDEFORM:
{
const XFormTextHideFormItem* pStateItem =
PTR_CAST(XFormTextHideFormItem, pItem);
DBG_ASSERT(pStateItem || pItem == 0, "XFormTextHideFormItem erwartet");
rFontWorkDlg.SetShowForm_Impl(pStateItem);
break;
}
case SID_FORMTEXT_OUTLINE:
{
const XFormTextOutlineItem* pStateItem =
PTR_CAST(XFormTextOutlineItem, pItem);
DBG_ASSERT(pStateItem || pItem == 0, "XFormTextOutlineItem erwartet");
rFontWorkDlg.SetOutline_Impl(pStateItem);
break;
}
case SID_FORMTEXT_SHADOW:
{
const XFormTextShadowItem* pStateItem =
PTR_CAST(XFormTextShadowItem, pItem);
DBG_ASSERT(pStateItem || pItem == 0, "XFormTextShadowItem erwartet");
rFontWorkDlg.SetShadow_Impl(pStateItem);
break;
}
case SID_FORMTEXT_SHDWCOLOR:
{
const XFormTextShadowColorItem* pStateItem =
PTR_CAST(XFormTextShadowColorItem, pItem);
DBG_ASSERT(pStateItem || pItem == 0, "XFormTextShadowColorItem erwartet");
rFontWorkDlg.SetShadowColor_Impl(pStateItem);
break;
}
case SID_FORMTEXT_SHDWXVAL:
{
const XFormTextShadowXValItem* pStateItem =
PTR_CAST(XFormTextShadowXValItem, pItem);
DBG_ASSERT(pStateItem || pItem == 0, "XFormTextShadowXValItem erwartet");
rFontWorkDlg.SetShadowXVal_Impl(pStateItem);
break;
}
case SID_FORMTEXT_SHDWYVAL:
{
const XFormTextShadowYValItem* pStateItem =
PTR_CAST(XFormTextShadowYValItem, pItem);
DBG_ASSERT(pStateItem || pItem == 0, "XFormTextShadowYValItem erwartet");
rFontWorkDlg.SetShadowYVal_Impl(pStateItem);
break;
}
}
}
/*************************************************************************
|*
|* Ableitung vom SfxChildWindow als "Behaelter" fuer Fontwork-Dialog
|*
\************************************************************************/
SvxFontWorkChildWindow::SvxFontWorkChildWindow
(
Window* _pParent,
sal_uInt16 nId,
SfxBindings* pBindings,
SfxChildWinInfo* pInfo
) :
SfxChildWindow( _pParent, nId )
{
pWindow = new SvxFontWorkDialog( pBindings, this, _pParent,
SVX_RES( RID_SVXDLG_FONTWORK ) );
SvxFontWorkDialog* pDlg = (SvxFontWorkDialog*) pWindow;
eChildAlignment = SFX_ALIGN_NOALIGNMENT;
pDlg->Initialize( pInfo );
}
/*************************************************************************
|*
|* Floating Window zur Attributierung von Texteffekten
|*
\************************************************************************/
SvxFontWorkDialog::SvxFontWorkDialog( SfxBindings *pBindinx,
SfxChildWindow *pCW,
Window* _pParent,
const ResId& rResId ) :
SfxDockingWindow( pBindinx, pCW, _pParent, rResId ),
aTbxStyle (this, ResId(TBX_STYLE,*rResId.GetResMgr())),
aTbxAdjust (this, ResId(TBX_ADJUST,*rResId.GetResMgr())),
aFbDistance (this, ResId(FB_DISTANCE,*rResId.GetResMgr())),
aMtrFldDistance (this, ResId(MTR_FLD_DISTANCE,*rResId.GetResMgr())),
aFbTextStart (this, ResId(FB_TEXTSTART,*rResId.GetResMgr())),
aMtrFldTextStart(this, ResId(MTR_FLD_TEXTSTART,*rResId.GetResMgr())),
aTbxShadow (this, ResId(TBX_SHADOW,*rResId.GetResMgr())),
aFbShadowX (this, ResId(FB_SHADOW_X,*rResId.GetResMgr())),
aMtrFldShadowX (this, ResId(MTR_FLD_SHADOW_X,*rResId.GetResMgr())),
aFbShadowY (this, ResId(FB_SHADOW_Y,*rResId.GetResMgr())),
aMtrFldShadowY (this, ResId(MTR_FLD_SHADOW_Y,*rResId.GetResMgr())),
aShadowColorLB (this, ResId(CLB_SHADOW_COLOR,*rResId.GetResMgr())),
rBindings (*pBindinx),
nLastStyleTbxId(0),
nLastAdjustTbxId(0),
nLastShadowTbxId(0),
nSaveShadowX (0),
nSaveShadowY (0),
nSaveShadowAngle(450),
nSaveShadowSize (100),
maImageList (ResId(IL_FONTWORK,*rResId.GetResMgr())),
maImageListH (ResId(ILH_FONTWORK,*rResId.GetResMgr())),
maColorTable()
{
FreeResource();
ApplyImageList();
pCtrlItems[0] = new SvxFontWorkControllerItem(SID_FORMTEXT_STYLE, *this, rBindings);
pCtrlItems[1] = new SvxFontWorkControllerItem(SID_FORMTEXT_ADJUST, *this, rBindings);
pCtrlItems[2] = new SvxFontWorkControllerItem(SID_FORMTEXT_DISTANCE, *this, rBindings);
pCtrlItems[3] = new SvxFontWorkControllerItem(SID_FORMTEXT_START, *this, rBindings);
pCtrlItems[4] = new SvxFontWorkControllerItem(SID_FORMTEXT_MIRROR, *this, rBindings);
pCtrlItems[5] = new SvxFontWorkControllerItem(SID_FORMTEXT_HIDEFORM, *this, rBindings);
pCtrlItems[6] = new SvxFontWorkControllerItem(SID_FORMTEXT_OUTLINE, *this, rBindings);
pCtrlItems[7] = new SvxFontWorkControllerItem(SID_FORMTEXT_SHADOW, *this, rBindings);
pCtrlItems[8] = new SvxFontWorkControllerItem(SID_FORMTEXT_SHDWCOLOR, *this, rBindings);
pCtrlItems[9] = new SvxFontWorkControllerItem(SID_FORMTEXT_SHDWXVAL, *this, rBindings);
pCtrlItems[10] = new SvxFontWorkControllerItem(SID_FORMTEXT_SHDWYVAL, *this, rBindings);
Size aSize = aTbxStyle.CalcWindowSizePixel();
aTbxStyle.SetSizePixel(aSize);
aTbxStyle.SetSelectHdl( LINK(this, SvxFontWorkDialog, SelectStyleHdl_Impl) );
aTbxAdjust.SetSizePixel(aSize);
aTbxAdjust.SetSelectHdl( LINK(this, SvxFontWorkDialog, SelectAdjustHdl_Impl) );
aTbxShadow.SetSizePixel(aSize);
aTbxShadow.SetSelectHdl( LINK(this, SvxFontWorkDialog, SelectShadowHdl_Impl) );
Link aLink = LINK(this, SvxFontWorkDialog, ModifyInputHdl_Impl);
aMtrFldDistance.SetModifyHdl( aLink );
aMtrFldTextStart.SetModifyHdl( aLink );
aMtrFldShadowX.SetModifyHdl( aLink );
aMtrFldShadowY.SetModifyHdl( aLink );
// System-Metrik setzen
const FieldUnit eDlgUnit = rBindings.GetDispatcher()->GetModule()->GetFieldUnit();
SetFieldUnit( aMtrFldDistance, eDlgUnit, sal_True );
SetFieldUnit( aMtrFldTextStart, eDlgUnit, sal_True );
SetFieldUnit( aMtrFldShadowX, eDlgUnit, sal_True );
SetFieldUnit( aMtrFldShadowY, eDlgUnit, sal_True );
if( eDlgUnit == FUNIT_MM )
{
aMtrFldDistance.SetSpinSize( 50 );
aMtrFldTextStart.SetSpinSize( 50 );
aMtrFldShadowX.SetSpinSize( 50 );
aMtrFldShadowY.SetSpinSize( 50 );
}
else
{
aMtrFldDistance.SetSpinSize( 10 );
aMtrFldTextStart.SetSpinSize( 10 );
aMtrFldShadowX.SetSpinSize( 10 );
aMtrFldShadowY.SetSpinSize( 10 );
}
aShadowColorLB.SetSelectHdl( LINK(this, SvxFontWorkDialog, ColorSelectHdl_Impl) );
aInputTimer.SetTimeout(500);
aInputTimer.SetTimeoutHdl(LINK(this, SvxFontWorkDialog, InputTimoutHdl_Impl));
}
/*************************************************************************
|*
|* Destruktor
|*
\************************************************************************/
SvxFontWorkDialog::~SvxFontWorkDialog()
{
for (sal_uInt16 i = 0; i < CONTROLLER_COUNT; i++)
DELETEZ(pCtrlItems[i]);
}
/*************************************************************************
|*
\************************************************************************/
void SvxFontWorkDialog::Zoom()
{
SfxDockingWindow::Roll();
}
/*************************************************************************
|*
|*
|*
\************************************************************************/
SfxChildAlignment SvxFontWorkDialog::CheckAlignment( SfxChildAlignment eActAlign,
SfxChildAlignment eAlign )
{
SfxChildAlignment eAlignment;
switch ( eAlign )
{
case SFX_ALIGN_TOP:
case SFX_ALIGN_HIGHESTTOP:
case SFX_ALIGN_LOWESTTOP:
case SFX_ALIGN_BOTTOM:
case SFX_ALIGN_LOWESTBOTTOM:
case SFX_ALIGN_HIGHESTBOTTOM:
{
eAlignment = eActAlign;
}
break;
case SFX_ALIGN_LEFT:
case SFX_ALIGN_RIGHT:
case SFX_ALIGN_FIRSTLEFT:
case SFX_ALIGN_LASTLEFT:
case SFX_ALIGN_FIRSTRIGHT:
case SFX_ALIGN_LASTRIGHT:
{
eAlignment = eAlign;
}
break;
default:
{
eAlignment = eAlign;
}
break;
}
return eAlignment;
}
/*************************************************************************
|*
|* Style-Buttons setzen
|*
\************************************************************************/
void SvxFontWorkDialog::SetStyle_Impl(const XFormTextStyleItem* pItem)
{
if ( pItem )
{
sal_uInt16 nId = TBI_STYLE_OFF;
switch ( pItem->GetValue() )
{
case XFT_ROTATE : nId = TBI_STYLE_ROTATE; break;
case XFT_UPRIGHT: nId = TBI_STYLE_UPRIGHT; break;
case XFT_SLANTX : nId = TBI_STYLE_SLANTX; break;
case XFT_SLANTY : nId = TBI_STYLE_SLANTY; break;
default: ;//prevent warning
}
aTbxStyle.Enable();
// Make sure that there is allways exactly one checked toolbox item.
if ( pItem->GetValue() == XFT_NONE )
{
aTbxStyle.CheckItem(TBI_STYLE_ROTATE, sal_False);
aTbxStyle.CheckItem(TBI_STYLE_UPRIGHT, sal_False);
aTbxStyle.CheckItem(TBI_STYLE_SLANTX, sal_False);
aTbxStyle.CheckItem(TBI_STYLE_SLANTY, sal_False);
aTbxStyle.CheckItem(TBI_STYLE_OFF, sal_True);
}
else
{
aTbxStyle.CheckItem(TBI_STYLE_OFF, sal_False);
aTbxStyle.CheckItem(nId);
}
nLastStyleTbxId = nId;
}
else
aTbxStyle.Disable();
}
/*************************************************************************
|*
|* Adjust-Buttons setzen
|*
\************************************************************************/
void SvxFontWorkDialog::SetAdjust_Impl(const XFormTextAdjustItem* pItem)
{
if ( pItem )
{
sal_uInt16 nId;
aTbxAdjust.Enable();
aMtrFldDistance.Enable();
if ( pItem->GetValue() == XFT_LEFT || pItem->GetValue() == XFT_RIGHT )
{
if ( pItem->GetValue() == XFT_LEFT ) nId = TBI_ADJUST_LEFT;
else nId = TBI_ADJUST_RIGHT;
aMtrFldTextStart.Enable();
}
else
{
if ( pItem->GetValue() == XFT_CENTER ) nId = TBI_ADJUST_CENTER;
else nId = TBI_ADJUST_AUTOSIZE;
aMtrFldTextStart.Disable();
}
if ( !aTbxAdjust.IsItemChecked(nId) )
{
aTbxAdjust.CheckItem(nId);
}
nLastAdjustTbxId = nId;
}
else
{
aTbxAdjust.Disable();
aMtrFldTextStart.Disable();
aMtrFldDistance.Disable();
}
}
/*************************************************************************
|*
|* Abstand-Wert in Editfeld eintragen
|*
\************************************************************************/
void SvxFontWorkDialog::SetDistance_Impl(const XFormTextDistanceItem* pItem)
{
// #104596# Use HasChildPathFocus() instead of HasFocus() at SpinFields
if ( pItem && !aMtrFldDistance.HasChildPathFocus() )
{
SetMetricValue( aMtrFldDistance, pItem->GetValue(), SFX_MAPUNIT_100TH_MM );
}
}
/*************************************************************************
|*
|* Einzug-Wert in Editfeld eintragen
|*
\************************************************************************/
void SvxFontWorkDialog::SetStart_Impl(const XFormTextStartItem* pItem)
{
// #104596# Use HasChildPathFocus() instead of HasFocus() at SpinFields
if ( pItem && !aMtrFldTextStart.HasChildPathFocus() )
{
SetMetricValue( aMtrFldTextStart, pItem->GetValue(), SFX_MAPUNIT_100TH_MM );
}
}
/*************************************************************************
|*
|* Button fuer Umkehrung der Textrichtung setzen
|*
\************************************************************************/
void SvxFontWorkDialog::SetMirror_Impl(const XFormTextMirrorItem* pItem)
{
if ( pItem )
aTbxAdjust.CheckItem(TBI_ADJUST_MIRROR, pItem->GetValue());
}
/*************************************************************************
|*
|* Button fuer Konturanzeige setzen
|*
\************************************************************************/
void SvxFontWorkDialog::SetShowForm_Impl(const XFormTextHideFormItem* pItem)
{
if ( pItem )
aTbxShadow.CheckItem(TBI_SHOWFORM, !pItem->GetValue());
}
/*************************************************************************
|*
|* Button fuer Zeichenumrandung setzen
|*
\************************************************************************/
void SvxFontWorkDialog::SetOutline_Impl(const XFormTextOutlineItem* pItem)
{
if ( pItem )
aTbxShadow.CheckItem(TBI_OUTLINE, pItem->GetValue());
}
/*************************************************************************
|*
|* Shadow-Buttons setzen
|*
\************************************************************************/
void SvxFontWorkDialog::SetShadow_Impl(const XFormTextShadowItem* pItem,
sal_Bool bRestoreValues)
{
if ( pItem )
{
sal_uInt16 nId;
aTbxShadow.Enable();
if ( pItem->GetValue() == XFTSHADOW_NONE )
{
nId = TBI_SHADOW_OFF;
aFbShadowX.Hide();
aFbShadowY.Hide();
aMtrFldShadowX.Disable();
aMtrFldShadowY.Disable();
aShadowColorLB.Disable();
}
else
{
aFbShadowX.Show();
aFbShadowY.Show();
aMtrFldShadowX.Enable();
aMtrFldShadowY.Enable();
aShadowColorLB.Enable();
if ( pItem->GetValue() == XFTSHADOW_NORMAL )
{
nId = TBI_SHADOW_NORMAL;
const FieldUnit eDlgUnit = rBindings.GetDispatcher()->GetModule()->GetFieldUnit();
// aFbShadowX.SetBitmap( Bitmap( ResId(RID_SVXBMP_SHADOW_XDIST, _pMgr ) ) );
//aMtrFldShadowX.SetUnit(FUNIT_MM);
aMtrFldShadowX.SetUnit( eDlgUnit );
aMtrFldShadowX.SetDecimalDigits(2);
aMtrFldShadowX.SetMin(LONG_MIN);
aMtrFldShadowX.SetMax(LONG_MAX);
if( eDlgUnit == FUNIT_MM )
aMtrFldShadowX.SetSpinSize( 50 );
else
aMtrFldShadowX.SetSpinSize( 10 );
// aFbShadowY.SetBitmap( Bitmap( ResId( RID_SVXBMP_SHADOW_YDIST, _pMgr ) ) );
//aMtrFldShadowY.SetUnit(FUNIT_MM);
aMtrFldShadowY.SetUnit( eDlgUnit );
aMtrFldShadowY.SetDecimalDigits(2);
aMtrFldShadowY.SetMin(LONG_MIN);
aMtrFldShadowY.SetMax(LONG_MAX);
if( eDlgUnit == FUNIT_MM )
aMtrFldShadowY.SetSpinSize( 50 );
else
aMtrFldShadowY.SetSpinSize( 10 );
if ( bRestoreValues )
{
SetMetricValue( aMtrFldShadowX, nSaveShadowX, SFX_MAPUNIT_100TH_MM );
SetMetricValue( aMtrFldShadowY, nSaveShadowY, SFX_MAPUNIT_100TH_MM );
XFormTextShadowXValItem aXItem( nSaveShadowX );
XFormTextShadowYValItem aYItem( nSaveShadowY );
GetBindings().GetDispatcher()->Execute(
SID_FORMTEXT_SHDWXVAL, SFX_CALLMODE_RECORD, &aXItem, &aYItem, 0L );
}
}
else
{
nId = TBI_SHADOW_SLANT;
// aFbShadowX.SetBitmap( Bitmap( ResId( RID_SVXBMP_SHADOW_ANGLE, _pMgr ) ) );
aMtrFldShadowX.SetUnit(FUNIT_CUSTOM);
aMtrFldShadowX.SetDecimalDigits(1);
aMtrFldShadowX.SetMin(-1800);
aMtrFldShadowX.SetMax( 1800);
aMtrFldShadowX.SetSpinSize(10);
// aFbShadowY.SetBitmap( Bitmap( ResId( RID_SVXBMP_SHADOW_SIZE, _pMgr ) ) );
aMtrFldShadowY.SetUnit(FUNIT_PERCENT);
aMtrFldShadowY.SetDecimalDigits(0);
aMtrFldShadowY.SetMin(-999);
aMtrFldShadowY.SetMax( 999);
aMtrFldShadowY.SetSpinSize(10);
if ( bRestoreValues )
{
aMtrFldShadowX.SetValue(nSaveShadowAngle);
aMtrFldShadowY.SetValue(nSaveShadowSize);
XFormTextShadowXValItem aXItem(nSaveShadowAngle);
XFormTextShadowYValItem aYItem(nSaveShadowSize);
GetBindings().GetDispatcher()->Execute(
SID_FORMTEXT_SHDWXVAL, SFX_CALLMODE_RECORD, &aXItem, &aYItem, 0L );
}
}
}
if ( !aTbxShadow.IsItemChecked(nId) )
{
aTbxShadow.CheckItem(nId);
}
nLastShadowTbxId = nId;
ApplyImageList();
}
else
{
aTbxShadow.Disable();
aMtrFldShadowX.Disable();
aMtrFldShadowY.Disable();
aShadowColorLB.Disable();
}
}
/*************************************************************************
|*
|* Schattenfarbe in Listbox eintragen
|*
\************************************************************************/
void SvxFontWorkDialog::SetShadowColor_Impl(const XFormTextShadowColorItem* pItem)
{
if ( pItem )
aShadowColorLB.SelectEntry(pItem->GetColorValue());
}
/*************************************************************************
|*
|* X-Wert fuer Schatten in Editfeld eintragen
|*
\************************************************************************/
void SvxFontWorkDialog::SetShadowXVal_Impl(const XFormTextShadowXValItem* pItem)
{
// #104596# Use HasChildPathFocus() instead of HasFocus() at SpinFields
if ( pItem && !aMtrFldShadowX.HasChildPathFocus() )
{
// #i19251#
// sal_Int32 nValue = pItem->GetValue();
// #i19251#
// The two involved fields/items are used double and contain/give different
// values regarding to the access method. Thus, here we need to separate the access
// methos regarding to the kind of value accessed.
if(aTbxShadow.IsItemChecked(TBI_SHADOW_SLANT))
{
// #i19251#
// There is no value correction necessary at all, i think this
// was only tried to be done without understanding that the two
// involved fields/items are used double and contain/give different
// values regarding to the access method.
// nValue = nValue - ( int( float( nValue ) / 360.0 ) * 360 );
aMtrFldShadowX.SetValue(pItem->GetValue());
}
else
{
SetMetricValue( aMtrFldShadowX, pItem->GetValue(), SFX_MAPUNIT_100TH_MM );
}
}
}
/*************************************************************************
|*
|* Y-Wert fuer Schatten in Editfeld eintragen
|*
\************************************************************************/
void SvxFontWorkDialog::SetShadowYVal_Impl(const XFormTextShadowYValItem* pItem)
{
// #104596# Use HasChildPathFocus() instead of HasFocus() at SpinFields
if ( pItem && !aMtrFldShadowY.HasChildPathFocus() )
{
// #i19251#
// The two involved fields/items are used double and contain/give different
// values regarding to the access method. Thus, here we need to separate the access
// methos regarding to the kind of value accessed.
if(aTbxShadow.IsItemChecked(TBI_SHADOW_SLANT))
{
aMtrFldShadowY.SetValue(pItem->GetValue());
}
else
{
SetMetricValue( aMtrFldShadowY, pItem->GetValue(), SFX_MAPUNIT_100TH_MM );
}
}
}
/*************************************************************************
|*
\************************************************************************/
IMPL_LINK( SvxFontWorkDialog, SelectStyleHdl_Impl, void *, EMPTYARG )
{
sal_uInt16 nId = aTbxStyle.GetCurItemId();
// Execute this block when a different toolbox item has been clicked or
// when the off item has been clicked. The later is necessary to
// override the toolbox behaviour of unchecking the item after second
// click on it: One of the items has to be checked at all times (when
// enabled that is.)
if (nId == TBI_STYLE_OFF || nId != nLastStyleTbxId )
{
XFormTextStyle eStyle = XFT_NONE;
switch ( nId )
{
case TBI_STYLE_ROTATE : eStyle = XFT_ROTATE; break;
case TBI_STYLE_UPRIGHT : eStyle = XFT_UPRIGHT; break;
case TBI_STYLE_SLANTX : eStyle = XFT_SLANTX; break;
case TBI_STYLE_SLANTY : eStyle = XFT_SLANTY; break;
}
XFormTextStyleItem aItem( eStyle );
GetBindings().GetDispatcher()->Execute( SID_FORMTEXT_STYLE, SFX_CALLMODE_RECORD, &aItem, 0L );
SetStyle_Impl( &aItem );
nLastStyleTbxId = nId;
}
return 0;
}
/*************************************************************************
|*
\************************************************************************/
IMPL_LINK( SvxFontWorkDialog, SelectAdjustHdl_Impl, void *, EMPTYARG )
{
sal_uInt16 nId = aTbxAdjust.GetCurItemId();
if ( nId == TBI_ADJUST_MIRROR )
{
XFormTextMirrorItem aItem(aTbxAdjust.IsItemChecked(nId));
GetBindings().GetDispatcher()->Execute( SID_FORMTEXT_MIRROR, SFX_CALLMODE_SLOT, &aItem, 0L );
}
else if ( nId != nLastAdjustTbxId )
{
XFormTextAdjust eAdjust = XFT_AUTOSIZE;
switch ( nId )
{
case TBI_ADJUST_LEFT : eAdjust = XFT_LEFT; break;
case TBI_ADJUST_CENTER : eAdjust = XFT_CENTER; break;
case TBI_ADJUST_RIGHT : eAdjust = XFT_RIGHT; break;
}
XFormTextAdjustItem aItem(eAdjust);
GetBindings().GetDispatcher()->Execute( SID_FORMTEXT_ADJUST, SFX_CALLMODE_RECORD, &aItem, 0L );
SetAdjust_Impl(&aItem);
nLastAdjustTbxId = nId;
}
return 0;
}
/*************************************************************************
|*
\************************************************************************/
IMPL_LINK( SvxFontWorkDialog, SelectShadowHdl_Impl, void *, EMPTYARG )
{
sal_uInt16 nId = aTbxShadow.GetCurItemId();
if ( nId == TBI_SHOWFORM )
{
XFormTextHideFormItem aItem(!aTbxShadow.IsItemChecked(nId));
GetBindings().GetDispatcher()->Execute( SID_FORMTEXT_HIDEFORM, SFX_CALLMODE_RECORD, &aItem, 0L );
}
else if ( nId == TBI_OUTLINE )
{
XFormTextOutlineItem aItem(aTbxShadow.IsItemChecked(nId));
GetBindings().GetDispatcher()->Execute( SID_FORMTEXT_OUTLINE, SFX_CALLMODE_RECORD, &aItem, 0L );
}
else if ( nId != nLastShadowTbxId )
{
XFormTextShadow eShadow = XFTSHADOW_NONE;
if ( nLastShadowTbxId == TBI_SHADOW_NORMAL )
{
nSaveShadowX = GetCoreValue( aMtrFldShadowX, SFX_MAPUNIT_100TH_MM );
nSaveShadowY = GetCoreValue( aMtrFldShadowY, SFX_MAPUNIT_100TH_MM );
}
else if ( nLastShadowTbxId == TBI_SHADOW_SLANT )
{
nSaveShadowAngle = static_cast<long>(aMtrFldShadowX.GetValue());
nSaveShadowSize = static_cast<long>(aMtrFldShadowY.GetValue());
}
nLastShadowTbxId = nId;
if ( nId == TBI_SHADOW_NORMAL ) eShadow = XFTSHADOW_NORMAL;
else if ( nId == TBI_SHADOW_SLANT ) eShadow = XFTSHADOW_SLANT;
XFormTextShadowItem aItem(eShadow);
GetBindings().GetDispatcher()->Execute( SID_FORMTEXT_SHADOW, SFX_CALLMODE_RECORD, &aItem, 0L );
SetShadow_Impl(&aItem, sal_True);
}
return 0;
}
/*************************************************************************
|*
\************************************************************************/
IMPL_LINK_INLINE_START( SvxFontWorkDialog, ModifyInputHdl_Impl, void *, EMPTYARG )
{
aInputTimer.Start();
return 0;
}
IMPL_LINK_INLINE_END( SvxFontWorkDialog, ModifyInputHdl_Impl, void *, EMPTYARG )
/*************************************************************************
|*
\************************************************************************/
IMPL_LINK( SvxFontWorkDialog, InputTimoutHdl_Impl, void *, EMPTYARG )
{
// System-Metrik evtl. neu setzen
// Dieses sollte mal als Listener passieren, ist aber aus
// inkompatibilitaetsgruenden z.Z. nicht moeglich
const FieldUnit eDlgUnit = rBindings.GetDispatcher()->GetModule()->GetFieldUnit();
if( eDlgUnit != aMtrFldDistance.GetUnit() )
{
SetFieldUnit( aMtrFldDistance, eDlgUnit, sal_True );
SetFieldUnit( aMtrFldTextStart, eDlgUnit, sal_True );
aMtrFldDistance.SetSpinSize( eDlgUnit == FUNIT_MM ? 50 : 10 );
aMtrFldTextStart.SetSpinSize( eDlgUnit == FUNIT_MM ? 50 : 10 );
}
if( eDlgUnit != aMtrFldShadowX.GetUnit() &&
aTbxShadow.IsItemChecked( TBI_SHADOW_NORMAL ) )
{
SetFieldUnit( aMtrFldShadowX, eDlgUnit, sal_True );
SetFieldUnit( aMtrFldShadowY, eDlgUnit, sal_True );
aMtrFldShadowX.SetSpinSize( eDlgUnit == FUNIT_MM ? 50 : 10 );
aMtrFldShadowY.SetSpinSize( eDlgUnit == FUNIT_MM ? 50 : 10 );
}
long nValue = GetCoreValue( aMtrFldDistance, SFX_MAPUNIT_100TH_MM );
XFormTextDistanceItem aDistItem( nValue );
nValue = GetCoreValue( aMtrFldTextStart, SFX_MAPUNIT_100TH_MM );
XFormTextStartItem aStartItem( nValue );
sal_Int32 nValueX(0L);
sal_Int32 nValueY(0L);
// #i19251#
// The two involved fields/items are used double and contain/give different
// values regarding to the access method. Thus, here we need to separate the access
// methos regarding to the kind of value accessed.
if(nLastShadowTbxId == TBI_SHADOW_NORMAL)
{
nValueX = GetCoreValue( aMtrFldShadowX, SFX_MAPUNIT_100TH_MM );
nValueY = GetCoreValue( aMtrFldShadowY, SFX_MAPUNIT_100TH_MM );
}
else if(nLastShadowTbxId == TBI_SHADOW_SLANT)
{
nValueX = static_cast<long>(aMtrFldShadowX.GetValue());
nValueY = static_cast<long>(aMtrFldShadowY.GetValue());
}
XFormTextShadowXValItem aShadowXItem( nValueX );
XFormTextShadowYValItem aShadowYItem( nValueY );
// Slot-ID ist egal, die Exec-Methode wertet das gesamte ItemSet aus
GetBindings().GetDispatcher()->Execute( SID_FORMTEXT_DISTANCE, SFX_CALLMODE_RECORD, &aDistItem,
&aStartItem, &aShadowXItem, &aShadowYItem, 0L );
return 0;
}
/*************************************************************************
|*
\************************************************************************/
IMPL_LINK( SvxFontWorkDialog, ColorSelectHdl_Impl, void *, EMPTYARG )
{
// Changed by obo. Linux-Compiler can't parse commented lines
XFormTextShadowColorItem aItem( (const String &) String(),
(const Color &) aShadowColorLB.GetSelectEntryColor() );
// XFormTextShadowColorItem aItem( String(),
// aShadowColorLB.GetSelectEntryColor() );
GetBindings().GetDispatcher()->Execute( SID_FORMTEXT_SHDWCOLOR, SFX_CALLMODE_RECORD, &aItem, 0L );
return 0;
}
/*************************************************************************
|*
\************************************************************************/
void SvxFontWorkDialog::SetColorTable(XColorListSharedPtr aTable)
{
if ( aTable != maColorTable )
{
maColorTable = aTable;
aShadowColorLB.Clear();
aShadowColorLB.Fill(maColorTable);
}
}
/*************************************************************************
|*
\************************************************************************/
void SvxFontWorkDialog::SetActive(sal_Bool /*bActivate*/)
{
}
void SvxFontWorkDialog::DataChanged( const DataChangedEvent& rDCEvt )
{
if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) && (rDCEvt.GetFlags() & SETTINGS_STYLE) )
ApplyImageList();
SfxDockingWindow::DataChanged( rDCEvt );
}
/* -----------------------------08.05.2002 14:28------------------------------
---------------------------------------------------------------------------*/
void SvxFontWorkDialog::ApplyImageList()
{
bool bHighContrast = GetSettings().GetStyleSettings().GetHighContrastMode();
ImageList& rImgLst = bHighContrast ? maImageListH : maImageList;
aTbxStyle.SetImageList( rImgLst );
aTbxAdjust.SetImageList( rImgLst );
aTbxShadow.SetImageList( rImgLst );
switch( nLastShadowTbxId )
{
case TBI_SHADOW_SLANT:
aFbShadowX.SetImage( rImgLst.GetImage( TBI_SHADOW_ANGLE ) );
aFbShadowY.SetImage( rImgLst.GetImage( TBI_SHADOW_SIZE ) );
break;
// case TBI_SHADOW_NORMAL:
default:
aFbShadowX.SetImage( rImgLst.GetImage( TBI_SHADOW_XDIST ) );
aFbShadowY.SetImage( rImgLst.GetImage( TBI_SHADOW_YDIST ) );
break;
}
aFbDistance.SetImage( rImgLst.GetImage( TBI_DISTANCE ) );
aFbTextStart.SetImage( rImgLst.GetImage( TBI_TEXTSTART ) );
}