diff options
Diffstat (limited to 'sd/source/ui/dlg/copydlg.cxx')
-rw-r--r-- | sd/source/ui/dlg/copydlg.cxx | 357 |
1 files changed, 357 insertions, 0 deletions
diff --git a/sd/source/ui/dlg/copydlg.cxx b/sd/source/ui/dlg/copydlg.cxx new file mode 100644 index 000000000000..6b3c04346f31 --- /dev/null +++ b/sd/source/ui/dlg/copydlg.cxx @@ -0,0 +1,357 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_sd.hxx" + +#ifdef SD_DLLIMPLEMENTATION +#undef SD_DLLIMPLEMENTATION +#endif + +#include "copydlg.hxx" +#include <svx/dlgutil.hxx> +#include <sfx2/module.hxx> +#include <svx/xcolit.hxx> +#include <svx/xflclit.hxx> +#include <svx/xdef.hxx> +#include <svx/xfillit0.hxx> +#include <svx/xenum.hxx> + +#include <sfx2/app.hxx> + + + +#include "sdattr.hxx" + +#include "copydlg.hrc" +#include "View.hxx" +#include "sdresid.hxx" +#include "drawdoc.hxx" +#include "res_bmp.hrc" + +namespace sd { + +#define TOKEN (sal_Unicode(';')) + +/************************************************************************* +|* +|* Dialog zum Kopieren von Objekten +|* +\************************************************************************/ + +CopyDlg::CopyDlg( + ::Window* pWindow, + const SfxItemSet& rInAttrs, + XColorTable* pColTab, + ::sd::View* pInView ) + : SfxModalDialog ( pWindow, SdResId( DLG_COPY ) ), + maFtCopies ( this, SdResId( FT_COPIES ) ), + maNumFldCopies ( this, SdResId( NUM_FLD_COPIES ) ), + maBtnSetViewData ( this, SdResId( BTN_SET_VIEWDATA ) ), + maFtMoveX ( this, SdResId( FT_MOVE_X ) ), + maMtrFldMoveX ( this, SdResId( MTR_FLD_MOVE_X ) ), + maFtMoveY ( this, SdResId( FT_MOVE_Y ) ), + maMtrFldMoveY ( this, SdResId( MTR_FLD_MOVE_Y ) ), + maFtAngle ( this, SdResId( FT_ANGLE ) ), + maMtrFldAngle ( this, SdResId( MTR_FLD_ANGLE ) ), + maGrpMovement ( this, SdResId( GRP_MOVEMENT ) ), + maFtWidth ( this, SdResId( FT_WIDTH ) ), + maMtrFldWidth ( this, SdResId( MTR_FLD_WIDTH ) ), + maFtHeight ( this, SdResId( FT_HEIGHT ) ), + maMtrFldHeight ( this, SdResId( MTR_FLD_HEIGHT ) ), + maGrpEnlargement ( this, SdResId( GRP_ENLARGEMENT ) ), + maFtStartColor ( this, SdResId( FT_START_COLOR ) ), + maLbStartColor ( this, SdResId( LB_START_COLOR ) ), + maFtEndColor ( this, SdResId( FT_END_COLOR ) ), + maLbEndColor ( this, SdResId( LB_END_COLOR ) ), + maGrpColor ( this, SdResId( GRP_COLOR ) ), + maBtnOK ( this, SdResId( BTN_OK ) ), + maBtnCancel ( this, SdResId( BTN_CANCEL ) ), + maBtnHelp ( this, SdResId( BTN_HELP ) ), + maBtnSetDefault ( this, SdResId( BTN_SET_DEFAULT ) ), + mrOutAttrs ( rInAttrs ), + mpColorTab ( pColTab ), + maUIScale(pInView->GetDoc()->GetUIScale()), + mpView ( pInView ) +{ + FreeResource(); + + // Set up the view data button (image and accessible name). + maBtnSetViewData.SetModeImage( Image( SdResId( IMG_PIPETTE_H ) ), BMP_COLOR_HIGHCONTRAST ); + maBtnSetViewData.SetAccessibleName (maBtnSetViewData.GetQuickHelpText()); + + // Farbtabellen + DBG_ASSERT( mpColorTab, "Keine gueltige ColorTable uebergeben!" ); + maLbStartColor.Fill( mpColorTab ); + maLbEndColor.CopyEntries( maLbStartColor ); + + maLbStartColor.SetSelectHdl( LINK( this, CopyDlg, SelectColorHdl ) ); + maBtnSetViewData.SetClickHdl( LINK( this, CopyDlg, SetViewData ) ); + maBtnSetDefault.SetClickHdl( LINK( this, CopyDlg, SetDefault ) ); + + + FieldUnit eFUnit( SfxModule::GetCurrentFieldUnit() ); + + SetFieldUnit( maMtrFldMoveX, eFUnit, TRUE ); + SetFieldUnit( maMtrFldMoveY, eFUnit, TRUE ); + SetFieldUnit( maMtrFldWidth, eFUnit, TRUE ); + SetFieldUnit( maMtrFldHeight, eFUnit, TRUE ); + + Reset(0L); +} + +/************************************************************************* +|* +|* Dtor +|* +\************************************************************************/ + +CopyDlg::~CopyDlg() +{ + String& rStr = GetExtraData(); + + rStr = UniString::CreateFromInt64( maNumFldCopies.GetValue() ); + rStr.Append( TOKEN ); + + rStr += UniString::CreateFromInt64( maMtrFldMoveX.GetValue() ); + rStr.Append( TOKEN ); + + rStr += UniString::CreateFromInt64( maMtrFldMoveY.GetValue() ); + rStr.Append( TOKEN ); + + rStr += UniString::CreateFromInt64( maMtrFldAngle.GetValue() ); + rStr.Append( TOKEN ); + + rStr += UniString::CreateFromInt64( maMtrFldWidth.GetValue() ); + rStr.Append( TOKEN ); + + rStr += UniString::CreateFromInt64( maMtrFldHeight.GetValue() ); + rStr.Append( TOKEN ); + + rStr += UniString::CreateFromInt32( (long)maLbStartColor.GetSelectEntryColor().GetColor() ); + rStr.Append( TOKEN ); + + rStr += UniString::CreateFromInt32( (long)maLbEndColor.GetSelectEntryColor().GetColor() ); +} + +/************************************************************************* +|* +|* Liest uebergebenen Item-Set oder wertet den INI-String aus +|* +\************************************************************************/ + +IMPL_LINK( CopyDlg, Reset, void*, EMPTYARG ) +{ + const SfxPoolItem* pPoolItem = NULL; + String aStr( GetExtraData() ); + + if( aStr.GetTokenCount( TOKEN ) < 8 ) + { + if( SFX_ITEM_SET == mrOutAttrs.GetItemState( ATTR_COPY_NUMBER, TRUE, &pPoolItem ) ) + maNumFldCopies.SetValue( ( ( const SfxUInt16Item* ) pPoolItem )->GetValue() ); + else + maNumFldCopies.SetValue( 1L ); + + long nMoveX = 500L; + if( SFX_ITEM_SET == mrOutAttrs.GetItemState( ATTR_COPY_MOVE_X, TRUE, &pPoolItem ) ) + nMoveX = ( ( ( const SfxInt32Item* ) pPoolItem )->GetValue() ); + SetMetricValue( maMtrFldMoveX, Fraction(nMoveX) / maUIScale, SFX_MAPUNIT_100TH_MM); + + long nMoveY = 500L; + if( SFX_ITEM_SET == mrOutAttrs.GetItemState( ATTR_COPY_MOVE_Y, TRUE, &pPoolItem ) ) + nMoveY = ( ( ( const SfxInt32Item* ) pPoolItem )->GetValue() ); + SetMetricValue( maMtrFldMoveY, Fraction(nMoveY) / maUIScale, SFX_MAPUNIT_100TH_MM); + + if( SFX_ITEM_SET == mrOutAttrs.GetItemState( ATTR_COPY_ANGLE, TRUE, &pPoolItem ) ) + maMtrFldAngle.SetValue( ( ( const SfxInt32Item* ) pPoolItem )->GetValue() ); + else + maMtrFldAngle.SetValue( 0L ); + + long nWidth = 0L; + if( SFX_ITEM_SET == mrOutAttrs.GetItemState( ATTR_COPY_WIDTH, TRUE, &pPoolItem ) ) + nWidth = ( ( ( const SfxInt32Item* ) pPoolItem )->GetValue() ); + SetMetricValue( maMtrFldWidth, Fraction(nWidth) / maUIScale, SFX_MAPUNIT_100TH_MM); + + long nHeight = 0L; + if( SFX_ITEM_SET == mrOutAttrs.GetItemState( ATTR_COPY_HEIGHT, TRUE, &pPoolItem ) ) + nHeight = ( ( ( const SfxInt32Item* ) pPoolItem )->GetValue() ); + SetMetricValue( maMtrFldHeight, Fraction(nHeight) / maUIScale, SFX_MAPUNIT_100TH_MM); + + if( SFX_ITEM_SET == mrOutAttrs.GetItemState( ATTR_COPY_START_COLOR, TRUE, &pPoolItem ) ) + { + Color aColor = ( ( const XColorItem* ) pPoolItem )->GetColorValue(); + maLbStartColor.SelectEntry( aColor ); + maLbEndColor.SelectEntry( aColor ); + } + else + { + maLbStartColor.SetNoSelection(); + maLbEndColor.SetNoSelection(); + maLbEndColor.Disable(); + maFtEndColor.Disable(); + } + } + else + { + long nTmp; + nTmp = (long)aStr.GetToken( 0, TOKEN ).ToInt32(); + maNumFldCopies.SetValue( nTmp ); + + nTmp = (long)aStr.GetToken( 1, TOKEN ).ToInt32(); + maMtrFldMoveX.SetValue( nTmp ); + + nTmp = (long)aStr.GetToken( 2, TOKEN ).ToInt32(); + maMtrFldMoveY.SetValue( nTmp ); + + nTmp = (long)aStr.GetToken( 3, TOKEN ).ToInt32(); + maMtrFldAngle.SetValue( nTmp ); + + nTmp = (long)aStr.GetToken( 4, TOKEN ).ToInt32(); + maMtrFldWidth.SetValue( nTmp ); + + nTmp = (long)aStr.GetToken( 5, TOKEN ).ToInt32(); + maMtrFldHeight.SetValue( nTmp ); + + nTmp = (long)aStr.GetToken( 6, TOKEN ).ToInt32(); + maLbStartColor.SelectEntry( Color( nTmp ) ); + + nTmp = (long)aStr.GetToken( 7, TOKEN ).ToInt32(); + maLbEndColor.SelectEntry( Color( nTmp ) ); + } + + return 0; +} + +/************************************************************************* +|* +|* Fuellt uebergebenen Item-Set mit Dialogbox-Attributen +|* +\************************************************************************/ + +void CopyDlg::GetAttr( SfxItemSet& rOutAttrs ) +{ + long nMoveX = Fraction( GetCoreValue( maMtrFldMoveX, SFX_MAPUNIT_100TH_MM) ) * maUIScale; + long nMoveY = Fraction( GetCoreValue( maMtrFldMoveY, SFX_MAPUNIT_100TH_MM) ) * maUIScale; + long nHeight = Fraction( GetCoreValue( maMtrFldHeight, SFX_MAPUNIT_100TH_MM) ) * maUIScale; + long nWidth = Fraction( GetCoreValue( maMtrFldWidth, SFX_MAPUNIT_100TH_MM) ) * maUIScale; + + rOutAttrs.Put( SfxUInt16Item( ATTR_COPY_NUMBER, (UINT16) maNumFldCopies.GetValue() ) ); + rOutAttrs.Put( SfxInt32Item( ATTR_COPY_MOVE_X, nMoveX ) ); + rOutAttrs.Put( SfxInt32Item( ATTR_COPY_MOVE_Y, nMoveY ) ); + rOutAttrs.Put( SfxInt32Item( ATTR_COPY_ANGLE, static_cast<INT32>(maMtrFldAngle.GetValue()) ) ); + rOutAttrs.Put( SfxInt32Item( ATTR_COPY_WIDTH, nWidth ) ); + rOutAttrs.Put( SfxInt32Item( ATTR_COPY_HEIGHT, nHeight ) ); + + if( maLbStartColor.GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND ) + { + XColorItem aXColorItem( ATTR_COPY_START_COLOR, maLbStartColor.GetSelectEntry(), + maLbStartColor.GetSelectEntryColor() ); + rOutAttrs.Put( aXColorItem ); + } + if( maLbEndColor.GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND ) + { + XColorItem aXColorItem( ATTR_COPY_END_COLOR, maLbEndColor.GetSelectEntry(), + maLbEndColor.GetSelectEntryColor() ); + rOutAttrs.Put( aXColorItem ); + } +} + +/************************************************************************* +|* +|* Enabled und selektiert Endfarben-LB +|* +\************************************************************************/ + +IMPL_LINK( CopyDlg, SelectColorHdl, void *, EMPTYARG ) +{ + USHORT nPos = maLbStartColor.GetSelectEntryPos(); + + if( nPos != LISTBOX_ENTRY_NOTFOUND && + !maLbEndColor.IsEnabled() ) + { + maLbEndColor.SelectEntryPos( nPos ); + maLbEndColor.Enable(); + maFtEndColor.Enable(); + } + return 0; +} + +/************************************************************************* +|* Setzt Werte der Selektion +\************************************************************************/ + +IMPL_LINK( CopyDlg, SetViewData, void*, EMPTYARG ) +{ + Rectangle aRect = mpView->GetAllMarkedRect(); + + SetMetricValue( maMtrFldMoveX, Fraction( aRect.GetWidth() ) / + maUIScale, SFX_MAPUNIT_100TH_MM); + SetMetricValue( maMtrFldMoveY, Fraction( aRect.GetHeight() ) / + maUIScale, SFX_MAPUNIT_100TH_MM); + + // Farb-Attribut setzen + const SfxPoolItem* pPoolItem = NULL; + if( SFX_ITEM_SET == mrOutAttrs.GetItemState( ATTR_COPY_START_COLOR, TRUE, &pPoolItem ) ) + { + Color aColor = ( ( const XColorItem* ) pPoolItem )->GetColorValue(); + maLbStartColor.SelectEntry( aColor ); + } + + return 0; +} + +/************************************************************************* +|* Setzt Werte auf Standard +\************************************************************************/ + +IMPL_LINK( CopyDlg, SetDefault, void*, EMPTYARG ) +{ + maNumFldCopies.SetValue( 1L ); + + long nValue = 500L; + SetMetricValue( maMtrFldMoveX, Fraction(nValue) / maUIScale, SFX_MAPUNIT_100TH_MM); + SetMetricValue( maMtrFldMoveY, Fraction(nValue) / maUIScale, SFX_MAPUNIT_100TH_MM); + + nValue = 0L; + maMtrFldAngle.SetValue( nValue ); + SetMetricValue( maMtrFldWidth, Fraction(nValue) / maUIScale, SFX_MAPUNIT_100TH_MM); + SetMetricValue( maMtrFldHeight, Fraction(nValue) / maUIScale, SFX_MAPUNIT_100TH_MM); + + // Farb-Attribut setzen + const SfxPoolItem* pPoolItem = NULL; + if( SFX_ITEM_SET == mrOutAttrs.GetItemState( ATTR_COPY_START_COLOR, TRUE, &pPoolItem ) ) + { + Color aColor = ( ( const XColorItem* ) pPoolItem )->GetColorValue(); + maLbStartColor.SelectEntry( aColor ); + maLbEndColor.SelectEntry( aColor ); + } + + return 0; +} + + +} // end of namespace sd |