summaryrefslogtreecommitdiff
path: root/svx/source/dialog/page.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'svx/source/dialog/page.cxx')
-rw-r--r--svx/source/dialog/page.cxx1686
1 files changed, 1686 insertions, 0 deletions
diff --git a/svx/source/dialog/page.cxx b/svx/source/dialog/page.cxx
new file mode 100644
index 000000000000..dd16cb322a17
--- /dev/null
+++ b/svx/source/dialog/page.cxx
@@ -0,0 +1,1686 @@
+/*************************************************************************
+ *
+ * $RCSfile: page.cxx,v $
+ *
+ * $Revision: 1.1.1.1 $
+ *
+ * last change: $Author: hr $ $Date: 2000-09-18 17:01:10 $
+ *
+ * The Contents of this file are made available subject to the terms of
+ * either of the following licenses
+ *
+ * - GNU Lesser General Public License Version 2.1
+ * - Sun Industry Standards Source License Version 1.1
+ *
+ * Sun Microsystems Inc., October, 2000
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2000 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library 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 for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ *
+ * Sun Industry Standards Source License Version 1.1
+ * =================================================
+ * The contents of this file are subject to the Sun Industry Standards
+ * Source License Version 1.1 (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.openoffice.org/license.html.
+ *
+ * Software provided under this License is provided on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ * See the License for the specific provisions governing your rights and
+ * obligations concerning the Software.
+ *
+ * The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ * Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+
+// include ---------------------------------------------------------------
+
+#pragma hdrstop
+
+#define ITEMID_BRUSH 0
+#define ITEMID_BOX 0
+#define ITEMID_BOXINFO 0
+#define ITEMID_SHADOW 0
+#define ITEMID_PAPERBIN 0
+#define ITEMID_LRSPACE 0
+#define ITEMID_ULSPACE 0
+#define ITEMID_SIZE 0
+
+#ifndef _SFXAPP_HXX //autogen
+#include <sfx2/app.hxx>
+#endif
+#ifndef _RESARY_HXX //autogen
+#include <vcl/resary.hxx>
+#endif
+#ifndef _GRAPH_HXX //autogen
+#include <vcl/graph.hxx>
+#endif
+#ifndef _SFXVIEWSH_HXX //autogen
+#include <sfx2/viewsh.hxx>
+#endif
+#ifndef _SFXITEMITER_HXX //autogen
+#include <svtools/itemiter.hxx>
+#endif
+#ifndef _SV_MSGBOX_HXX //autogen
+#include <vcl/msgbox.hxx>
+#endif
+
+#define _SVX_PAGE_CXX
+
+#include "dialogs.hrc"
+#include "page.hrc"
+#include "helpid.hrc"
+
+#define ITEMID_PAGE 0
+#define ITEMID_SETITEM 0
+#define ITEMID_PTR 0
+
+#include "page.hxx"
+#include "pageitem.hxx"
+#include "brshitem.hxx"
+#include "boxitem.hxx"
+#include "shaditem.hxx"
+#include "pbinitem.hxx"
+#include "lrspitem.hxx"
+#include "ulspitem.hxx"
+#include "sizeitem.hxx"
+#include "bbdlg.hxx"
+#include "dlgutil.hxx"
+#include "dialmgr.hxx"
+#include "paperinf.hxx"
+#include "dialmgr.hxx"
+
+#ifndef _SFXMODULE_HXX
+#include <sfx2/module.hxx>
+#endif
+
+#ifndef _SFX_SAVEOPT_HXX //autogen
+#include <sfx2/saveopt.hxx>
+#endif
+
+#ifndef _SFXSTRITEM_HXX //autogen
+#include <svtools/stritem.hxx>
+#endif
+
+// static ----------------------------------------------------------------
+
+static const long MINBODY = 284; // 0,5cm in twips aufgerundet
+static const long PRINT_OFFSET = 17; // 0,03cm in twips abgerundet
+
+static USHORT pRanges[] =
+{
+ SID_ATTR_BORDER_OUTER,
+ SID_ATTR_BORDER_SHADOW,
+ SID_ATTR_LRSPACE,
+ SID_ATTR_PAGE_SHARED,
+ SID_SWREGISTER_COLLECTION,
+ SID_SWREGISTER_MODE,
+ 0
+};
+
+// ------- Mapping Seitenlayout ------------------------------------------
+
+USHORT aArr[] =
+{
+ SVX_PAGE_ALL,
+ SVX_PAGE_MIRROR,
+ SVX_PAGE_RIGHT,
+ SVX_PAGE_LEFT
+};
+
+// -----------------------------------------------------------------------
+
+USHORT PageUsageToPos_Impl( USHORT nUsage )
+{
+ const USHORT nCount = sizeof(aArr) / sizeof(USHORT);
+
+ for ( USHORT i = 0; i < nCount; ++i )
+ if ( aArr[i] == ( nUsage & 0x000f ) )
+ return i;
+ return SVX_PAGE_ALL;
+}
+
+// -----------------------------------------------------------------------
+
+USHORT PosToPageUsage_Impl( USHORT nPos )
+{
+ const USHORT nCount = sizeof(aArr) / sizeof(USHORT);
+
+ if ( nPos >= nCount )
+ return 0;
+ return aArr[nPos];
+}
+
+// -----------------------------------------------------------------------
+
+Size GetMinBorderSpace_Impl( const SvxShadowItem& rShadow, const SvxBoxItem& rBox )
+{
+ Size aSz;
+ aSz.Height() = rShadow.CalcShadowSpace( SHADOW_BOTTOM ) + rBox.CalcLineSpace( BOX_LINE_BOTTOM );
+ aSz.Height() += rShadow.CalcShadowSpace( SHADOW_TOP ) + rBox.CalcLineSpace( BOX_LINE_TOP );
+ aSz.Width() = rShadow.CalcShadowSpace( SHADOW_LEFT ) + rBox.CalcLineSpace( BOX_LINE_LEFT );
+ aSz.Width() += rShadow.CalcShadowSpace( SHADOW_RIGHT ) + rBox.CalcLineSpace( BOX_LINE_RIGHT );
+ return aSz;
+}
+
+// -----------------------------------------------------------------------
+
+long ConvertLong_Impl( const long nIn, SfxMapUnit eUnit )
+{
+ return OutputDevice::LogicToLogic( nIn, (MapUnit)eUnit, MAP_TWIP );
+}
+
+// class SvxPageDescPage --------------------------------------------------
+
+// gibt den Bereich der Which-Werte zur"uck
+
+USHORT* SvxPageDescPage::GetRanges()
+{
+ return pRanges;
+}
+
+// -----------------------------------------------------------------------
+
+SfxTabPage* SvxPageDescPage::Create( Window* pParent, const SfxItemSet& rSet )
+{
+ return new SvxPageDescPage( pParent, rSet );
+}
+
+// -----------------------------------------------------------------------
+
+SvxPageDescPage::SvxPageDescPage( Window* pParent, const SfxItemSet& rAttr ) :
+
+ SfxTabPage( pParent, SVX_RES( RID_SVXPAGE_PAGE ), rAttr ),
+
+ aLeftMarginLbl ( this, ResId( FT_LEFT_MARGIN ) ),
+ aLeftMarginEdit ( this, ResId( ED_LEFT_MARGIN ) ),
+ aRightMarginLbl ( this, ResId( FT_RIGHT_MARGIN ) ),
+ aRightMarginEdit ( this, ResId( ED_RIGHT_MARGIN ) ),
+ aTopMarginLbl ( this, ResId( FT_TOP_MARGIN ) ),
+ aTopMarginEdit ( this, ResId( ED_TOP_MARGIN ) ),
+ aBottomMarginLbl ( this, ResId( FT_BOTTOM_MARGIN ) ),
+ aBottomMarginEdit ( this, ResId( ED_BOTTOM_MARGIN ) ),
+ aMarginFrm ( this, ResId( GB_MARGIN ) ),
+ aLayoutBox ( this, ResId( LB_LAYOUT ) ),
+ aPageFrm ( this, ResId( GB_PAGE ) ),
+ aNumberFormatBox ( this, ResId( LB_NUMBER_FORMAT ) ),
+ aNumberFormatFrm ( this, ResId( GB_NUMBER_FORMAT ) ),
+ aBspWin ( this, ResId( WN_BSP ) ),
+ aBspFrm ( this, ResId( GB_BSP ) ),
+ aPaperSizeBox ( this, ResId( LB_PAPER_SIZE ) ),
+ aPortraitBtn ( this, ResId( RB_PORTRAIT ) ),
+ aLandscapeBtn ( this, ResId( RB_LANDSCAPE ) ),
+ aPaperWidthText ( this, ResId( FT_PAPER_WIDTH ) ),
+ aPaperWidthEdit ( this, ResId( ED_PAPER_WIDTH ) ),
+ aPaperHeightText ( this, ResId( FT_PAPER_HEIGHT ) ),
+ aPaperHeightEdit ( this, ResId( ED_PAPER_HEIGHT ) ),
+ aPaperTrayLbl ( this, ResId( FT_PAPER_TRAY ) ),
+ aPaperTrayBox ( this, ResId( LB_PAPER_TRAY ) ),
+ aPaperSizeFrm ( this, ResId( GB_PAPER_SIZE ) ),
+ aHorzBox ( this, ResId( CB_HORZ ) ),
+ aVertBox ( this, ResId( CB_VERT ) ),
+ aAdaptBox ( this, ResId( CB_ADAPT ) ),
+ aPageName ( this, ResId( FT_PAGE_NAME ) ),
+ aExtraFrm ( this, ResId( GB_EXTRA ) ),
+
+ aRegisterCB ( this, ResId( CB_REGISTER ) ),
+ aRegisterFT ( this, ResId( FT_REGISTER ) ),
+ aRegisterLB ( this, ResId( LB_REGISTER ) ),
+ aRegisterGB ( this, ResId( GB_REGISTER ) ),
+
+ aInsideText ( ResId( STR_INSIDE ) ),
+ aOutsideText ( ResId( STR_OUTSIDE ) ),
+ aPrintRangeQueryText( ResId( STR_QUERY_PRINTRANGE ) ),
+
+ bLandscape ( FALSE ),
+ eMode ( SVX_PAGE_MODE_STANDARD ),
+ ePaperStart ( SVX_PAPER_A3 ),
+ ePaperEnd ( SVX_PAPER_DL )
+
+{
+ bBorderModified = FALSE;
+
+ FreeResource();
+ // diese Page braucht ExchangeSupport
+ SetExchangeSupport();
+
+ Init_Impl();
+
+ FieldUnit eFUnit;
+ GET_MODULE_FIELDUNIT( eFUnit );
+ SetFieldUnit( aLeftMarginEdit, eFUnit );
+ SetFieldUnit( aRightMarginEdit, eFUnit );
+ SetFieldUnit( aTopMarginEdit, eFUnit );
+ SetFieldUnit( aBottomMarginEdit, eFUnit );
+ SetFieldUnit( aPaperWidthEdit, eFUnit );
+ SetFieldUnit( aPaperHeightEdit, eFUnit );
+
+ Printer* pDefPrinter = 0;
+ BOOL bPrinterDel = FALSE;
+
+ if ( SfxViewShell::Current() && SfxViewShell::Current()->GetPrinter() )
+ pDefPrinter = (Printer*)SfxViewShell::Current()->GetPrinter();
+ else
+ {
+ pDefPrinter = new Printer;
+ bPrinterDel = TRUE;
+ }
+
+ MapMode aOldMode = pDefPrinter->GetMapMode();
+ pDefPrinter->SetMapMode( MAP_TWIP );
+
+ // First- und Last-Werte f"ur die R"ander setzen
+ Size aPaperSize = pDefPrinter->GetPaperSize();
+ Size aPrintSize = pDefPrinter->GetOutputSize();
+ /*
+ * einen Punkt ( 0,0 ) in logische Koordinaten zu konvertieren,
+ * sieht aus wie Unsinn; ist aber sinnvoll, wenn der Ursprung des
+ * Koordinatensystems verschoben ist.
+ */
+ Point aPrintOffset = pDefPrinter->GetPageOffset() -
+ pDefPrinter->PixelToLogic( Point() );
+ pDefPrinter->SetMapMode( aOldMode );
+
+ if ( bPrinterDel )
+ delete pDefPrinter;
+ long nOffset = !aPrintOffset.X() && !aPrintOffset.X() ? 0 : PRINT_OFFSET;
+ aLeftMarginEdit.SetFirst( aLeftMarginEdit.Normalize( aPrintOffset.X() ), FUNIT_TWIP );
+ nFirstLeftMargin = aLeftMarginEdit.GetFirst();
+ aRightMarginEdit.SetFirst( aRightMarginEdit.Normalize(
+ aPaperSize.Width() - aPrintSize.Width() - aPrintOffset.X() + nOffset ), FUNIT_TWIP);
+ nFirstRightMargin = aRightMarginEdit.GetFirst();
+ aTopMarginEdit.SetFirst( aTopMarginEdit.Normalize( aPrintOffset.Y() ), FUNIT_TWIP );
+ nFirstTopMargin = aTopMarginEdit.GetFirst();
+ aBottomMarginEdit.SetFirst( aBottomMarginEdit.Normalize(
+ aPaperSize.Height() - aPrintSize.Height() - aPrintOffset.Y() + nOffset ), FUNIT_TWIP );
+ nFirstBottomMargin = aBottomMarginEdit.GetFirst();
+ aLeftMarginEdit.SetLast( aLeftMarginEdit.Normalize(
+ aPrintOffset.X() + aPrintSize.Width() ), FUNIT_TWIP );
+ nLastLeftMargin = aLeftMarginEdit.GetLast();
+ aRightMarginEdit.SetLast( aRightMarginEdit.Normalize(
+ aPrintOffset.X() + aPrintSize.Width() ), FUNIT_TWIP );
+ nLastRightMargin = aRightMarginEdit.GetLast();
+ aTopMarginEdit.SetLast( aTopMarginEdit.Normalize(
+ aPrintOffset.Y() + aPrintSize.Height() ), FUNIT_TWIP );
+ nLastTopMargin = aTopMarginEdit.GetLast();
+ aBottomMarginEdit.SetLast( aBottomMarginEdit.Normalize(
+ aPrintOffset.Y() + aPrintSize.Height() ), FUNIT_TWIP );
+ nLastBottomMargin = aBottomMarginEdit.GetLast();
+}
+
+// -----------------------------------------------------------------------
+
+SvxPageDescPage::~SvxPageDescPage()
+{
+}
+
+// -----------------------------------------------------------------------
+
+void SvxPageDescPage::Init_Impl()
+{
+ aLeftText = aLeftMarginLbl.GetText();
+ aRightText = aRightMarginLbl.GetText();
+
+ // Handler einstellen
+ aLayoutBox.SetSelectHdl( LINK( this, SvxPageDescPage, LayoutHdl_Impl ) );
+
+ aPaperTrayBox.SetGetFocusHdl(
+ LINK( this, SvxPageDescPage, PaperBinHdl_Impl ) );
+ aPaperSizeBox.SetSelectHdl(
+ LINK( this, SvxPageDescPage, PaperSizeSelect_Impl ) );
+ aPaperWidthEdit.SetModifyHdl(
+ LINK( this, SvxPageDescPage, PaperSizeModify_Impl ) );
+ aPaperHeightEdit.SetModifyHdl(
+ LINK( this, SvxPageDescPage, PaperSizeModify_Impl ) );
+ aLandscapeBtn.SetClickHdl(
+ LINK( this, SvxPageDescPage, SwapOrientation_Impl ) );
+ aPortraitBtn.SetClickHdl(
+ LINK( this, SvxPageDescPage, SwapOrientation_Impl ) );
+
+ Link aLink = LINK( this, SvxPageDescPage, BorderModify_Impl );
+ aLeftMarginEdit.SetModifyHdl( aLink );
+ aRightMarginEdit.SetModifyHdl( aLink );
+ aTopMarginEdit.SetModifyHdl( aLink );
+ aBottomMarginEdit.SetModifyHdl( aLink );
+
+ aLink = LINK( this, SvxPageDescPage, RangeHdl_Impl );
+ aPaperWidthEdit.SetLoseFocusHdl( aLink );
+ aPaperHeightEdit.SetLoseFocusHdl( aLink );
+ aLeftMarginEdit.SetLoseFocusHdl( aLink );
+ aRightMarginEdit.SetLoseFocusHdl( aLink );
+ aTopMarginEdit.SetLoseFocusHdl( aLink );
+ aBottomMarginEdit.SetLoseFocusHdl( aLink );
+
+ aHorzBox.SetClickHdl( LINK( this, SvxPageDescPage, CenterHdl_Impl ) );
+ aVertBox.SetClickHdl( LINK( this, SvxPageDescPage, CenterHdl_Impl ) );
+}
+
+// -----------------------------------------------------------------------
+
+void SvxPageDescPage::Reset( const SfxItemSet& rSet )
+{
+ SfxItemPool* pPool = rSet.GetPool();
+ DBG_ASSERT( pPool, "Wo ist der Pool" );
+ SfxMapUnit eUnit = pPool->GetMetric( GetWhich( SID_ATTR_LRSPACE ) );
+
+ // R"ander (Links/Rechts) einstellen
+ const SfxPoolItem* pItem = GetItem( rSet, SID_ATTR_LRSPACE );
+
+ if ( pItem )
+ {
+ const SvxLRSpaceItem& rLRSpace = (const SvxLRSpaceItem&)*pItem;
+ SetMetricValue( aLeftMarginEdit, rLRSpace.GetLeft(), eUnit );
+ aBspWin.SetLeft(
+ (USHORT)ConvertLong_Impl( (long)rLRSpace.GetLeft(), eUnit ) );
+ SetMetricValue( aRightMarginEdit, rLRSpace.GetRight(), eUnit );
+ aBspWin.SetRight(
+ (USHORT)ConvertLong_Impl( (long)rLRSpace.GetRight(), eUnit ) );
+ }
+
+ // R"ander (Oben/Unten) einstellen
+ pItem = GetItem( rSet, SID_ATTR_ULSPACE );
+
+ if ( pItem )
+ {
+ const SvxULSpaceItem& rULSpace = (const SvxULSpaceItem&)*pItem;
+ SetMetricValue( aTopMarginEdit, rULSpace.GetUpper(), eUnit );
+ aBspWin.SetTop(
+ (USHORT)ConvertLong_Impl( (long)rULSpace.GetUpper(), eUnit ) );
+ SetMetricValue( aBottomMarginEdit, rULSpace.GetLower(), eUnit );
+ aBspWin.SetBottom(
+ (USHORT)ConvertLong_Impl( (long)rULSpace.GetLower(), eUnit ) );
+ }
+
+ // Printer f"ur die Sch"achte besorgen
+ Printer* pDefPrinter = 0;
+ BOOL bPrinterDel = FALSE;
+
+ if ( SfxViewShell::Current() && SfxViewShell::Current()->GetPrinter() )
+ pDefPrinter = (Printer*)SfxViewShell::Current()->GetPrinter();
+ else
+ {
+ pDefPrinter = new Printer;
+ bPrinterDel = TRUE;
+ }
+
+ // allgemeine Seitendaten
+ SvxNumType eNumType = SVX_ARABIC;
+ bLandscape = ( pDefPrinter->GetOrientation() == ORIENTATION_LANDSCAPE );
+ USHORT nUse = (USHORT)SVX_PAGE_ALL;
+ pItem = GetItem( rSet, SID_ATTR_PAGE );
+
+ if ( pItem )
+ {
+ const SvxPageItem& rItem = (const SvxPageItem&)*pItem;
+ eNumType = rItem.GetNumType();
+ nUse = (SvxPageUsage)rItem.GetPageUsage();
+ bLandscape = rItem.IsLandscape();
+ }
+
+ // Ausrichtung
+ aLayoutBox.SelectEntryPos( ::PageUsageToPos_Impl( nUse ) );
+ aBspWin.SetUsage( nUse );
+ LayoutHdl_Impl( 0 );
+
+ // Numerierungsart der Seitenvorlage einstellen
+ aNumberFormatBox.SelectEntryPos( eNumType );
+
+ // Aktueller Papierschacht
+ aPaperTrayBox.Clear();
+ BYTE nPaperBin = PAPERBIN_PRINTER_SETTINGS;
+ pItem = GetItem( rSet, SID_ATTR_PAGE_PAPERBIN );
+
+ if ( pItem )
+ {
+ nPaperBin = ( (const SvxPaperBinItem*)pItem )->GetValue();
+
+ if ( nPaperBin >= pDefPrinter->GetPaperBinCount() )
+ nPaperBin = PAPERBIN_PRINTER_SETTINGS;
+ }
+
+ String aBinName;
+
+ if ( PAPERBIN_PRINTER_SETTINGS == nPaperBin )
+ aBinName = SVX_RESSTR( RID_SVXSTR_PAPERBIN_SETTINGS );
+ else
+ aBinName = pDefPrinter->GetPaperBinName( (USHORT)nPaperBin );
+
+ USHORT nEntryPos = aPaperTrayBox.InsertEntry( aBinName );
+ aPaperTrayBox.SetEntryData( nEntryPos, (void*)(ULONG)nPaperBin );
+ aPaperTrayBox.SelectEntry( aBinName );
+
+ // Size rausholen
+ Size aPaperSize = SvxPaperInfo::GetPaperSize( pDefPrinter );
+ pItem = GetItem( rSet, SID_ATTR_PAGE_SIZE );
+
+ if ( pItem )
+ aPaperSize = ( (const SvxSizeItem*)pItem )->GetSize();
+
+ FASTBOOL bOrientationSupport =
+ pDefPrinter->HasSupport( SUPPORT_SET_ORIENTATION );
+#ifdef OS2
+ // unter OS/2 wird bei HasSupport() immer TRUE returned
+ // aber nur als Dummy, deshalb FALSE
+ bOrientationSupport = FALSE;
+#endif
+
+ if ( !bOrientationSupport &&
+ aPaperSize.Width() > aPaperSize.Height() )
+ bLandscape = TRUE;
+
+ aLandscapeBtn.Check( bLandscape );
+ aPortraitBtn.Check( !bLandscape );
+
+ aBspWin.SetSize( Size( ConvertLong_Impl( aPaperSize.Width(), eUnit ),
+ ConvertLong_Impl( aPaperSize.Height(), eUnit ) ) );
+
+ // Werte in die Edits eintragen
+ SetMetricValue( aPaperHeightEdit, aPaperSize.Height(), eUnit );
+ SetMetricValue( aPaperWidthEdit, aPaperSize.Width(), eUnit );
+ aPaperSizeBox.Clear();
+
+ // Papierformate
+ Size aTmpSize = aPaperSize;
+
+ if ( bLandscape )
+ Swap( aTmpSize );
+ // aktuelles Format
+ SvxPaper ePaper = SvxPaperInfo::GetPaper( aTmpSize, (MapUnit)eUnit, TRUE );
+ USHORT nActPos = LISTBOX_ENTRY_NOTFOUND;
+ USHORT nAryId = RID_SVXSTRARY_PAPERSIZE_STD;
+
+ if ( ePaperStart != SVX_PAPER_A3 )
+ nAryId = RID_SVXSTRARY_PAPERSIZE_DRAW;
+ ResStringArray aPaperAry( SVX_RES( nAryId ) );
+ USHORT nCnt = aPaperAry.Count();
+
+ for ( USHORT i = 0; i < nCnt; ++i )
+ {
+ String aStr = aPaperAry.GetString(i);
+ SvxPaper eSize = (SvxPaper)aPaperAry.GetValue(i);
+ USHORT nPos = aPaperSizeBox.InsertEntry( aStr );
+ aPaperSizeBox.SetEntryData( nPos, (void*)(ULONG)eSize );
+
+ if ( eSize == ePaper )
+ nActPos = nPos;
+ }
+ // aktuelles Papierformat selektieren
+ aPaperSizeBox.SelectEntryPos( nActPos );
+
+ // ggf. angelegten Printer wieder l"oschen
+ if ( bPrinterDel )
+ delete pDefPrinter;
+
+ // Applikationsspezifisch
+
+ USHORT nResId = 0;
+
+ switch ( eMode )
+ {
+ case SVX_PAGE_MODE_CENTER:
+ {
+ nResId = RID_SVXSTR_CALC_PAGE;
+ aHorzBox.Show();
+ aVertBox.Show();
+
+ // Horizontale Ausrichtung
+ pItem = GetItem( rSet, SID_ATTR_PAGE_EXT1 );
+ aHorzBox.Check( pItem ? ( (const SfxBoolItem*)pItem )->GetValue()
+ : FALSE );
+
+ // Vertikale Ausrichtung
+ pItem = GetItem( rSet, SID_ATTR_PAGE_EXT2 );
+ aVertBox.Check( pItem ? ( (const SfxBoolItem*)pItem )->GetValue()
+ : FALSE );
+
+ // Beispiel-Fenster auf Tabelle setzen
+ aBspWin.SetTable( TRUE );
+ aBspWin.SetHorz( aHorzBox.IsChecked() );
+ aBspWin.SetVert( aVertBox.IsChecked() );
+
+ break;
+ }
+
+ case SVX_PAGE_MODE_PRESENTATION:
+ {
+ nResId = RID_SVXSTR_DRAW_PAGE;
+ aHorzBox.SetText( String( SVX_RESSTR( RID_SVXSTR_FULLSIZE ) ) );
+ aHorzBox.Show(); // f"ur Gesamte Seite ausf"ullen (Hintergr.Obj.)
+ aHorzBox.SetHelpId( HID_TPPAGE_FULLSIZE );
+ aAdaptBox.Show();
+ String sUser = GetUserData();
+
+ if ( sUser.Len() )
+ aAdaptBox.Check( (BOOL)sUser.ToInt32() );
+ else
+ {
+ pItem = GetItem( rSet, SID_ATTR_PAGE_EXT1 );
+ aAdaptBox.Check( pItem ?
+ ( (const SfxBoolItem*)pItem )->GetValue() : FALSE );
+ }
+ pItem = GetItem( rSet, SID_ATTR_PAGE_EXT2 );
+ aHorzBox.Check( pItem ? ( (const SfxBoolItem*)pItem )->GetValue() : FALSE );
+
+ //!!! hidden, weil von StarDraw nicht implementiert
+ aLayoutBox.Hide();
+ aPageFrm.Hide();
+
+ break;
+ }
+
+ default:
+ {
+ nResId = RID_SVXSTR_WRITER_PAGE;
+ if(!aRegisterCB.IsVisible())
+ aPageName.Show();
+ pItem = GetItem( rSet, SID_ATTR_PAGE_EXT1 );
+
+ if ( pItem )
+ aPageName.SetText(((const SfxStringItem*)pItem)->GetValue());
+ else
+ aPageName.SetText( String() );
+ }
+ }
+
+ if ( nResId )
+ aExtraFrm.SetText( SVX_RESSTR( nResId ) );
+
+ // im Beispiel Hintergrund und Umrandung anzeigen
+ ResetBackground_Impl( rSet );
+//! UpdateExample_Impl();
+ RangeHdl_Impl( 0 );
+
+ // Header Footer anzeigen
+ InitHeadFoot_Impl( rSet );
+
+ // R"ander auf Hoch/Quer updaten, dann Beispiel updaten
+ bBorderModified = FALSE;
+ SwapFirstValues_Impl( FALSE );
+ UpdateExample_Impl();
+
+ // Alte Werte sichern
+ aLeftMarginEdit.SaveValue();
+ aRightMarginEdit.SaveValue();
+ aTopMarginEdit.SaveValue();
+ aBottomMarginEdit.SaveValue();
+ aLayoutBox.SaveValue();
+ aNumberFormatBox.SaveValue();
+ aPaperSizeBox.SaveValue();
+ aPaperWidthEdit.SaveValue();
+ aPaperHeightEdit.SaveValue();
+ aPortraitBtn.SaveValue();
+ aLandscapeBtn.SaveValue();
+ aPaperTrayBox.SaveValue();
+ aVertBox.SaveValue();
+ aHorzBox.SaveValue();
+ aAdaptBox.SaveValue();
+
+ // Registerhaltigkeit
+ if(SFX_ITEM_SET == rSet.GetItemState(SID_SWREGISTER_MODE))
+ {
+ aRegisterCB.Check(((const SfxBoolItem&)rSet.Get(
+ SID_SWREGISTER_MODE)).GetValue());
+ aRegisterCB.SaveValue();
+ RegisterModify(&aRegisterCB);
+ }
+ if(SFX_ITEM_SET == rSet.GetItemState(SID_SWREGISTER_COLLECTION))
+ {
+ aRegisterLB.SelectEntry(
+ ((const SfxStringItem&)rSet.Get(SID_SWREGISTER_COLLECTION)).GetValue());
+ aRegisterLB.SaveValue();
+ }
+
+}
+
+// -----------------------------------------------------------------------
+
+void SvxPageDescPage::FillUserData()
+{
+ if ( SVX_PAGE_MODE_PRESENTATION == eMode )
+ SetUserData( UniString::CreateFromInt32( (sal_Int32)aAdaptBox.IsChecked() ) );
+}
+
+// -----------------------------------------------------------------------
+
+BOOL SvxPageDescPage::FillItemSet( SfxItemSet& rSet )
+{
+ BOOL bModified = FALSE;
+ const SfxItemSet& rOldSet = GetItemSet();
+ SfxItemPool* pPool = rOldSet.GetPool();
+ DBG_ASSERT( pPool, "Wo ist der Pool" );
+ USHORT nWhich = GetWhich( SID_ATTR_LRSPACE );
+ SfxMapUnit eUnit = pPool->GetMetric( nWhich );
+ const SfxPoolItem* pOld = 0;
+
+ // alten linken und rechten Rand kopieren
+ SvxLRSpaceItem aMargin( (const SvxLRSpaceItem&)rOldSet.Get( nWhich ) );
+
+ // alten oberen und unteren Rand kopieren
+ nWhich = GetWhich( SID_ATTR_ULSPACE );
+ SvxULSpaceItem aTopMargin( (const SvxULSpaceItem&)rOldSet.Get( nWhich ) );
+
+ if ( aLeftMarginEdit.GetText() != aLeftMarginEdit.GetSavedValue() )
+ {
+ aMargin.SetLeft( (USHORT)GetCoreValue( aLeftMarginEdit, eUnit ) );
+ bModified |= TRUE;
+ }
+
+ if ( aRightMarginEdit.GetText() != aRightMarginEdit.GetSavedValue() )
+ {
+ aMargin.SetRight( (USHORT)GetCoreValue( aRightMarginEdit, eUnit ) );
+ bModified |= TRUE;
+ }
+
+ // Linken und rechten Rand setzen
+ if ( bModified )
+ {
+ pOld = GetOldItem( rSet, SID_ATTR_LRSPACE );
+
+ if ( !pOld || !( *(const SvxLRSpaceItem*)pOld == aMargin ) )
+ rSet.Put( aMargin );
+ else
+ bModified = FALSE;
+ }
+
+ BOOL bMod = FALSE;
+
+ if ( aTopMarginEdit.GetText() != aTopMarginEdit.GetSavedValue() )
+ {
+ aTopMargin.SetUpper( (USHORT)GetCoreValue( aTopMarginEdit, eUnit ) );
+ bMod |= TRUE;
+ }
+
+ if ( aBottomMarginEdit.GetText() != aBottomMarginEdit.GetSavedValue() )
+ {
+ aTopMargin.SetLower( (USHORT)GetCoreValue( aBottomMarginEdit, eUnit ) );
+ bMod |= TRUE;
+ }
+
+ // unteren oberen Rand setzen
+ //
+ if ( bMod )
+ {
+ pOld = GetOldItem( rSet, SID_ATTR_ULSPACE );
+
+ if ( !pOld || !( *(const SvxULSpaceItem*)pOld == aTopMargin ) )
+ {
+ bModified |= TRUE;
+ rSet.Put( aTopMargin );
+ }
+ }
+
+ // Druckerschacht
+ nWhich = GetWhich( SID_ATTR_PAGE_PAPERBIN );
+ USHORT nPos = aPaperTrayBox.GetSelectEntryPos();
+ USHORT nBin = (USHORT)(ULONG)aPaperTrayBox.GetEntryData( nPos );
+ pOld = GetOldItem( rSet, SID_ATTR_PAGE_PAPERBIN );
+
+ if ( !pOld || ( (const SvxPaperBinItem*)pOld )->GetValue() != nBin )
+ {
+ rSet.Put( SvxPaperBinItem( nWhich, (BYTE)nBin ) );
+ bModified |= TRUE;
+ }
+
+ nPos = aPaperSizeBox.GetSelectEntryPos();
+ SvxPaper ePaper = (SvxPaper)(ULONG)aPaperSizeBox.GetEntryData( nPos );
+ const USHORT nOld = aPaperSizeBox.GetSavedValue();
+ BOOL bChecked = aLandscapeBtn.IsChecked();
+
+ if ( SVX_PAPER_USER == ePaper )
+ {
+ if ( nOld != nPos ||
+ aPaperWidthEdit.IsValueModified() ||
+ aPaperHeightEdit.IsValueModified() ||
+ bChecked != aLandscapeBtn.GetSavedValue() )
+ {
+ Size aSize( GetCoreValue( aPaperWidthEdit, eUnit ),
+ GetCoreValue( aPaperHeightEdit, eUnit ) );
+ pOld = GetOldItem( rSet, SID_ATTR_PAGE_SIZE );
+
+ if ( !pOld || ( (const SvxSizeItem*)pOld )->GetSize() != aSize )
+ {
+ rSet.Put( SvxSizeItem( GetWhich(SID_ATTR_PAGE_SIZE), aSize ) );
+ bModified |= TRUE;
+ }
+ }
+ }
+ else
+ {
+ if ( nOld != nPos || bChecked != aLandscapeBtn.GetSavedValue() )
+ {
+ Size aSize( SvxPaperInfo::GetPaperSize( ePaper, (MapUnit)eUnit ) );
+
+ if ( bChecked )
+ Swap( aSize );
+
+ pOld = GetOldItem( rSet, SID_ATTR_PAGE_SIZE );
+
+ if ( !pOld || ( (const SvxSizeItem*)pOld )->GetSize() != aSize )
+ {
+ rSet.Put( SvxSizeItem( GetWhich(SID_ATTR_PAGE_SIZE), aSize ) );
+ bModified |= TRUE;
+ }
+ }
+ }
+
+ // sonstiges Zeug der Page
+ nWhich = GetWhich( SID_ATTR_PAGE );
+ SvxPageItem aPage( (const SvxPageItem&)rOldSet.Get( nWhich ) );
+ bMod = aLayoutBox.GetSelectEntryPos() != aLayoutBox.GetSavedValue();
+
+ if ( bMod )
+ aPage.SetPageUsage(
+ ::PosToPageUsage_Impl( aLayoutBox.GetSelectEntryPos() ) );
+
+ if ( bChecked != aLandscapeBtn.GetSavedValue() )
+ {
+ aPage.SetLandscape(bChecked);
+ bMod |= TRUE;
+ }
+
+ // Einstellen der Numerierungsart der Seite
+ nPos = aNumberFormatBox.GetSelectEntryPos();
+
+ if ( nPos != aNumberFormatBox.GetSavedValue() )
+ {
+ aPage.SetNumType( (SvxNumType)nPos );
+ bMod |= TRUE;
+ }
+
+ if ( bMod )
+ {
+ pOld = GetOldItem( rSet, SID_ATTR_PAGE );
+
+ if ( !pOld || !( *(const SvxPageItem*)pOld == aPage ) )
+ {
+ rSet.Put( aPage );
+ bModified |= TRUE;
+ }
+ }
+ else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich ) )
+ rSet.ClearItem( nWhich );
+ else
+ rSet.Put( rOldSet.Get( nWhich ) );
+
+ // Modispezifische Controls auswerten
+
+ switch ( eMode )
+ {
+ case SVX_PAGE_MODE_CENTER:
+ {
+ if ( aHorzBox.IsChecked() != aHorzBox.GetSavedValue() )
+ {
+ SfxBoolItem aHorz( GetWhich( SID_ATTR_PAGE_EXT1 ),
+ aHorzBox.IsChecked() );
+ rSet.Put( aHorz );
+ bModified |= TRUE;
+ }
+
+ if ( aVertBox.IsChecked() != aVertBox.GetSavedValue() )
+ {
+ SfxBoolItem aVert( GetWhich( SID_ATTR_PAGE_EXT2 ),
+ aVertBox.IsChecked() );
+ rSet.Put( aVert );
+ bModified |= TRUE;
+ }
+ break;
+ }
+
+ case SVX_PAGE_MODE_PRESENTATION:
+ {
+ // immer putten, damit Draw das auswerten kann
+ rSet.Put( SfxBoolItem( GetWhich( SID_ATTR_PAGE_EXT1 ),
+ aAdaptBox.IsChecked() ) );
+ bModified |= TRUE;
+
+ if( aHorzBox.IsChecked() != aHorzBox.GetSavedValue() )
+ {
+ SfxBoolItem aHorz( GetWhich( SID_ATTR_PAGE_EXT2 ),
+ aHorzBox.IsChecked() );
+ rSet.Put( aHorz );
+ bModified |= TRUE;
+ }
+
+ break;
+ }
+
+ // bei Standard tut sich nichts
+ }
+
+ if(aRegisterCB.IsVisible() &&
+ (aRegisterCB.IsChecked() || aRegisterCB.GetSavedValue() != aRegisterCB.IsChecked()))
+ {
+ const SfxBoolItem& rRegItem = (const SfxBoolItem&)rOldSet.Get(SID_SWREGISTER_MODE);
+ SfxBoolItem* pRegItem = (SfxBoolItem*)rRegItem.Clone();
+ BOOL bCheck = aRegisterCB.IsChecked();
+ pRegItem->SetValue(bCheck);
+ rSet.Put(*pRegItem);
+ bModified |= TRUE;
+ if(bCheck)
+ {
+ bModified |= TRUE;
+ rSet.Put(SfxStringItem(SID_SWREGISTER_COLLECTION,
+ aRegisterLB.GetSelectEntry()));
+ }
+ delete pRegItem;
+ }
+
+
+ return bModified;
+}
+
+// -----------------------------------------------------------------------
+
+IMPL_LINK( SvxPageDescPage, LayoutHdl_Impl, ListBox *, EMPTYARG )
+{
+ // innen au\sen umschalten
+ const USHORT nPos = PosToPageUsage_Impl( aLayoutBox.GetSelectEntryPos() );
+
+ if ( nPos == SVX_PAGE_MIRROR )
+ {
+ if ( aLeftMarginLbl.GetText() != aInsideText )
+ aLeftMarginLbl.SetText( aInsideText );
+
+ if ( aRightMarginLbl.GetText() != aOutsideText )
+ aRightMarginLbl.SetText( aOutsideText );
+ }
+ else
+ {
+ if ( aLeftMarginLbl.GetText() != aLeftText )
+ aLeftMarginLbl.SetText( aLeftText );
+
+ if ( aRightMarginLbl.GetText() != aRightText )
+ aRightMarginLbl.SetText( aRightText );
+ }
+ UpdateExample_Impl();
+ return 0;
+}
+
+// -----------------------------------------------------------------------
+
+IMPL_LINK( SvxPageDescPage, PaperBinHdl_Impl, ListBox *, EMPTYARG )
+{
+ if ( aPaperTrayBox.GetEntryCount() > 1 )
+ // schon gef"ullt
+ return 0;
+ Printer* pDefPrinter = 0;
+ BOOL bPrinterDel = FALSE;
+
+ if ( SfxViewShell::Current() && SfxViewShell::Current()->GetPrinter() )
+ pDefPrinter = (Printer*)SfxViewShell::Current()->GetPrinter();
+ else
+ {
+ pDefPrinter = new Printer;
+ bPrinterDel = TRUE;
+ }
+
+ // Schacht-Box initialisieren
+ String aOldName = aPaperTrayBox.GetSelectEntry();
+ aPaperTrayBox.SetUpdateMode( FALSE );
+ aPaperTrayBox.Clear();
+ USHORT nEntryPos = aPaperTrayBox.InsertEntry(
+ SVX_RESSTR( RID_SVXSTR_PAPERBIN_SETTINGS ) );
+ aPaperTrayBox.SetEntryData( nEntryPos,
+ (void*)(ULONG)PAPERBIN_PRINTER_SETTINGS );
+ String aPaperBin( SVX_RES( RID_SVXSTR_PAPERBIN ) );
+ USHORT nBinCount = pDefPrinter->GetPaperBinCount();
+
+ for ( USHORT i = 0; i < nBinCount; ++i )
+ {
+ String aName = pDefPrinter->GetPaperBinName(i);
+
+ if ( !aName.Len() )
+ {
+ aName = aPaperBin;
+ aName.Append( sal_Unicode(' ') );
+ aName.Append( UniString::CreateFromInt32( i+1 ) );
+ }
+ nEntryPos = aPaperTrayBox.InsertEntry( aName );
+ aPaperTrayBox.SetEntryData( nEntryPos, (void*)(ULONG)i );
+ }
+ aPaperTrayBox.SelectEntry( aOldName );
+ aPaperTrayBox.SetUpdateMode( TRUE );
+
+ if ( bPrinterDel )
+ delete pDefPrinter;
+ return 0;
+}
+
+// -----------------------------------------------------------------------
+
+IMPL_LINK( SvxPageDescPage, PaperSizeSelect_Impl, ListBox *, pBox )
+{
+ const USHORT nPos = pBox->GetSelectEntryPos();
+ SvxPaper ePaper = (SvxPaper)(ULONG)aPaperSizeBox.GetEntryData( nPos );
+
+ if ( ePaper != SVX_PAPER_USER )
+ {
+ Size aSize( SvxPaperInfo::GetPaperSize( ePaper ) );
+
+ if ( aLandscapeBtn.IsChecked() )
+ Swap( aSize );
+
+ if ( aSize.Height() < aPaperHeightEdit.GetMin( FUNIT_TWIP ) )
+ aPaperHeightEdit.SetMin(
+ aPaperHeightEdit.Normalize( aSize.Height() ), FUNIT_TWIP );
+ if ( aSize.Width() < aPaperWidthEdit.GetMin( FUNIT_TWIP ) )
+ aPaperWidthEdit.SetMin(
+ aPaperWidthEdit.Normalize( aSize.Width() ), FUNIT_TWIP );
+ SetMetricValue( aPaperHeightEdit, aSize.Height(), SFX_MAPUNIT_TWIP );
+ SetMetricValue( aPaperWidthEdit, aSize.Width(), SFX_MAPUNIT_TWIP );
+
+ // R"ander ggf. neu berechnen
+ CalcMargin_Impl();
+
+ RangeHdl_Impl( 0 );
+ UpdateExample_Impl();
+
+ if ( eMode == SVX_PAGE_MODE_PRESENTATION )
+ {
+ // Draw: bei Papierformat soll der Rand 1cm betragen
+ long nTmp = 0;
+ BOOL bScreen = ( SVX_PAPER_SCREEN == ePaper );
+
+ if ( !bScreen )
+ // bei Bildschirm keinen Rand
+ nTmp = 1; // entspr. 1cm
+
+ // Abfragen, ob fuer Raender 0 gesetzt ist:
+ if ( bScreen || aRightMarginEdit.GetValue() == 0 )
+ {
+ SetMetricValue( aRightMarginEdit, nTmp, SFX_MAPUNIT_CM );
+ if ( !bScreen &&
+ aRightMarginEdit.GetFirst() > aRightMarginEdit.GetValue() )
+ aRightMarginEdit.SetValue( aRightMarginEdit.GetFirst() );
+ }
+ if ( bScreen || aLeftMarginEdit.GetValue() == 0 )
+ {
+ SetMetricValue( aLeftMarginEdit, nTmp, SFX_MAPUNIT_CM );
+ if ( !bScreen &&
+ aLeftMarginEdit.GetFirst() > aLeftMarginEdit.GetValue() )
+ aLeftMarginEdit.SetValue( aLeftMarginEdit.GetFirst() );
+ }
+ if ( bScreen || aBottomMarginEdit.GetValue() == 0 )
+ {
+ SetMetricValue( aBottomMarginEdit, nTmp, SFX_MAPUNIT_CM );
+ if ( !bScreen &&
+ aBottomMarginEdit.GetFirst() > aBottomMarginEdit.GetValue() )
+ aBottomMarginEdit.SetValue( aBottomMarginEdit.GetFirst() );
+ }
+ if ( bScreen || aTopMarginEdit.GetValue() == 0 )
+ {
+ SetMetricValue( aTopMarginEdit, nTmp, SFX_MAPUNIT_CM );
+ if ( !bScreen &&
+ aTopMarginEdit.GetFirst() > aTopMarginEdit.GetValue() )
+ aTopMarginEdit.SetValue( aTopMarginEdit.GetFirst() );
+ }
+ UpdateExample_Impl();
+ }
+ }
+ return 0;
+}
+
+// -----------------------------------------------------------------------
+
+IMPL_LINK( SvxPageDescPage, PaperSizeModify_Impl, Edit *, EMPTYARG )
+{
+ USHORT nWhich = GetWhich( SID_ATTR_LRSPACE );
+ SfxMapUnit eUnit = GetItemSet().GetPool()->GetMetric( nWhich );
+ Size aSize( GetCoreValue( aPaperWidthEdit, eUnit ),
+ GetCoreValue( aPaperHeightEdit, eUnit ) );
+ SvxPaper ePaper = SvxPaperInfo::GetPaper( aSize, (MapUnit)eUnit, TRUE );
+ USHORT nEntryCount = aPaperSizeBox.GetEntryCount();
+
+ for ( USHORT i = 0; i < nEntryCount; ++i )
+ {
+ SvxPaper eTmp = (SvxPaper)(ULONG)aPaperSizeBox.GetEntryData(i);
+
+ if ( eTmp == ePaper )
+ {
+ aPaperSizeBox.SelectEntryPos(i);
+ break;
+ }
+ }
+ UpdateExample_Impl();
+ return 0;
+}
+
+// -----------------------------------------------------------------------
+
+IMPL_LINK( SvxPageDescPage, SwapOrientation_Impl, RadioButton *, pBtn )
+{
+ if ( !bLandscape && pBtn == &aLandscapeBtn ||
+ bLandscape && pBtn == &aPortraitBtn )
+ {
+ bLandscape = aLandscapeBtn.IsChecked();
+
+ const long lWidth = GetCoreValue( aPaperWidthEdit, SFX_MAPUNIT_TWIP );
+ const long lHeight = GetCoreValue( aPaperHeightEdit, SFX_MAPUNIT_TWIP );
+
+ // swappen
+ SetMetricValue( aPaperWidthEdit, lHeight, SFX_MAPUNIT_TWIP );
+ SetMetricValue( aPaperHeightEdit, lWidth, SFX_MAPUNIT_TWIP );
+
+ // R"ander ggf. neu berechnen
+ CalcMargin_Impl();
+
+ PaperSizeSelect_Impl( &aPaperSizeBox );
+ RangeHdl_Impl( 0 );
+ SwapFirstValues_Impl( bBorderModified );
+ UpdateExample_Impl();
+ }
+ return 0;
+}
+
+// -----------------------------------------------------------------------
+
+void SvxPageDescPage::SwapFirstValues_Impl( FASTBOOL bSet )
+{
+ Printer* pDefPrinter = 0;
+ BOOL bPrinterDel = FALSE;
+
+ if ( SfxViewShell::Current() && SfxViewShell::Current()->GetPrinter() )
+ pDefPrinter = (Printer*)SfxViewShell::Current()->GetPrinter();
+ else
+ {
+ pDefPrinter = new Printer;
+ bPrinterDel = TRUE;
+ }
+
+ MapMode aOldMode = pDefPrinter->GetMapMode();
+ Orientation eOri = ORIENTATION_PORTRAIT;
+
+ if ( bLandscape )
+ eOri = ORIENTATION_LANDSCAPE;
+ Orientation eOldOri = pDefPrinter->GetOrientation();
+ pDefPrinter->SetOrientation( eOri );
+ pDefPrinter->SetMapMode( MAP_TWIP );
+
+ // First- und Last-Werte f"ur die R"ander setzen
+ Size aPaperSize = pDefPrinter->GetPaperSize();
+ Size aPrintSize = pDefPrinter->GetOutputSize();
+ /*
+ * einen Punkt ( 0,0 ) in logische Koordinaten zu konvertieren,
+ * sieht aus wie Unsinn; ist aber sinnvoll, wenn der Ursprung des
+ * Koordinatensystems verschoben ist.
+ */
+ Point aPrintOffset = pDefPrinter->GetPageOffset() -
+ pDefPrinter->PixelToLogic( Point() );
+ pDefPrinter->SetMapMode( aOldMode );
+ pDefPrinter->SetOrientation( eOldOri );
+
+ if ( bPrinterDel )
+ delete pDefPrinter;
+
+ long nSetL = aLeftMarginEdit.Denormalize(
+ aLeftMarginEdit.GetValue( FUNIT_TWIP ) );
+ long nSetR = aRightMarginEdit.Denormalize(
+ aRightMarginEdit.GetValue( FUNIT_TWIP ) );
+ long nSetT = aTopMarginEdit.Denormalize(
+ aTopMarginEdit.GetValue( FUNIT_TWIP ) );
+ long nSetB = aBottomMarginEdit.Denormalize(
+ aBottomMarginEdit.GetValue( FUNIT_TWIP ) );
+
+ long nOffset = !aPrintOffset.X() && !aPrintOffset.X() ? 0 : PRINT_OFFSET;
+ long nNewL = aPrintOffset.X();
+ long nNewR =
+ aPaperSize.Width() - aPrintSize.Width() - aPrintOffset.X() + nOffset;
+ long nNewT = aPrintOffset.Y();
+ long nNewB =
+ aPaperSize.Height() - aPrintSize.Height() - aPrintOffset.Y() + nOffset;
+
+ aLeftMarginEdit.SetFirst( aLeftMarginEdit.Normalize( nNewL ), FUNIT_TWIP );
+ nFirstLeftMargin = aLeftMarginEdit.GetFirst();
+ aRightMarginEdit.SetFirst( aRightMarginEdit.Normalize( nNewR ), FUNIT_TWIP );
+ nFirstRightMargin = aRightMarginEdit.GetFirst();
+ aTopMarginEdit.SetFirst( aTopMarginEdit.Normalize( nNewT ), FUNIT_TWIP );
+ nFirstTopMargin = aTopMarginEdit.GetFirst();
+ aBottomMarginEdit.SetFirst( aBottomMarginEdit.Normalize( nNewB ), FUNIT_TWIP );
+ nFirstBottomMargin = aBottomMarginEdit.GetFirst();
+
+ if ( bSet )
+ {
+ // ggf. auch die Werte umsetzen,
+ if ( nSetL < nNewL )
+ aLeftMarginEdit.SetValue( aLeftMarginEdit.Normalize( nNewL ),
+ FUNIT_TWIP );
+ if ( nSetR < nNewR )
+ aRightMarginEdit.SetValue( aRightMarginEdit.Normalize( nNewR ),
+ FUNIT_TWIP );
+ if ( nSetT < nNewT )
+ aTopMarginEdit.SetValue( aTopMarginEdit.Normalize( nNewT ),
+ FUNIT_TWIP );
+ if ( nSetB < nNewB )
+ aBottomMarginEdit.SetValue( aBottomMarginEdit.Normalize( nNewB ),
+ FUNIT_TWIP );
+ }
+}
+
+// -----------------------------------------------------------------------
+
+IMPL_LINK_INLINE_START( SvxPageDescPage, BorderModify_Impl, MetricField *, EMPTYARG )
+{
+ if ( !bBorderModified )
+ bBorderModified = TRUE;
+ UpdateExample_Impl();
+ return 0;
+}
+IMPL_LINK_INLINE_END( SvxPageDescPage, BorderModify_Impl, MetricField *, EMPTYARG )
+
+// -----------------------------------------------------------------------
+
+void SvxPageDescPage::UpdateExample_Impl()
+{
+ // Size
+ Size aSize( GetCoreValue( aPaperWidthEdit, SFX_MAPUNIT_TWIP ),
+ GetCoreValue( aPaperHeightEdit, SFX_MAPUNIT_TWIP ) );
+
+ aBspWin.SetSize( aSize );
+
+ // R"ander
+ aBspWin.SetTop( GetCoreValue( aTopMarginEdit, SFX_MAPUNIT_TWIP ) );
+ aBspWin.SetBottom( GetCoreValue( aBottomMarginEdit, SFX_MAPUNIT_TWIP ) );
+ aBspWin.SetLeft( GetCoreValue( aLeftMarginEdit, SFX_MAPUNIT_TWIP ) );
+ aBspWin.SetRight( GetCoreValue( aRightMarginEdit, SFX_MAPUNIT_TWIP ) );
+
+ // Layout
+ aBspWin.SetUsage( PosToPageUsage_Impl( aLayoutBox.GetSelectEntryPos() ) );
+ aBspWin.Invalidate();
+}
+
+// -----------------------------------------------------------------------
+
+void SvxPageDescPage::ResetBackground_Impl( const SfxItemSet& rSet )
+{
+ USHORT nWhich = GetWhich( SID_ATTR_PAGE_HEADERSET );
+
+ if ( rSet.GetItemState( nWhich, FALSE ) == SFX_ITEM_SET )
+ {
+ const SvxSetItem& rSetItem =
+ (const SvxSetItem&)rSet.Get( nWhich, FALSE );
+ const SfxItemSet& rTmpSet = rSetItem.GetItemSet();
+ const SfxBoolItem& rOn =
+ (const SfxBoolItem&)rTmpSet.Get( GetWhich( SID_ATTR_PAGE_ON ) );
+
+ if ( rOn.GetValue() )
+ {
+ nWhich = GetWhich( SID_ATTR_BRUSH );
+
+ if ( rTmpSet.GetItemState( nWhich ) == SFX_ITEM_SET )
+ {
+ const SvxBrushItem& rItem =
+ (const SvxBrushItem&)rTmpSet.Get( nWhich );
+ aBspWin.SetHdColor( rItem.GetColor() );
+ }
+ nWhich = GetWhich( SID_ATTR_BORDER_OUTER );
+
+ if ( rTmpSet.GetItemState( nWhich ) == SFX_ITEM_SET )
+ {
+ const SvxBoxItem& rItem =
+ (const SvxBoxItem&)rTmpSet.Get( nWhich );
+ aBspWin.SetHdBorder( rItem );
+ }
+ }
+ }
+
+ nWhich = GetWhich( SID_ATTR_PAGE_FOOTERSET );
+
+ if ( rSet.GetItemState( nWhich, FALSE ) == SFX_ITEM_SET )
+ {
+ const SvxSetItem& rSetItem =
+ (const SvxSetItem&)rSet.Get( nWhich, FALSE );
+ const SfxItemSet& rTmpSet = rSetItem.GetItemSet();
+ const SfxBoolItem& rOn =
+ (const SfxBoolItem&)rTmpSet.Get( GetWhich( SID_ATTR_PAGE_ON ) );
+
+ if ( rOn.GetValue() )
+ {
+ nWhich = GetWhich( SID_ATTR_BRUSH );
+
+ if ( rTmpSet.GetItemState( nWhich ) == SFX_ITEM_SET )
+ {
+ const SvxBrushItem& rItem =
+ (const SvxBrushItem&)rTmpSet.Get( nWhich );
+ aBspWin.SetFtColor( rItem.GetColor() );
+ }
+ nWhich = GetWhich( SID_ATTR_BORDER_OUTER );
+
+ if ( rTmpSet.GetItemState( nWhich ) == SFX_ITEM_SET )
+ {
+ const SvxBoxItem& rItem =
+ (const SvxBoxItem&)rTmpSet.Get( nWhich );
+ aBspWin.SetFtBorder( rItem );
+ }
+ }
+ }
+
+ const SfxPoolItem* pItem = GetItem( rSet, SID_ATTR_BRUSH );
+
+ if ( pItem )
+ {
+ aBspWin.SetColor( ( (const SvxBrushItem*)pItem )->GetColor() );
+ const Graphic* pGrf = ( (const SvxBrushItem*)pItem )->GetGraphic();
+
+ if ( pGrf )
+ {
+ Bitmap aBitmap = pGrf->GetBitmap();
+ aBspWin.SetBitmap( &aBitmap );
+ }
+ else
+ aBspWin.SetBitmap( NULL );
+ }
+
+ pItem = GetItem( rSet, SID_ATTR_BORDER_OUTER );
+
+ if ( pItem )
+ aBspWin.SetBorder( (SvxBoxItem&)*pItem );
+}
+
+// -----------------------------------------------------------------------
+
+void SvxPageDescPage::InitHeadFoot_Impl( const SfxItemSet& rSet )
+{
+ bLandscape = aLandscapeBtn.IsChecked();
+ const SfxPoolItem* pItem = GetItem( rSet, SID_ATTR_PAGE_SIZE );
+
+ if ( pItem )
+ aBspWin.SetSize( ( (const SvxSizeItem*)pItem )->GetSize() );
+
+ const SvxSetItem* pSetItem = 0;
+
+ // Kopfzeilen-Attribute auswerten
+
+ if ( SFX_ITEM_SET ==
+ rSet.GetItemState( GetWhich( SID_ATTR_PAGE_HEADERSET ),
+ FALSE, (const SfxPoolItem**)&pSetItem ) )
+ {
+ const SfxItemSet& rHeaderSet = pSetItem->GetItemSet();
+ const SfxBoolItem& rHeaderOn =
+ (const SfxBoolItem&)rHeaderSet.Get( GetWhich( SID_ATTR_PAGE_ON ) );
+
+ if ( rHeaderOn.GetValue() )
+ {
+ const SvxSizeItem& rSize = (const SvxSizeItem&)
+ rHeaderSet.Get( GetWhich( SID_ATTR_PAGE_SIZE ) );
+ const SvxULSpaceItem& rUL = (const SvxULSpaceItem&)
+ rHeaderSet.Get( GetWhich( SID_ATTR_ULSPACE ) );
+ long nDist = rUL.GetLower();
+ aBspWin.SetHdHeight( rSize.GetSize().Height() - nDist );
+ aBspWin.SetHdDist( nDist );
+ const SvxLRSpaceItem& rLR = (const SvxLRSpaceItem&)
+ rHeaderSet.Get( GetWhich( SID_ATTR_LRSPACE ) );
+ aBspWin.SetHdLeft( rLR.GetLeft() );
+ aBspWin.SetHdRight( rLR.GetRight() );
+ aBspWin.SetHeader( TRUE );
+ }
+ else
+ aBspWin.SetHeader( FALSE );
+
+ // im Beispiel Hintergrund und Umrandung anzeigen
+ USHORT nWhich = GetWhich( SID_ATTR_BRUSH );
+
+ if ( rHeaderSet.GetItemState( nWhich ) >= SFX_ITEM_AVAILABLE )
+ {
+ const SvxBrushItem& rItem =
+ (const SvxBrushItem&)rHeaderSet.Get( nWhich );
+ aBspWin.SetHdColor( rItem.GetColor() );
+ }
+ nWhich = GetWhich( SID_ATTR_BORDER_OUTER );
+
+ if ( rHeaderSet.GetItemState( nWhich ) >= SFX_ITEM_AVAILABLE )
+ {
+ const SvxBoxItem& rItem =
+ (const SvxBoxItem&)rHeaderSet.Get( nWhich );
+ aBspWin.SetHdBorder( rItem );
+ }
+ }
+
+ // Fusszeilen-Attribute auswerten
+
+ if ( SFX_ITEM_SET ==
+ rSet.GetItemState( GetWhich( SID_ATTR_PAGE_FOOTERSET ),
+ FALSE, (const SfxPoolItem**)&pSetItem ) )
+ {
+ const SfxItemSet& rFooterSet = pSetItem->GetItemSet();
+ const SfxBoolItem& rFooterOn =
+ (const SfxBoolItem&)rFooterSet.Get( GetWhich( SID_ATTR_PAGE_ON ) );
+
+ if ( rFooterOn.GetValue() )
+ {
+ const SvxSizeItem& rSize = (const SvxSizeItem&)
+ rFooterSet.Get( GetWhich( SID_ATTR_PAGE_SIZE ) );
+ const SvxULSpaceItem& rUL = (const SvxULSpaceItem&)
+ rFooterSet.Get( GetWhich( SID_ATTR_ULSPACE ) );
+ long nDist = rUL.GetUpper();
+ aBspWin.SetFtHeight( rSize.GetSize().Height() - nDist );
+ aBspWin.SetFtDist( nDist );
+ const SvxLRSpaceItem& rLR = (const SvxLRSpaceItem&)
+ rFooterSet.Get( GetWhich( SID_ATTR_LRSPACE ) );
+ aBspWin.SetFtLeft( rLR.GetLeft() );
+ aBspWin.SetFtRight( rLR.GetRight() );
+ aBspWin.SetFooter( TRUE );
+ }
+ else
+ aBspWin.SetFooter( FALSE );
+
+ // im Beispiel Hintergrund und Umrandung anzeigen
+ USHORT nWhich = GetWhich( SID_ATTR_BRUSH );
+
+ if ( rFooterSet.GetItemState( nWhich ) >= SFX_ITEM_AVAILABLE )
+ {
+ const SvxBrushItem& rItem =
+ (const SvxBrushItem&)rFooterSet.Get( nWhich );
+ aBspWin.SetFtColor( rItem.GetColor() );
+ }
+ nWhich = GetWhich( SID_ATTR_BORDER_OUTER );
+
+ if ( rFooterSet.GetItemState( nWhich ) >= SFX_ITEM_AVAILABLE )
+ {
+ const SvxBoxItem& rItem =
+ (const SvxBoxItem&)rFooterSet.Get( nWhich );
+ aBspWin.SetFtBorder( rItem );
+ }
+ }
+}
+
+// -----------------------------------------------------------------------
+
+void SvxPageDescPage::ActivatePage( const SfxItemSet& rSet )
+{
+ InitHeadFoot_Impl( rSet );
+ ResetBackground_Impl( rSet );
+ RangeHdl_Impl( 0 );
+}
+
+// -----------------------------------------------------------------------
+
+int SvxPageDescPage::DeactivatePage( SfxItemSet* pSet )
+{
+ // Abfrage, ob die Seitenr"ander ausserhalb des Druckbereichs liegen
+ // Wenn nicht, dann den Anwender fragen, ob sie "ubernommen werden sollen.
+ // Wenn nicht, dann auf der TabPage bleiben.
+ USHORT nPos = aPaperSizeBox.GetSelectEntryPos();
+ SvxPaper ePaper = (SvxPaper)(ULONG)aPaperSizeBox.GetEntryData( nPos );
+
+ if ( ePaper != SVX_PAPER_SCREEN && (
+ aLeftMarginEdit.GetValue() < nFirstLeftMargin ||
+ aRightMarginEdit.GetValue() < nFirstRightMargin ||
+ aTopMarginEdit.GetValue() < nFirstTopMargin ||
+ aBottomMarginEdit.GetValue() < nFirstBottomMargin ||
+ aLeftMarginEdit.GetValue() > nLastLeftMargin ||
+ aRightMarginEdit.GetValue() > nLastRightMargin ||
+ aTopMarginEdit.GetValue() > nLastTopMargin ||
+ aBottomMarginEdit.GetValue() > nLastBottomMargin ) )
+ {
+ if ( QueryBox( this, WB_YES_NO | WB_DEF_NO, aPrintRangeQueryText ).Execute() == RET_NO )
+ {
+ MetricField* pField = NULL;
+ if ( aLeftMarginEdit.GetValue() < nFirstLeftMargin )
+ {
+ aLeftMarginEdit.SetValue( nFirstLeftMargin );
+ pField = &aLeftMarginEdit;
+ }
+ if ( aRightMarginEdit.GetValue() < nFirstRightMargin )
+ {
+ aRightMarginEdit.SetValue( nFirstRightMargin );
+ if ( !pField )
+ pField = &aRightMarginEdit;
+ }
+ if ( aTopMarginEdit.GetValue() < nFirstTopMargin )
+ {
+ aTopMarginEdit.SetValue( nFirstTopMargin );
+ if ( !pField )
+ pField = &aTopMarginEdit;
+ }
+ if ( aBottomMarginEdit.GetValue() < nFirstBottomMargin )
+ {
+ aBottomMarginEdit.SetValue( nFirstBottomMargin );
+ if ( !pField )
+ pField = &aBottomMarginEdit;
+ }
+ if ( aLeftMarginEdit.GetValue() > nLastLeftMargin )
+ {
+ aLeftMarginEdit.SetValue( nLastLeftMargin );
+ if ( !pField )
+ pField = &aLeftMarginEdit;
+ }
+ if ( aRightMarginEdit.GetValue() > nLastRightMargin )
+ {
+ aRightMarginEdit.SetValue( nLastRightMargin );
+ if ( !pField )
+ pField = &aRightMarginEdit;
+ }
+ if ( aTopMarginEdit.GetValue() > nLastTopMargin )
+ {
+ aTopMarginEdit.SetValue( nLastTopMargin );
+ if ( !pField )
+ pField = &aTopMarginEdit;
+ }
+ if ( aBottomMarginEdit.GetValue() > nLastBottomMargin )
+ {
+ aBottomMarginEdit.SetValue( nLastBottomMargin );
+ if ( !pField )
+ pField = &aBottomMarginEdit;
+ }
+ if ( pField )
+ pField->GrabFocus();
+ UpdateExample_Impl();
+ return KEEP_PAGE;
+ }
+ }
+
+ if ( pSet )
+ {
+ FillItemSet( *pSet );
+
+ // ggf. hoch/quer putten
+ USHORT nWh = GetWhich( SID_ATTR_PAGE_SIZE );
+ SfxMapUnit eUnit = GetItemSet().GetPool()->GetMetric( nWh );
+ Size aSize( GetCoreValue( aPaperWidthEdit, eUnit ),
+ GetCoreValue( aPaperHeightEdit, eUnit ) );
+
+ // putten, wenn aktuelle Gr"o/se unterschiedlich zum Wert in pSet
+ const SvxSizeItem* pSize =
+ (const SvxSizeItem*)GetItem( *pSet, SID_ATTR_PAGE_SIZE );
+
+ if ( aSize.Width() && ( !pSize || pSize->GetSize() != aSize ) )
+ pSet->Put( SvxSizeItem( nWh, aSize ) );
+ }
+ return LEAVE_PAGE;
+}
+
+// -----------------------------------------------------------------------
+
+IMPL_LINK( SvxPageDescPage, RangeHdl_Impl, Edit *, EMPTYARG )
+{
+ // Aktuelle Header-Breite/H"ohe aus dem Bsp
+ long nHHeight = aBspWin.GetHdHeight();
+ long nHDist = aBspWin.GetHdDist();
+
+ // Aktuelle Footer-Breite/H"ohe aus dem Bsp
+ long nFHeight = aBspWin.GetFtHeight();
+ long nFDist = aBspWin.GetFtDist();
+
+ // Aktuelle Header/Footer-R"ander aus dem Bsp
+ long nHFLeft = Max( aBspWin.GetHdLeft(), aBspWin.GetFtLeft() );
+ long nHFRight = Max( aBspWin.GetHdRight(), aBspWin.GetFtRight() );
+
+ // Aktuelle Werte der Seitenr"ander
+ long nBT = aTopMarginEdit.Denormalize(aTopMarginEdit.GetValue(FUNIT_TWIP));
+ long nBB = aBottomMarginEdit.Denormalize(aBottomMarginEdit.GetValue(FUNIT_TWIP));
+ long nBL = aLeftMarginEdit.Denormalize(aLeftMarginEdit.GetValue(FUNIT_TWIP));
+ long nBR = aRightMarginEdit.Denormalize(aRightMarginEdit.GetValue(FUNIT_TWIP));
+
+ // Breite Umrandung der Seite berechnen
+ const SfxItemSet* pSet = &GetItemSet();
+ Size aBorder;
+
+ if ( pSet->GetItemState( GetWhich(SID_ATTR_BORDER_SHADOW) ) >=
+ SFX_ITEM_AVAILABLE &&
+ pSet->GetItemState( GetWhich(SID_ATTR_BORDER_OUTER) ) >=
+ SFX_ITEM_AVAILABLE )
+ {
+ aBorder = ( GetMinBorderSpace_Impl(
+ (const SvxShadowItem&)pSet->Get(GetWhich(SID_ATTR_BORDER_SHADOW)),
+ (const SvxBoxItem&)pSet->Get(GetWhich(SID_ATTR_BORDER_OUTER))));
+ }
+
+ long nH = aPaperHeightEdit.Denormalize(aPaperHeightEdit.GetValue(FUNIT_TWIP));
+ long nW = aPaperWidthEdit.Denormalize(aPaperWidthEdit.GetValue(FUNIT_TWIP));
+
+ // Grenzen Papier
+ // Maximum liegt bei 54cm
+ //
+ long nMin = nHHeight + nHDist + nFDist + nFHeight + nBT + nBB +
+ MINBODY + aBorder.Height();
+ aPaperHeightEdit.SetMin(aPaperHeightEdit.Normalize(nMin), FUNIT_TWIP);
+
+ nMin = MINBODY + nBL + nBR + aBorder.Width();
+ aPaperWidthEdit.SetMin(aPaperWidthEdit.Normalize(nMin), FUNIT_TWIP);
+
+ // Falls sich die Papiergr"o\se ge"adert hat
+ nH = aPaperHeightEdit.Denormalize(aPaperHeightEdit.GetValue(FUNIT_TWIP));
+ nW = aPaperWidthEdit.Denormalize(aPaperWidthEdit.GetValue(FUNIT_TWIP));
+
+ // Top
+ long nMax = nH - nBB - aBorder.Height() - MINBODY -
+ nFDist - nFHeight - nHDist - nHHeight;
+
+ aTopMarginEdit.SetMax(aTopMarginEdit.Normalize(nMax), FUNIT_TWIP);
+
+ // Bottom
+ nMax = nH - nBT - aBorder.Height() - MINBODY -
+ nFDist - nFHeight - nHDist - nHHeight;
+
+ aBottomMarginEdit.SetMax(aTopMarginEdit.Normalize(nMax), FUNIT_TWIP);
+
+ // Left
+ nMax = nW - nBR - MINBODY - aBorder.Width() - nHFLeft - nHFRight;
+ aLeftMarginEdit.SetMax(aLeftMarginEdit.Normalize(nMax), FUNIT_TWIP);
+
+ // Right
+ nMax = nW - nBL - MINBODY - aBorder.Width() - nHFLeft - nHFRight;
+ aRightMarginEdit.SetMax(aRightMarginEdit.Normalize(nMax), FUNIT_TWIP);
+ return 0;
+}
+
+// -----------------------------------------------------------------------
+
+void SvxPageDescPage::CalcMargin_Impl()
+{
+ // Aktuelle Werte der Seitenr"ander
+ long nBT = GetCoreValue( aTopMarginEdit, SFX_MAPUNIT_TWIP );
+ long nBB = GetCoreValue( aBottomMarginEdit, SFX_MAPUNIT_TWIP );
+
+ long nBL = GetCoreValue( aLeftMarginEdit, SFX_MAPUNIT_TWIP );
+ long nBR = GetCoreValue( aRightMarginEdit, SFX_MAPUNIT_TWIP );
+
+ long nH = GetCoreValue( aPaperHeightEdit, SFX_MAPUNIT_TWIP );
+ long nW = GetCoreValue( aPaperWidthEdit, SFX_MAPUNIT_TWIP );
+
+ long nWidth = nBL + nBR + MINBODY;
+ long nHeight = nBT + nBB + MINBODY;
+
+ if ( nWidth > nW || nHeight > nH )
+ {
+ if ( nWidth > nW )
+ {
+ long nTmp = nBL <= nBR ? nBR : nBL;
+ nTmp -= nWidth - nW;
+
+ if ( nBL <= nBR )
+ SetMetricValue( aRightMarginEdit, nTmp, SFX_MAPUNIT_TWIP );
+ else
+ SetMetricValue( aLeftMarginEdit, nTmp, SFX_MAPUNIT_TWIP );
+ }
+
+ if ( nHeight > nH )
+ {
+ long nTmp = nBT <= nBB ? nBB : nBT;
+ nTmp -= nHeight - nH;
+
+ if ( nBT <= nBB )
+ SetMetricValue( aBottomMarginEdit, nTmp, SFX_MAPUNIT_TWIP );
+ else
+ SetMetricValue( aTopMarginEdit, nTmp, SFX_MAPUNIT_TWIP );
+ }
+ }
+}
+
+// -----------------------------------------------------------------------
+
+IMPL_LINK_INLINE_START( SvxPageDescPage, CenterHdl_Impl, CheckBox *, EMPTYARG )
+{
+ // Wird im Draw zweckentfremdet
+ if( eMode != SVX_PAGE_MODE_PRESENTATION )
+ {
+ aBspWin.SetHorz( aHorzBox.IsChecked() );
+ aBspWin.SetVert( aVertBox.IsChecked() );
+ UpdateExample_Impl();
+ }
+ return 0;
+}
+IMPL_LINK_INLINE_END( SvxPageDescPage, CenterHdl_Impl, CheckBox *, EMPTYARG )
+
+// -----------------------------------------------------------------------
+
+void SvxPageDescPage::SetCollectionList(const List* pList)
+{
+ sStandardRegister = *(String*)pList->GetObject(0);
+ for( USHORT i = 1; i < pList->Count(); i++ )
+ {
+ aRegisterLB.InsertEntry(*(String*)pList->GetObject(i));
+ }
+
+ aPageName .Hide();
+ aExtraFrm .Hide();
+ aRegisterCB .Show();
+ aRegisterFT .Show();
+ aRegisterLB.Show();
+ aRegisterGB .Show();
+ aRegisterCB.SetClickHdl(LINK(this, SvxPageDescPage, RegisterModify));
+}
+
+// -----------------------------------------------------------------------
+
+IMPL_LINK( SvxPageDescPage, RegisterModify, CheckBox*, pBox )
+{
+ BOOL bEnable = FALSE;
+ if(pBox->IsChecked())
+ {
+ bEnable = TRUE;
+ if(USHRT_MAX == aRegisterLB.GetSelectEntryPos())
+ aRegisterLB.SelectEntry(sStandardRegister);
+ }
+ aRegisterFT.Enable( bEnable );
+ aRegisterLB.Enable( bEnable );
+ return 0;
+}
+
+