summaryrefslogtreecommitdiff
path: root/svx/source/dialog/optgrid.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'svx/source/dialog/optgrid.cxx')
-rw-r--r--svx/source/dialog/optgrid.cxx419
1 files changed, 419 insertions, 0 deletions
diff --git a/svx/source/dialog/optgrid.cxx b/svx/source/dialog/optgrid.cxx
new file mode 100644
index 000000000000..7565539578df
--- /dev/null
+++ b/svx/source/dialog/optgrid.cxx
@@ -0,0 +1,419 @@
+/*************************************************************************
+ *
+ * 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_svx.hxx"
+
+// include ---------------------------------------------------------------
+#include <tools/shl.hxx>
+#include <sfx2/app.hxx>
+#include <sfx2/module.hxx>
+#include <svl/intitem.hxx>
+
+#define _SVX_OPTGRID_CXX
+
+#include <svx/svxids.hrc>
+#include <svx/dialmgr.hxx>
+#include "optgrid.hxx"
+#include <svx/dialogs.hrc>
+#include "optgrid.hrc"
+#include "dlgutil.hxx"
+
+/* -----------------18.08.98 17:41-------------------
+ * local functions
+ * --------------------------------------------------*/
+void lcl_GetMinMax(MetricField& rField, long& nFirst, long& nLast, long& nMin, long& nMax)
+{
+ nFirst = static_cast<long>(rField.Denormalize( rField.GetFirst( FUNIT_TWIP ) ));
+ nLast = static_cast<long>(rField.Denormalize( rField.GetLast( FUNIT_TWIP ) ));
+ nMin = static_cast<long>(rField.Denormalize( rField.GetMin( FUNIT_TWIP ) ));
+ nMax = static_cast<long>(rField.Denormalize( rField.GetMax( FUNIT_TWIP ) ));
+}
+
+void lcl_SetMinMax(MetricField& rField, long nFirst, long nLast, long nMin, long nMax)
+{
+ rField.SetFirst( rField.Normalize( nFirst ), FUNIT_TWIP );
+ rField.SetLast( rField.Normalize( nLast ), FUNIT_TWIP );
+ rField.SetMin( rField.Normalize( nMin ), FUNIT_TWIP );
+ rField.SetMax( rField.Normalize( nMax ), FUNIT_TWIP );
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: Rastereinstellungen Ctor
+ --------------------------------------------------------------------*/
+
+SvxOptionsGrid::SvxOptionsGrid() :
+ nFldDrawX ( 100 ),
+ nFldDivisionX ( 0 ),
+ nFldDrawY ( 100 ),
+ nFldDivisionY ( 0 ),
+ nFldSnapX ( 100 ),
+ nFldSnapY ( 100 ),
+ bUseGridsnap ( 0 ),
+ bSynchronize ( 1 ),
+ bGridVisible ( 0 ),
+ bEqualGrid ( 1 )
+{
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: Rastereinstellungen Dtor
+ --------------------------------------------------------------------*/
+
+SvxOptionsGrid::~SvxOptionsGrid()
+{
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: Item fuer Rastereinstellungen
+ --------------------------------------------------------------------*/
+
+SvxGridItem::SvxGridItem( const SvxGridItem& rItem )
+: SvxOptionsGrid()
+, SfxPoolItem(rItem)
+{
+ bUseGridsnap = rItem.bUseGridsnap ;
+ bSynchronize = rItem.bSynchronize ;
+ bGridVisible = rItem.bGridVisible ;
+ bEqualGrid = rItem.bEqualGrid ;
+ nFldDrawX = rItem.nFldDrawX ;
+ nFldDivisionX= rItem.nFldDivisionX;
+ nFldDrawY = rItem.nFldDrawY ;
+ nFldDivisionY= rItem.nFldDivisionY;
+ nFldSnapX = rItem.nFldSnapX ;
+ nFldSnapY = rItem.nFldSnapY ;
+
+};
+
+/*--------------------------------------------------------------------
+ Beschreibung:
+ --------------------------------------------------------------------*/
+
+SfxPoolItem* SvxGridItem::Clone( SfxItemPool* ) const
+{
+ return new SvxGridItem( *this );
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung:
+ --------------------------------------------------------------------*/
+
+int SvxGridItem::operator==( const SfxPoolItem& rAttr ) const
+{
+ DBG_ASSERT( SfxPoolItem::operator==(rAttr), "unterschiedliche Typen" );
+
+ const SvxGridItem& rItem = (const SvxGridItem&) rAttr;
+
+ return ( bUseGridsnap == rItem.bUseGridsnap &&
+ bSynchronize == rItem.bSynchronize &&
+ bGridVisible == rItem.bGridVisible &&
+ bEqualGrid == rItem.bEqualGrid &&
+ nFldDrawX == rItem.nFldDrawX &&
+ nFldDivisionX== rItem.nFldDivisionX&&
+ nFldDrawY == rItem.nFldDrawY &&
+ nFldDivisionY== rItem.nFldDivisionY&&
+ nFldSnapX == rItem.nFldSnapX &&
+ nFldSnapY == rItem.nFldSnapY );
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung:
+ --------------------------------------------------------------------*/
+
+SfxItemPresentation SvxGridItem::GetPresentation
+(
+ SfxItemPresentation ePres,
+ SfxMapUnit /*eCoreUnit*/,
+ SfxMapUnit /*ePresUnit*/,
+ String& rText, const IntlWrapper *
+) const
+{
+ switch ( ePres )
+ {
+ case SFX_ITEM_PRESENTATION_NONE:
+ rText.Erase();
+ return SFX_ITEM_PRESENTATION_NONE;
+ case SFX_ITEM_PRESENTATION_NAMELESS:
+ case SFX_ITEM_PRESENTATION_COMPLETE:
+ rText = String::CreateFromAscii("SvxGridItem");
+ return ePres;
+ default:
+ return SFX_ITEM_PRESENTATION_NONE;
+ }
+}
+
+
+/*----------------- OS 23.02.95 -----------------------
+ TabPage Rastereinstellungen
+-------------------------------------------------------*/
+
+SvxGridTabPage::SvxGridTabPage( Window* pParent, const SfxItemSet& rCoreSet) :
+
+ SfxTabPage( pParent, SVX_RES( RID_SVXPAGE_GRID ), rCoreSet ),
+
+ aCbxUseGridsnap ( this, SVX_RES( CBX_USE_GRIDSNAP ) ),
+ aCbxGridVisible ( this, SVX_RES( CBX_GRID_VISIBLE ) ),
+
+ aFlResolution ( this, SVX_RES( FL_RESOLUTION ) ),
+ aFtDrawX ( this, SVX_RES( FT_DRAW_X ) ),
+ aMtrFldDrawX ( this, SVX_RES( MTR_FLD_DRAW_X ) ),
+ aFtDrawY ( this, SVX_RES( FT_DRAW_Y ) ),
+ aMtrFldDrawY ( this, SVX_RES( MTR_FLD_DRAW_Y ) ),
+
+ aFlDivision ( this, SVX_RES( FL_DIVISION ) ),
+ aFtDivisionX( this, SVX_RES( FT_DIVISION_X) ),
+ aNumFldDivisionX( this, SVX_RES( NUM_FLD_DIVISION_X ) ),
+ aDivisionPointX( this, SVX_RES( FT_HORZ_POINTS) ),
+
+ aFtDivisionY( this, SVX_RES( FT_DIVISION_Y) ),
+ aNumFldDivisionY( this, SVX_RES( NUM_FLD_DIVISION_Y ) ),
+ aDivisionPointY( this, SVX_RES( FT_VERT_POINTS) ),
+
+ aCbxSynchronize ( this, SVX_RES( CBX_SYNCHRONIZE ) ),
+ aGrpDrawGrid ( this, SVX_RES( GRP_DRAWGRID ) ),
+
+ aGrpSnap ( this, SVX_RES( GRP_SNAP ) ),
+ aCbxSnapHelplines ( this, SVX_RES( CBX_SNAP_HELPLINES ) ),
+ aCbxSnapBorder ( this, SVX_RES( CBX_SNAP_BORDER ) ),
+ aCbxSnapFrame ( this, SVX_RES( CBX_SNAP_FRAME ) ),
+ aCbxSnapPoints ( this, SVX_RES( CBX_SNAP_POINTS ) ),
+ aFtSnapArea ( this, SVX_RES( FT_SNAP_AREA ) ),
+ aMtrFldSnapArea ( this, SVX_RES( MTR_FLD_SNAP_AREA ) ),
+
+ aSeparatorFL ( this, SVX_RES( FL_SEPARATOR ) ),
+
+ aGrpOrtho ( this, SVX_RES( GRP_ORTHO ) ),
+ aCbxOrtho ( this, SVX_RES( CBX_ORTHO ) ),
+ aCbxBigOrtho ( this, SVX_RES( CBX_BIGORTHO ) ),
+ aCbxRotate ( this, SVX_RES( CBX_ROTATE ) ),
+ aMtrFldAngle ( this, SVX_RES( MTR_FLD_ANGLE ) ),
+ aFtBezAngle ( this, SVX_RES( FT_BEZ_ANGLE ) ),
+ aMtrFldBezAngle ( this, SVX_RES( MTR_FLD_BEZ_ANGLE ) ),
+
+ bAttrModified( FALSE )
+{
+ // diese Page braucht ExchangeSupport
+ SetExchangeSupport();
+
+ FreeResource();
+
+ aDivisionPointY.SetText(aDivisionPointX.GetText());
+ // Metrik einstellen
+ FieldUnit eFUnit = GetModuleFieldUnit( rCoreSet );
+ long nFirst, nLast, nMin, nMax;
+
+ lcl_GetMinMax(aMtrFldDrawX, nFirst, nLast, nMin, nMax);
+ SetFieldUnit( aMtrFldDrawX, eFUnit, TRUE );
+ lcl_SetMinMax(aMtrFldDrawX, nFirst, nLast, nMin, nMax);
+
+ lcl_GetMinMax(aMtrFldDrawY, nFirst, nLast, nMin, nMax);
+ SetFieldUnit( aMtrFldDrawY, eFUnit, TRUE );
+ lcl_SetMinMax(aMtrFldDrawY, nFirst, nLast, nMin, nMax);
+
+
+ aCbxRotate.SetClickHdl( LINK( this, SvxGridTabPage, ClickRotateHdl_Impl ) );
+ Link aLink = LINK( this, SvxGridTabPage, ChangeGridsnapHdl_Impl );
+ aCbxUseGridsnap.SetClickHdl( aLink );
+ aCbxSynchronize.SetClickHdl( aLink );
+ aCbxGridVisible.SetClickHdl( aLink );
+ aMtrFldDrawX.SetModifyHdl(
+ LINK( this, SvxGridTabPage, ChangeDrawHdl_Impl ) );
+ aMtrFldDrawY.SetModifyHdl(
+ LINK( this, SvxGridTabPage, ChangeDrawHdl_Impl ) );
+ aNumFldDivisionX.SetModifyHdl(
+ LINK( this, SvxGridTabPage, ChangeDivisionHdl_Impl ) );
+ aNumFldDivisionY.SetModifyHdl(
+ LINK( this, SvxGridTabPage, ChangeDivisionHdl_Impl ) );
+}
+
+//------------------------------------------------------------------------
+
+SfxTabPage* SvxGridTabPage::Create( Window* pParent, const SfxItemSet& rAttrSet )
+{
+ return ( new SvxGridTabPage( pParent, rAttrSet ) );
+}
+
+//------------------------------------------------------------------------
+
+BOOL SvxGridTabPage::FillItemSet( SfxItemSet& rCoreSet )
+{
+ if ( bAttrModified )
+ {
+ SvxGridItem aGridItem( SID_ATTR_GRID_OPTIONS );
+
+ aGridItem.bUseGridsnap = aCbxUseGridsnap.IsChecked();
+ aGridItem.bSynchronize = aCbxSynchronize.IsChecked();
+ aGridItem.bGridVisible = aCbxGridVisible.IsChecked();
+
+ SfxMapUnit eUnit =
+ rCoreSet.GetPool()->GetMetric( GetWhich( SID_ATTR_GRID_OPTIONS ) );
+ long nX =GetCoreValue( aMtrFldDrawX, eUnit );
+ long nY = GetCoreValue( aMtrFldDrawY, eUnit );
+
+ aGridItem.nFldDrawX = (UINT32) nX;
+ aGridItem.nFldDrawY = (UINT32) nY;
+ aGridItem.nFldDivisionX = static_cast<long>(aNumFldDivisionX.GetValue());
+ aGridItem.nFldDivisionY = static_cast<long>(aNumFldDivisionY.GetValue());
+
+ rCoreSet.Put( aGridItem );
+ }
+ return bAttrModified;
+}
+
+//------------------------------------------------------------------------
+
+void SvxGridTabPage::Reset( const SfxItemSet& rSet )
+{
+ const SfxPoolItem* pAttr = 0;
+
+ if( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_GRID_OPTIONS , FALSE,
+ (const SfxPoolItem**)&pAttr ))
+ {
+ const SvxGridItem* pGridAttr = (SvxGridItem*)pAttr;
+ aCbxUseGridsnap.Check( pGridAttr->bUseGridsnap == 1 );
+ aCbxSynchronize.Check( pGridAttr->bSynchronize == 1 );
+ aCbxGridVisible.Check( pGridAttr->bGridVisible == 1 );
+
+ SfxMapUnit eUnit =
+ rSet.GetPool()->GetMetric( GetWhich( SID_ATTR_GRID_OPTIONS ) );
+ SetMetricValue( aMtrFldDrawX , pGridAttr->nFldDrawX, eUnit );
+ SetMetricValue( aMtrFldDrawY , pGridAttr->nFldDrawY, eUnit );
+
+// UINT32 nFineX = pGridAttr->nFldDivisionX;
+// UINT32 nFineY = pGridAttr->nFldDivisionY;
+// aNumFldDivisionX.SetValue( nFineX ? (pGridAttr->nFldDrawX / nFineX - 1) : 0 );
+// aNumFldDivisionY.SetValue( nFineY ? (pGridAttr->nFldDrawY / nFineY - 1) : 0 );
+ aNumFldDivisionX.SetValue( pGridAttr->nFldDivisionX );
+ aNumFldDivisionY.SetValue( pGridAttr->nFldDivisionY );
+ }
+
+ ChangeGridsnapHdl_Impl( &aCbxUseGridsnap );
+ bAttrModified = FALSE;
+}
+
+// -----------------------------------------------------------------------
+
+void SvxGridTabPage::ActivatePage( const SfxItemSet& rSet )
+{
+ const SfxPoolItem* pAttr = NULL;
+ if( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_GRID_OPTIONS , FALSE,
+ (const SfxPoolItem**)&pAttr ))
+ {
+ const SvxGridItem* pGridAttr = (SvxGridItem*) pAttr;
+ aCbxUseGridsnap.Check( pGridAttr->bUseGridsnap == 1 );
+
+ ChangeGridsnapHdl_Impl( &aCbxUseGridsnap );
+ }
+
+ // Metrik ggfs. aendern (da TabPage im Dialog liegt,
+ // wo die Metrik eingestellt werden kann
+ //USHORT nWhich = GetWhich( SID_ATTR_METRIC );
+ //if( rSet.GetItemState( GetWhich( SID_ATTR_METRIC ) ) >= SFX_ITEM_AVAILABLE )
+ if( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_METRIC , FALSE,
+ (const SfxPoolItem**)&pAttr ))
+ {
+ const SfxUInt16Item* pItem = (SfxUInt16Item*) pAttr;
+
+ FieldUnit eFUnit = (FieldUnit)(long)pItem->GetValue();
+
+ if( eFUnit != aMtrFldDrawX.GetUnit() )
+ {
+ // Metriken einstellen
+ long nFirst, nLast, nMin, nMax;
+ long nVal = static_cast<long>(aMtrFldDrawX.Denormalize( aMtrFldDrawX.GetValue( FUNIT_TWIP ) ));
+
+ lcl_GetMinMax(aMtrFldDrawX, nFirst, nLast, nMin, nMax);
+ SetFieldUnit( aMtrFldDrawX, eFUnit, TRUE );
+ lcl_SetMinMax(aMtrFldDrawX, nFirst, nLast, nMin, nMax);
+
+ aMtrFldDrawX.SetValue( aMtrFldDrawX.Normalize( nVal ), FUNIT_TWIP );
+
+ nVal = static_cast<long>(aMtrFldDrawY.Denormalize( aMtrFldDrawY.GetValue( FUNIT_TWIP ) ));
+ lcl_GetMinMax(aMtrFldDrawY, nFirst, nLast, nMin, nMax);
+ SetFieldUnit( aMtrFldDrawY, eFUnit, TRUE );
+ lcl_SetMinMax(aMtrFldDrawY, nFirst, nLast, nMin, nMax);
+ aMtrFldDrawY.SetValue( aMtrFldDrawY.Normalize( nVal ), FUNIT_TWIP );
+
+ }
+ }
+}
+
+// -----------------------------------------------------------------------
+int SvxGridTabPage::DeactivatePage( SfxItemSet* _pSet )
+{
+ if ( _pSet )
+ FillItemSet( *_pSet );
+ return( LEAVE_PAGE );
+}
+//------------------------------------------------------------------------
+IMPL_LINK( SvxGridTabPage, ChangeDrawHdl_Impl, MetricField *, pField )
+{
+ bAttrModified = TRUE;
+ if( aCbxSynchronize.IsChecked() )
+ {
+ if(pField == &aMtrFldDrawX)
+ aMtrFldDrawY.SetValue( aMtrFldDrawX.GetValue() );
+ else
+ aMtrFldDrawX.SetValue( aMtrFldDrawY.GetValue() );
+ }
+ return 0;
+}
+//------------------------------------------------------------------------
+
+IMPL_LINK( SvxGridTabPage, ClickRotateHdl_Impl, void *, EMPTYARG )
+{
+ if( aCbxRotate.IsChecked() )
+ aMtrFldAngle.Enable();
+ else
+ aMtrFldAngle.Disable();
+
+ return( 0L );
+}
+
+//------------------------------------------------------------------------
+
+IMPL_LINK( SvxGridTabPage, ChangeDivisionHdl_Impl, NumericField *, pField )
+{
+ bAttrModified = TRUE;
+ if( aCbxSynchronize.IsChecked() )
+ {
+ if(&aNumFldDivisionX == pField)
+ aNumFldDivisionY.SetValue( aNumFldDivisionX.GetValue() );
+ else
+ aNumFldDivisionX.SetValue( aNumFldDivisionY.GetValue() );
+ }
+ return 0;
+}
+//------------------------------------------------------------------------
+
+IMPL_LINK( SvxGridTabPage, ChangeGridsnapHdl_Impl, void *, EMPTYARG )
+{
+ bAttrModified = TRUE;
+ return 0;
+}
+
+