/************************************************************************* * * 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 * * 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 #include #include #include #include #include #include #include #include "eetext.hxx" #include "paragr.hxx" #include "sdresid.hxx" #include "glob.hrc" #include "sdattr.hrc" class SdParagraphNumTabPage : public SfxTabPage { public: SdParagraphNumTabPage(Window* pParent, const SfxItemSet& rSet ); ~SdParagraphNumTabPage(); static SfxTabPage* Create( Window* pParent, const SfxItemSet& rSet ); static sal_uInt16* GetRanges(); virtual sal_Bool FillItemSet( SfxItemSet& rSet ); virtual void Reset( const SfxItemSet& rSet ); private: TriStateBox maNewStartCB; TriStateBox maNewStartNumberCB; NumericField maNewStartNF; bool mbModified; DECL_LINK( ImplNewStartHdl, CheckBox* ); }; SdParagraphNumTabPage::SdParagraphNumTabPage(Window* pParent, const SfxItemSet& rAttr ) : SfxTabPage(pParent, SdResId(RID_TABPAGE_PARA_NUMBERING), rAttr) , maNewStartCB( this, SdResId( CB_NEW_START ) ) , maNewStartNumberCB( this, SdResId( CB_NUMBER_NEW_START ) ) , maNewStartNF( this, SdResId( NF_NEW_START ) ) , mbModified(false) { FreeResource(); maNewStartCB.SetClickHdl(LINK(this, SdParagraphNumTabPage, ImplNewStartHdl)); maNewStartNumberCB.SetClickHdl(LINK(this, SdParagraphNumTabPage, ImplNewStartHdl)); } SdParagraphNumTabPage::~SdParagraphNumTabPage() { } SfxTabPage* SdParagraphNumTabPage::Create(Window *pParent, const SfxItemSet & rAttrSet) { return new SdParagraphNumTabPage( pParent, rAttrSet ); } sal_uInt16* SdParagraphNumTabPage::GetRanges() { static sal_uInt16 __FAR_DATA aRange[] = { ATTR_PARANUMBERING_START, ATTR_PARANUMBERING_END, 0 }; return aRange; } sal_Bool SdParagraphNumTabPage::FillItemSet( SfxItemSet& rSet ) { if(maNewStartCB.GetState() != maNewStartCB.GetSavedValue() || maNewStartNumberCB.GetState() != maNewStartNumberCB.GetSavedValue()|| maNewStartNF.GetText() != maNewStartNF.GetSavedValue()) { mbModified = true; sal_Bool bNewStartChecked = STATE_CHECK == maNewStartCB.GetState(); sal_Bool bNumberNewStartChecked = STATE_CHECK == maNewStartNumberCB.GetState(); rSet.Put(SfxBoolItem(ATTR_NUMBER_NEWSTART, bNewStartChecked)); const sal_Int16 nStartAt = (sal_Int16)maNewStartNF.GetValue(); rSet.Put(SfxInt16Item(ATTR_NUMBER_NEWSTART_AT, bNumberNewStartChecked && bNewStartChecked ? nStartAt : -1)); } return mbModified; } void SdParagraphNumTabPage::Reset( const SfxItemSet& rSet ) { SfxItemState eItemState = rSet.GetItemState( ATTR_NUMBER_NEWSTART ); if(eItemState > SFX_ITEM_AVAILABLE ) { const SfxBoolItem& rStart = (const SfxBoolItem&)rSet.Get(ATTR_NUMBER_NEWSTART); maNewStartCB.SetState( rStart.GetValue() ? STATE_CHECK : STATE_NOCHECK ); maNewStartCB.EnableTriState(sal_False); } else { maNewStartCB.SetState(STATE_DONTKNOW); maNewStartCB.Disable(); } maNewStartCB.SaveValue(); eItemState = rSet.GetItemState( ATTR_NUMBER_NEWSTART_AT); if( eItemState > SFX_ITEM_AVAILABLE ) { sal_Int16 nNewStart = ((const SfxInt16Item&)rSet.Get(ATTR_NUMBER_NEWSTART_AT)).GetValue(); maNewStartNumberCB.Check(-1 != nNewStart); if(-1 == nNewStart) nNewStart = 1; maNewStartNF.SetValue(nNewStart); maNewStartNumberCB.EnableTriState(sal_False); } else { maNewStartCB.SetState(STATE_DONTKNOW); } ImplNewStartHdl(&maNewStartCB); maNewStartNF.SaveValue(); maNewStartNumberCB.SaveValue(); mbModified = sal_False; } IMPL_LINK( SdParagraphNumTabPage, ImplNewStartHdl, CheckBox*, EMPTYARG ) { sal_Bool bEnable = maNewStartCB.IsChecked(); maNewStartNumberCB.Enable(bEnable); maNewStartNF.Enable(bEnable && maNewStartNumberCB.IsChecked()); return 0; } SdParagraphDlg::SdParagraphDlg( Window* pParent, const SfxItemSet* pAttr ) : SfxTabDialog( pParent, SdResId( TAB_PARAGRAPH ), pAttr ) , rOutAttrs( *pAttr ) { FreeResource(); AddTabPage( RID_SVXPAGE_STD_PARAGRAPH ); SvtCJKOptions aCJKOptions; if( aCJKOptions.IsAsianTypographyEnabled() ) AddTabPage( RID_SVXPAGE_PARA_ASIAN); else RemoveTabPage( RID_SVXPAGE_PARA_ASIAN ); AddTabPage( RID_SVXPAGE_ALIGN_PARAGRAPH ); static const sal_Bool bShowParaNumbering = ( getenv( "SD_SHOW_NUMBERING_PAGE" ) != NULL ); if( bShowParaNumbering ) AddTabPage( RID_TABPAGE_PARA_NUMBERING, SdParagraphNumTabPage::Create, SdParagraphNumTabPage::GetRanges ); else RemoveTabPage( RID_TABPAGE_PARA_NUMBERING ); AddTabPage( RID_SVXPAGE_TABULATOR ); }