/************************************************************** * * 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. * *************************************************************/ #if !TEST_LAYOUT // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_svx.hxx" #endif /* !TEST_LAYOUT */ #ifdef SVX_DLLIMPLEMENTATION #undef SVX_DLLIMPLEMENTATION #endif // include --------------------------------------------------------------- #if TEST_LAYOUT #include #endif /* TEST_LAYOUT */ #include #include #include #include #include #define _SVX_ZOOM_CXX #include #if !TEST_LAYOUT #include "zoom.hrc" #endif /* !TEST_LAYOUT */ #include "zoom.hxx" #if TEST_LAYOUT #define SVX_ZOOM_OPTIMAL "Zoom optimal" #define SVX_ZOOM_PAGEWIDTH "Zoom page width" #define SVX_ZOOM_WHOLEPAGE "Zoom whole page" struct SvxZoomItem { void SetType( char const* s ) { fputs( s, stderr ); } void SetValue( int n ) { fprintf( stderr, "Zoom factor: %d\n", int( n ) ); } }; #define SfxPoolItem LAYOUT_SfxPoolItem class LAYOUT_SfxPoolItem { }; struct SvxViewLayoutItem : public LAYOUT_SfxPoolItem { bool IsBookMode() { return false; } USHORT GetValue() { return 0; } void SetValue( int n ) { fprintf( stderr, "Zoom factor: %d\n", int( n ) ); } void SetBookMode( bool ) { } #if 0 // needed for real SfxPoolItem int operator==( const SfxPoolItem& ) const { return 0; } SfxPoolItem* Clone( SfxItemPool* ) const { return 0; } #endif }; #else /* !TEST_LAYOUT */ #include #include #include #endif /* !TEST_LAYOUT */ #include "zoom_def.hxx" #include #if ENABLE_LAYOUT #undef SVX_RES #define SVX_RES(x) #x #undef SfxModalDialog #define SfxModalDialog( parent, id ) Dialog( parent, "zoom.xml", id ) #endif /* ENABLE_LAYOUT */ // static ---------------------------------------------------------------- static USHORT pRanges[] = { SID_ATTR_ZOOM, SID_ATTR_ZOOM, 0 }; #define SPECIAL_FACTOR ((USHORT)0xFFFF) // class SvxZoomDialog --------------------------------------------------- USHORT SvxZoomDialog::GetFactor() const { if ( a100Btn.IsChecked() ) return 100; if ( aUserBtn.IsChecked() ) return (USHORT)aUserEdit.GetValue(); else return SPECIAL_FACTOR; } // ----------------------------------------------------------------------- void SvxZoomDialog::SetFactor( USHORT nNewFactor, USHORT nBtnId ) { #if TEST_LAYOUT printf ("\t\t set factor %d\n", (int)nNewFactor); #endif /* !TEST_LAYOUT */ aUserEdit.Disable(); if ( !nBtnId ) { if ( nNewFactor == 100 ) { a100Btn.Check(); a100Btn.GrabFocus(); } else { aUserBtn.Check(); aUserEdit.Enable(); aUserEdit.SetValue( (long)nNewFactor ); aUserEdit.GrabFocus(); } } else { aUserEdit.SetValue( (long)nNewFactor ); if ( ZOOMBTN_OPTIMAL == nBtnId ) { aOptimalBtn.Check(); aOptimalBtn.GrabFocus(); } else if ( ZOOMBTN_PAGEWIDTH == nBtnId ) { aPageWidthBtn.Check(); aPageWidthBtn.GrabFocus(); } else if ( ZOOMBTN_WHOLEPAGE == nBtnId ) { aWholePageBtn.Check(); aWholePageBtn.GrabFocus(); } } } // ----------------------------------------------------------------------- void SvxZoomDialog::SetButtonText( USHORT nBtnId, const String& rNewTxt ) { switch ( nBtnId ) { case ZOOMBTN_OPTIMAL: // Optimal-Button aOptimalBtn.SetText( rNewTxt ); break; case ZOOMBTN_PAGEWIDTH: // Seitenbreite-Button aPageWidthBtn.SetText( rNewTxt ); break; case ZOOMBTN_WHOLEPAGE: // Ganze Seite-Button aWholePageBtn.SetText( rNewTxt ); break; default: DBG_ERROR( "wrong button number" ); } } // ----------------------------------------------------------------------- void SvxZoomDialog::HideButton( USHORT nBtnId ) { switch ( nBtnId ) { case ZOOMBTN_OPTIMAL: // Optimal-Button aOptimalBtn.Hide(); break; case ZOOMBTN_PAGEWIDTH: // Seitenbreite-Button aPageWidthBtn.Hide(); break; case ZOOMBTN_WHOLEPAGE: // Ganze Seite-Button aWholePageBtn.Hide(); break; default: DBG_ERROR( "Falsche Button-Nummer!!!" ); } } // ----------------------------------------------------------------------- void SvxZoomDialog::SetLimits( USHORT nMin, USHORT nMax ) { DBG_ASSERT( nMin < nMax, "invalid limits" ); aUserEdit.SetMin( nMin ); aUserEdit.SetFirst( nMin ); aUserEdit.SetMax( nMax ); aUserEdit.SetLast( nMax ); } // ----------------------------------------------------------------------- void SvxZoomDialog::SetSpinSize( USHORT nNewSpin ) { aUserEdit.SetSpinSize( nNewSpin ); } // ----------------------------------------------------------------------- #if TEST_LAYOUT SvxZoomDialog::SvxZoomDialog( Window* pParent ) : #else /* !TEST_LAYOUT */ SvxZoomDialog::SvxZoomDialog( Window* pParent, const SfxItemSet& rCoreSet ) : #endif /* !TEST_LAYOUT */ SfxModalDialog( pParent, SVX_RES( RID_SVXDLG_ZOOM ) ), aZoomFl ( this, SVX_RES( FL_ZOOM ) ), aOptimalBtn ( this, SVX_RES( BTN_OPTIMAL ) ), aWholePageBtn ( this, SVX_RES( BTN_WHOLE_PAGE ) ), aPageWidthBtn ( this, SVX_RES( BTN_PAGE_WIDTH ) ), a100Btn ( this, SVX_RES( BTN_100 ) ), aUserBtn ( this, SVX_RES( BTN_USER ) ), aUserEdit ( this, SVX_RES( ED_USER ) ), aViewLayoutFl ( this, SVX_RES( FL_VIEWLAYOUT ) ), aAutomaticBtn ( this, SVX_RES( BTN_AUTOMATIC ) ), aSingleBtn ( this, SVX_RES( BTN_SINGLE ) ), aColumnsBtn ( this, SVX_RES( BTN_COLUMNS ) ), aColumnsEdit ( this, SVX_RES( ED_COLUMNS ) ), aBookModeChk ( this, SVX_RES( CHK_BOOK ) ), aBottomFl ( this, SVX_RES( FL_BOTTOM ) ), aOKBtn ( this, SVX_RES( BTN_ZOOM_OK ) ), aCancelBtn ( this, SVX_RES( BTN_ZOOM_CANCEL ) ), aHelpBtn ( this, SVX_RES( BTN_ZOOM_HELP ) ), #if !TEST_LAYOUT rSet ( rCoreSet ), #endif /* !TEST_LAYOUT */ pOutSet ( NULL ), bModified ( FALSE ) { #if ENABLE_LAYOUT SetHelpId (SID_ATTR_ZOOM); #endif /* ENABLE_LAYOUT */ Link aLink = LINK( this, SvxZoomDialog, UserHdl ); a100Btn.SetClickHdl( aLink ); aOptimalBtn.SetClickHdl( aLink ); aPageWidthBtn.SetClickHdl( aLink ); aWholePageBtn.SetClickHdl( aLink ); aUserBtn.SetClickHdl( aLink ); Link aViewLayoutLink = LINK( this, SvxZoomDialog, ViewLayoutUserHdl ); aAutomaticBtn.SetClickHdl( aViewLayoutLink ); aSingleBtn.SetClickHdl( aViewLayoutLink ); aColumnsBtn.SetClickHdl( aViewLayoutLink ); Link aViewLayoutSpinLink = LINK( this, SvxZoomDialog, ViewLayoutSpinHdl ); aColumnsEdit.SetModifyHdl( aViewLayoutSpinLink ); Link aViewLayoutCheckLink = LINK( this, SvxZoomDialog, ViewLayoutCheckHdl ); aBookModeChk.SetClickHdl( aViewLayoutCheckLink ); aOKBtn.SetClickHdl( LINK( this, SvxZoomDialog, OKHdl ) ); aUserEdit.SetModifyHdl( LINK( this, SvxZoomDialog, SpinHdl ) ); // Default-Werte USHORT nValue = 100; USHORT nMin = 10; USHORT nMax = 1000; #if !TEST_LAYOUT // ggf. erst den alten Wert besorgen const SfxUInt16Item* pOldUserItem = 0; SfxObjectShell* pSh = SfxObjectShell::Current(); if ( pSh ) pOldUserItem = (const SfxUInt16Item*)pSh->GetItem( SID_ATTR_ZOOM_USER ); if ( pOldUserItem ) nValue = pOldUserItem->GetValue(); // UserEdit initialisieren if ( nMin > nValue ) nMin = nValue; if ( nMax < nValue ) nMax = nValue; #endif /* !TEST_LAYOUT */ aUserEdit.SetMin( nMin ); aUserEdit.SetFirst( nMin ); aUserEdit.SetMax( nMax ); aUserEdit.SetLast( nMax ); aUserEdit.SetValue( nValue ); #if TEST_LAYOUT USHORT nZoom = 100; SetFactor( nZoom ); #else /* !TEST_LAYOUT */ const SfxPoolItem& rItem = rSet.Get( rSet.GetPool()->GetWhich( SID_ATTR_ZOOM ) ); if ( rItem.ISA(SvxZoomItem) ) { const SvxZoomItem& rZoomItem = (const SvxZoomItem&)rItem; const USHORT nZoom = rZoomItem.GetValue(); const SvxZoomType eType = rZoomItem.GetType(); const USHORT nValSet = rZoomItem.GetValueSet(); USHORT nBtnId = 0; switch ( eType ) { case SVX_ZOOM_OPTIMAL: nBtnId = ZOOMBTN_OPTIMAL; break; case SVX_ZOOM_PAGEWIDTH: nBtnId = ZOOMBTN_PAGEWIDTH; break; case SVX_ZOOM_WHOLEPAGE: nBtnId = ZOOMBTN_WHOLEPAGE; break; case SVX_ZOOM_PERCENT: break; case SVX_ZOOM_PAGEWIDTH_NOBORDER: break; } if ( !(SVX_ZOOM_ENABLE_100 & nValSet) ) a100Btn.Disable(); if ( !(SVX_ZOOM_ENABLE_OPTIMAL & nValSet) ) aOptimalBtn.Disable(); if ( !(SVX_ZOOM_ENABLE_PAGEWIDTH & nValSet) ) aPageWidthBtn.Disable(); if ( !(SVX_ZOOM_ENABLE_WHOLEPAGE & nValSet) ) aWholePageBtn.Disable(); SetFactor( nZoom, nBtnId ); } else { const USHORT nZoom = ( (const SfxUInt16Item&)rItem ).GetValue(); SetFactor( nZoom ); } const SfxPoolItem* pViewLayoutItem = 0; if ( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_VIEWLAYOUT, FALSE, &pViewLayoutItem ) ) { const USHORT nColumns = static_cast(pViewLayoutItem)->GetValue(); const bool bBookMode = static_cast(pViewLayoutItem)->IsBookMode(); if ( 0 == nColumns ) { aAutomaticBtn.Check(); aColumnsEdit.SetValue( 2 ); aColumnsEdit.Disable(); aBookModeChk.Disable(); } else if ( 1 == nColumns) { aSingleBtn.Check(); aColumnsEdit.SetValue( 2 ); aColumnsEdit.Disable(); aBookModeChk.Disable(); } else { aColumnsBtn.Check(); if ( !bBookMode ) { aColumnsEdit.SetValue( nColumns ); if ( 0 != nColumns % 2 ) aBookModeChk.Disable(); } else { aColumnsEdit.SetValue( nColumns ); aBookModeChk.Check(); } } } else { // hide view layout related controls: aViewLayoutFl.Disable(); aAutomaticBtn.Disable(); aSingleBtn.Disable(); aColumnsBtn.Disable(); aColumnsEdit.Disable(); aBookModeChk.Disable(); } #endif /* !TEST_LAYOUT */ FreeResource(); } // ----------------------------------------------------------------------- SvxZoomDialog::~SvxZoomDialog() { delete pOutSet; pOutSet = 0; } // ----------------------------------------------------------------------- USHORT* SvxZoomDialog::GetRanges() { return pRanges; } // ----------------------------------------------------------------------- IMPL_LINK( SvxZoomDialog, UserHdl, RadioButton *, pBtn ) { #if TEST_LAYOUT fprintf( stderr, "SvxZoomDialog::UserHdl\n" ); #endif /* TEST_LAYOUT */ bModified |= TRUE; if ( pBtn == &aUserBtn ) { aUserEdit.Enable(); aUserEdit.GrabFocus(); } else aUserEdit.Disable(); return 0; } // ----------------------------------------------------------------------- IMPL_LINK( SvxZoomDialog, SpinHdl, MetricField *, EMPTYARG ) { if ( !aUserBtn.IsChecked() ) return 0; bModified |= TRUE; return 0; } // ----------------------------------------------------------------------- IMPL_LINK( SvxZoomDialog, ViewLayoutUserHdl, RadioButton *, pBtn ) { bModified |= TRUE; if ( pBtn == &aAutomaticBtn ) { aColumnsEdit.Disable(); aBookModeChk.Disable(); } else if ( pBtn == &aSingleBtn ) { aColumnsEdit.Disable(); aBookModeChk.Disable(); } else if ( pBtn == &aColumnsBtn ) { aColumnsEdit.Enable(); aColumnsEdit.GrabFocus(); if ( 0 == aColumnsEdit.GetValue() % 2 ) aBookModeChk.Enable(); } else { DBG_ERROR( "Wrong Button" ); return 0; } return 0; } // ----------------------------------------------------------------------- IMPL_LINK( SvxZoomDialog, ViewLayoutSpinHdl, MetricField *, pEdt ) { if ( pEdt == &aColumnsEdit && !aColumnsBtn.IsChecked() ) return 0; if ( 0 == aColumnsEdit.GetValue() % 2 ) aBookModeChk.Enable(); else { aBookModeChk.Check( sal_False ); aBookModeChk.Disable(); } bModified |= TRUE; return 0; } // ----------------------------------------------------------------------- IMPL_LINK( SvxZoomDialog, ViewLayoutCheckHdl, CheckBox *, pChk ) { if ( pChk == &aBookModeChk && !aColumnsBtn.IsChecked() ) return 0; bModified |= TRUE; return 0; } // ----------------------------------------------------------------------- IMPL_LINK( SvxZoomDialog, OKHdl, Button *, pBtn ) { if ( bModified || &aOKBtn != pBtn ) { #if TEST_LAYOUT SvxZoomItem aZoomItem; SvxViewLayoutItem aViewLayoutItem; #else /* !TEST_LAYOUT */ SvxZoomItem aZoomItem( SVX_ZOOM_PERCENT, 0, rSet.GetPool()->GetWhich( SID_ATTR_ZOOM ) ); SvxViewLayoutItem aViewLayoutItem( 0, false, rSet.GetPool()->GetWhich( SID_ATTR_VIEWLAYOUT ) ); #endif /* !TEST_LAYOUT */ if ( &aOKBtn == pBtn ) { USHORT nFactor = GetFactor(); if ( SPECIAL_FACTOR == nFactor ) { if ( aOptimalBtn.IsChecked() ) aZoomItem.SetType( SVX_ZOOM_OPTIMAL ); else if ( aPageWidthBtn.IsChecked() ) aZoomItem.SetType( SVX_ZOOM_PAGEWIDTH ); else if ( aWholePageBtn.IsChecked() ) aZoomItem.SetType( SVX_ZOOM_WHOLEPAGE ); } else aZoomItem.SetValue( nFactor ); if ( aAutomaticBtn.IsChecked() ) { aViewLayoutItem.SetValue( 0 ); aViewLayoutItem.SetBookMode( false ); } if ( aSingleBtn.IsChecked() ) { aViewLayoutItem.SetValue( 1 ); aViewLayoutItem.SetBookMode( false ); } else if ( aColumnsBtn.IsChecked() ) { aViewLayoutItem.SetValue( static_cast(aColumnsEdit.GetValue()) ); aViewLayoutItem.SetBookMode( aBookModeChk.IsChecked() ); } } else { DBG_ERROR( "Wrong Button" ); return 0; } #if !TEST_LAYOUT pOutSet = new SfxItemSet( rSet ); pOutSet->Put( aZoomItem ); // don't set attribute in case the whole viewlayout stuff is disabled: if ( aViewLayoutFl.IsEnabled() ) pOutSet->Put( aViewLayoutItem ); // Wert aus dem UserEdit "uber den Dialog hinaus merken SfxObjectShell* pSh = SfxObjectShell::Current(); if ( pSh ) pSh->PutItem( SfxUInt16Item( SID_ATTR_ZOOM_USER, (UINT16)aUserEdit.GetValue() ) ); #endif /* !TEST_LAYOUT */ EndDialog( RET_OK ); } else EndDialog( RET_CANCEL ); return 0; }