diff options
Diffstat (limited to 'sw/source/ui/misc/num.cxx')
-rw-r--r-- | sw/source/ui/misc/num.cxx | 1176 |
1 files changed, 1176 insertions, 0 deletions
diff --git a/sw/source/ui/misc/num.cxx b/sw/source/ui/misc/num.cxx new file mode 100644 index 000000000000..4b6b48e5ccea --- /dev/null +++ b/sw/source/ui/misc/num.cxx @@ -0,0 +1,1176 @@ +/************************************************************************* + * + * 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_sw.hxx" +#ifdef SW_DLLIMPLEMENTATION +#undef SW_DLLIMPLEMENTATION +#endif + + + +#define USE_NUMTABPAGES +#define _NUM_CXX +#include <hintids.hxx> + +#ifndef _MSGBOX_HXX //autogen +#include <vcl/msgbox.hxx> +#endif +#include <tools/urlobj.hxx> +#include <sfx2/app.hxx> +#include <sfx2/imgmgr.hxx> +#include <svx/gallery.hxx> +#include <editeng/brshitem.hxx> +#include <editeng/lrspitem.hxx> +#include <editeng/numitem.hxx> +#include <swvset.hxx> +#include <swmodule.hxx> +#include <wrtsh.hxx> +#ifndef _DOCSH_HXX +#include <docsh.hxx> +#endif +#ifndef _WVIEW_HXX +#include <wview.hxx> +#endif +#include <uitool.hxx> +#ifndef _WDOCSH_HXX +#include <wdocsh.hxx> +#endif +#include <uiitems.hxx> +#include <docstyle.hxx> +#include <charfmt.hxx> +#include <uinums.hxx> +#include <poolfmt.hxx> +#include <shellres.hxx> +#include <outline.hxx> +#include <num.hxx> +#include <viewopt.hxx> +#include <frmmgr.hxx> + +#ifndef _MISC_HRC +#include <misc.hrc> +#endif +#ifndef _FRMUI_HRC +#include <frmui.hrc> +#endif +#ifndef _NUM_HRC +#include <num.hrc> +#endif +#ifndef _GLOBALS_HRC +#include <globals.hrc> +#endif +#ifndef _HELPID_H +#include <helpid.h> +#endif +#include <SwStyleNameMapper.hxx> +#include <svx/svxids.hrc> +#include <svx/dialogs.hrc> +#include <svl/stritem.hxx> +#include <svl/aeitem.hxx> +#include <svl/slstitm.hxx> + +static sal_Bool bLastRelative = sal_False; + +/*-----------------03.12.97 10:02------------------- + +--------------------------------------------------*/ +SwNumPositionTabPage::SwNumPositionTabPage(Window* pParent, + const SfxItemSet& rSet) : + SfxTabPage( pParent, SW_RES( TP_NUM_POSITION ), rSet ), + aLevelFL( this, SW_RES(FL_LEVEL )), + aLevelLB( this, SW_RES(LB_LEVEL )), + aPositionFL( this, SW_RES(FL_POSITION )), + + aDistBorderFT( this, SW_RES(FT_BORDERDIST )), + aDistBorderMF( this, SW_RES(MF_BORDERDIST )), + aRelativeCB( this, SW_RES(CB_RELATIVE )), + aIndentFT( this, SW_RES(FT_INDENT )), + aIndentMF( this, SW_RES(MF_INDENT )), + aDistNumFT( this, SW_RES(FT_NUMDIST )), + aDistNumMF( this, SW_RES(MF_NUMDIST )), + aAlignFT( this, SW_RES(FT_ALIGN )), + aAlignLB( this, SW_RES(LB_ALIGN )), + // --> OD 2008-02-01 #newlistlevelattrs# + aLabelFollowedByFT( this, SW_RES(FT_LABEL_FOLLOWED_BY) ), + aLabelFollowedByLB( this, SW_RES(LB_LABEL_FOLLOWED_BY) ), + aListtabFT( this, SW_RES(FT_LISTTAB) ), + aListtabMF( this, SW_RES(MF_LISTTAB) ), + aAlign2FT( this, SW_RES(FT_ALIGN_2) ), + aAlign2LB( this, SW_RES(LB_ALIGN_2) ), + aAlignedAtFT( this, SW_RES(FT_ALIGNED_AT) ), + aAlignedAtMF( this, SW_RES(MF_ALIGNED_AT) ), + aIndentAtFT( this, SW_RES(FT_INDENT_AT) ), + aIndentAtMF( this, SW_RES(MF_INDENT_AT) ), + // <-- + aStandardPB( this, SW_RES(PB_STANDARD )), + + aPreviewWIN( this, SW_RES(WIN_PREVIEW )), + + pActNum(0), + pSaveNum(0), + pWrtSh(0), + pOutlineDlg(0), + bPreset( sal_False ), + bInInintControl(sal_False), + // --> OD 2008-02-01 #newlistlevelattrs# + bLabelAlignmentPosAndSpaceModeActive( false ) + // <-- +{ + FreeResource(); + SetExchangeSupport(); + aPreviewWIN.SetBackground(Wallpaper(Color(COL_TRANSPARENT))); + + aStandardPB.SetAccessibleRelationMemberOf(&aPositionFL); + + + aRelativeCB.Check(); + aAlignLB.SetSelectHdl(LINK(this, SwNumPositionTabPage, EditModifyHdl)); + // --> OD 2008-02-01 #newlistlevelattrs# + aAlign2LB.SetSelectHdl(LINK(this, SwNumPositionTabPage, EditModifyHdl)); + for ( sal_uInt16 i = 0; i < aAlignLB.GetEntryCount(); ++i ) + { + aAlign2LB.InsertEntry( aAlignLB.GetEntry( i ) ); + } + aAlign2LB.SetDropDownLineCount( aAlign2LB.GetEntryCount() ); + aAlign2FT.SetText( aAlignFT.GetText() ); + // <-- + + Link aLk = LINK(this, SwNumPositionTabPage, DistanceHdl); + aDistBorderMF.SetUpHdl(aLk); + aDistNumMF.SetUpHdl(aLk); + aIndentMF.SetUpHdl(aLk); + aDistBorderMF.SetDownHdl(aLk); + aDistNumMF.SetDownHdl(aLk); + aIndentMF.SetDownHdl(aLk); + aDistBorderMF.SetLoseFocusHdl(aLk); + aDistNumMF.SetLoseFocusHdl(aLk); + aIndentMF.SetLoseFocusHdl(aLk); + + // --> OD 2008-02-01 #newlistlevelattrs# + aLabelFollowedByLB.SetDropDownLineCount( aLabelFollowedByLB.GetEntryCount() ); + aLabelFollowedByLB.SetSelectHdl( LINK(this, SwNumPositionTabPage, LabelFollowedByHdl_Impl) ); + + aLk = LINK(this, SwNumPositionTabPage, ListtabPosHdl_Impl); + aListtabMF.SetUpHdl(aLk); + aListtabMF.SetDownHdl(aLk); + aListtabMF.SetLoseFocusHdl(aLk); + + aLk = LINK(this, SwNumPositionTabPage, AlignAtHdl_Impl); + aAlignedAtMF.SetUpHdl(aLk); + aAlignedAtMF.SetDownHdl(aLk); + aAlignedAtMF.SetLoseFocusHdl(aLk); + + aLk = LINK(this, SwNumPositionTabPage, IndentAtHdl_Impl); + aIndentAtMF.SetUpHdl(aLk); + aIndentAtMF.SetDownHdl(aLk); + aIndentAtMF.SetLoseFocusHdl(aLk); + // <-- + + aLevelLB.SetSelectHdl(LINK(this, SwNumPositionTabPage, LevelHdl)); + aRelativeCB.SetClickHdl(LINK(this, SwNumPositionTabPage, RelativeHdl)); + aStandardPB.SetClickHdl(LINK(this, SwNumPositionTabPage, StandardHdl)); + + // Ebenen einfuegen + for(sal_uInt16 i = 1; i <= MAXLEVEL; i++) + aLevelLB.InsertEntry(String::CreateFromInt32(i)); + String sEntry(String::CreateFromAscii("1 - ")); + sEntry += String::CreateFromInt32(MAXLEVEL); + aLevelLB.InsertEntry(sEntry); + aLevelLB.SelectEntry(sEntry); + + aRelativeCB.Check(bLastRelative); + aPreviewWIN.SetPositionMode(); +} +/*-----------------03.12.97 10:02------------------- + +--------------------------------------------------*/ +SwNumPositionTabPage::~SwNumPositionTabPage() +{ + delete pActNum; +} +/*-----------------03.12.97 10:06------------------- + +--------------------------------------------------*/ +void SwNumPositionTabPage::InitControls() +{ + bInInintControl = sal_True; + // --> OD 2008-02-01 #newlistlevelattrs# + const bool bRelative = !bLabelAlignmentPosAndSpaceModeActive && + aRelativeCB.IsEnabled() && aRelativeCB.IsChecked(); + const bool bSingleSelection = aLevelLB.GetSelectEntryCount() == 1 && + USHRT_MAX != nActNumLvl; + + aDistBorderMF.Enable( !bLabelAlignmentPosAndSpaceModeActive && + ( bSingleSelection || bRelative || pOutlineDlg != 0 ) ); + aDistBorderFT.Enable( !bLabelAlignmentPosAndSpaceModeActive && + ( bSingleSelection || bRelative || pOutlineDlg != 0 ) ); + // <-- + + bool bSetDistEmpty = false; + bool bSameDistBorderNum = !bLabelAlignmentPosAndSpaceModeActive; + bool bSameDist = !bLabelAlignmentPosAndSpaceModeActive; + bool bSameIndent = !bLabelAlignmentPosAndSpaceModeActive; + bool bSameAdjust = true; + + // --> OD 2008-02-01 #newlistlevelattrs# + bool bSameLabelFollowedBy = bLabelAlignmentPosAndSpaceModeActive; + bool bSameListtab = bLabelAlignmentPosAndSpaceModeActive; + bool bSameAlignAt = bLabelAlignmentPosAndSpaceModeActive; + bool bSameIndentAt = bLabelAlignmentPosAndSpaceModeActive; + // <-- + + const SwNumFmt* aNumFmtArr[MAXLEVEL]; + const SwFmtVertOrient* pFirstOrient = 0; + sal_uInt16 nMask = 1; + sal_uInt16 nLvl = USHRT_MAX; + long nFirstBorderText = 0; + long nFirstBorderTextRelative = -1; + for(sal_uInt16 i = 0; i < MAXLEVEL; i++) + { + aNumFmtArr[i] = &pActNum->Get(i); + if(nActNumLvl & nMask) + { + if(USHRT_MAX == nLvl) + { + nLvl = i; + // --> OD 2008-02-01 #newlistlevelattrs# + if ( !bLabelAlignmentPosAndSpaceModeActive ) + { + pFirstOrient = aNumFmtArr[nLvl]->GetGraphicOrientation(); + nFirstBorderText = nLvl > 0 ? + aNumFmtArr[nLvl]->GetAbsLSpace() + aNumFmtArr[nLvl]->GetFirstLineOffset() - + aNumFmtArr[nLvl - 1]->GetAbsLSpace() + aNumFmtArr[nLvl - 1]->GetFirstLineOffset(): + aNumFmtArr[nLvl]->GetAbsLSpace() + aNumFmtArr[nLvl]->GetFirstLineOffset(); + } + // <-- + } + + if( i > nLvl) + { + // --> OD 2008-02-01 #newlistlevelattrs# + bSameAdjust &= aNumFmtArr[i]->GetNumAdjust() == aNumFmtArr[nLvl]->GetNumAdjust(); + if ( !bLabelAlignmentPosAndSpaceModeActive ) + { + if(bRelative) + { + if(nFirstBorderTextRelative == -1) + nFirstBorderTextRelative = + (aNumFmtArr[i]->GetAbsLSpace() + aNumFmtArr[i]->GetFirstLineOffset() - + aNumFmtArr[i - 1]->GetAbsLSpace() + aNumFmtArr[i - 1]->GetFirstLineOffset()); + else + bSameDistBorderNum &= nFirstBorderTextRelative == + (aNumFmtArr[i]->GetAbsLSpace() + aNumFmtArr[i]->GetFirstLineOffset() - + aNumFmtArr[i - 1]->GetAbsLSpace() + aNumFmtArr[i - 1]->GetFirstLineOffset()); + + } + else + { + bSameDistBorderNum &= + aNumFmtArr[i]->GetAbsLSpace() - aNumFmtArr[i]->GetFirstLineOffset() == + aNumFmtArr[i - 1]->GetAbsLSpace() - aNumFmtArr[i - 1]->GetFirstLineOffset(); + } + + bSameDist &= aNumFmtArr[i]->GetCharTextDistance() == aNumFmtArr[nLvl]->GetCharTextDistance(); + bSameIndent &= aNumFmtArr[i]->GetFirstLineOffset() == aNumFmtArr[nLvl]->GetFirstLineOffset(); + } + else + { + bSameLabelFollowedBy &= + aNumFmtArr[i]->GetLabelFollowedBy() == aNumFmtArr[nLvl]->GetLabelFollowedBy(); + bSameListtab &= + aNumFmtArr[i]->GetListtabPos() == aNumFmtArr[nLvl]->GetListtabPos(); + bSameAlignAt &= + ( ( aNumFmtArr[i]->GetIndentAt() + aNumFmtArr[i]->GetFirstLineIndent() ) + == ( aNumFmtArr[nLvl]->GetIndentAt() + aNumFmtArr[nLvl]->GetFirstLineIndent() ) ); + bSameIndentAt &= + aNumFmtArr[i]->GetIndentAt() == aNumFmtArr[nLvl]->GetIndentAt(); + } + // <-- + + } + } + nMask <<= 1; + + } + if(bSameDistBorderNum) + { + long nDistBorderNum; + if(bRelative) + { + nDistBorderNum = (long)aNumFmtArr[nLvl]->GetAbsLSpace()+ aNumFmtArr[nLvl]->GetFirstLineOffset(); + if(nLvl) + nDistBorderNum -= (long)aNumFmtArr[nLvl - 1]->GetAbsLSpace()+ aNumFmtArr[nLvl - 1]->GetFirstLineOffset(); + } + else + { + nDistBorderNum = (long)aNumFmtArr[nLvl]->GetAbsLSpace()+ aNumFmtArr[nLvl]->GetFirstLineOffset(); + } + aDistBorderMF.SetValue(aDistBorderMF.Normalize(nDistBorderNum),FUNIT_TWIP); + } + else + bSetDistEmpty = sal_True; + + if(bSameDist) + aDistNumMF .SetValue(aDistNumMF.Normalize(aNumFmtArr[nLvl]->GetCharTextDistance()), FUNIT_TWIP); + else + aDistNumMF.SetText(aEmptyStr); + if(bSameIndent) + aIndentMF.SetValue(aIndentMF.Normalize(-aNumFmtArr[nLvl]->GetFirstLineOffset()), FUNIT_TWIP); + else + aIndentMF.SetText(aEmptyStr); + + if(bSameAdjust) + { + sal_uInt16 nPos = 1; // zentriert + if(aNumFmtArr[nLvl]->GetNumAdjust() == SVX_ADJUST_LEFT) + nPos = 0; + else if(aNumFmtArr[nLvl]->GetNumAdjust() == SVX_ADJUST_RIGHT) + nPos = 2; + aAlignLB.SelectEntryPos(nPos); + // --> OD 2008-02-01 #newlistlevelattrs# + aAlign2LB.SelectEntryPos( nPos ); + // <-- + } + else + { + aAlignLB.SetNoSelection(); + // --> OD 2008-02-01 #newlistlevelattrs# + aAlign2LB.SetNoSelection(); + // <-- + } + + // --> OD 2008-02-01 #newlistlevelattrs# + if ( bSameLabelFollowedBy ) + { + sal_uInt16 nPos = 0; // LISTTAB + if ( aNumFmtArr[nLvl]->GetLabelFollowedBy() == SvxNumberFormat::SPACE ) + { + nPos = 1; + } + else if ( aNumFmtArr[nLvl]->GetLabelFollowedBy() == SvxNumberFormat::NOTHING ) + { + nPos = 2; + } + aLabelFollowedByLB.SelectEntryPos( nPos ); + } + else + { + aLabelFollowedByLB.SetNoSelection(); + } + + if ( aNumFmtArr[nLvl]->GetLabelFollowedBy() == SvxNumberFormat::LISTTAB ) + { + aListtabFT.Enable( true ); + aListtabMF.Enable( true ); + if ( bSameListtab ) + { + aListtabMF.SetValue(aListtabMF.Normalize(aNumFmtArr[nLvl]->GetListtabPos()),FUNIT_TWIP); + } + else + { + aListtabMF.SetText(aEmptyStr); + } + } + else + { + aListtabFT.Enable( false ); + aListtabMF.Enable( false ); + aListtabMF.SetText(aEmptyStr); + } + + if ( bSameAlignAt ) + { + aAlignedAtMF.SetValue( + aAlignedAtMF.Normalize( aNumFmtArr[nLvl]->GetIndentAt() + + aNumFmtArr[nLvl]->GetFirstLineIndent()), + FUNIT_TWIP ); + } + else + { + aAlignedAtMF.SetText(aEmptyStr); + } + + if ( bSameIndentAt ) + { + aIndentAtMF.SetValue( + aIndentAtMF.Normalize( aNumFmtArr[nLvl]->GetIndentAt()), FUNIT_TWIP ); + } + else + { + aIndentAtMF.SetText(aEmptyStr); + } + // <-- + + if(sal_True == bSetDistEmpty) + aDistBorderMF.SetText(aEmptyStr); + + bInInintControl = sal_False; +} + +/*-----------------03.12.97 10:02------------------- + +--------------------------------------------------*/ +void SwNumPositionTabPage::ActivatePage(const SfxItemSet& ) +{ + const SfxPoolItem* pItem; + sal_uInt16 nTmpNumLvl = + pOutlineDlg ? pOutlineDlg->GetActNumLevel() : 0; + const SfxItemSet* pExampleSet = GetTabDialog()->GetExampleSet(); + if(pExampleSet && pExampleSet->GetItemState(FN_PARAM_NUM_PRESET, sal_False, &pItem)) + { + bPreset = ((const SfxBoolItem*)pItem)->GetValue(); + } + // + bModified = (!pActNum->GetNumFmt( 0 ) || bPreset); + if(*pActNum != *pSaveNum || + nActNumLvl != nTmpNumLvl ) + { + *pActNum = *pSaveNum; + nActNumLvl = nTmpNumLvl; + sal_uInt16 nMask = 1; + aLevelLB.SetUpdateMode(sal_False); + aLevelLB.SetNoSelection(); + aLevelLB.SelectEntryPos( MAXLEVEL, nActNumLvl == USHRT_MAX); + if(nActNumLvl != USHRT_MAX) + for(sal_uInt16 i = 0; i < MAXLEVEL; i++) + { + if(nActNumLvl & nMask) + aLevelLB.SelectEntryPos( i, sal_True); + nMask <<= 1 ; + } + aLevelLB.SetUpdateMode(sal_True); + + // --> OD 2008-02-01 #newlistlevelattrs# + InitPosAndSpaceMode(); + ShowControlsDependingOnPosAndSpaceMode(); + // <-- + + InitControls(); + } + aRelativeCB.Enable(1 != nActNumLvl); + aPreviewWIN.Invalidate(); +} + +/*-----------------03.12.97 10:02------------------- + +--------------------------------------------------*/ +int SwNumPositionTabPage::DeactivatePage(SfxItemSet *_pSet) +{ + SwOutlineTabDialog::SetActNumLevel(nActNumLvl); + if(_pSet) + FillItemSet(*_pSet); + return sal_True; + +} + +/*-----------------03.12.97 10:02------------------- + +--------------------------------------------------*/ +sal_Bool SwNumPositionTabPage::FillItemSet( SfxItemSet& rSet ) +{ + if(pOutlineDlg) + *pOutlineDlg->GetNumRule() = *pActNum; + else if(bModified && pActNum) + { + *pSaveNum = *pActNum; + rSet.Put(SwUINumRuleItem( *pSaveNum )); + rSet.Put(SfxBoolItem(FN_PARAM_NUM_PRESET, sal_False)); + } + return bModified; +} + +/*-----------------03.12.97 10:02------------------- + +--------------------------------------------------*/ +void SwNumPositionTabPage::Reset( const SfxItemSet& rSet ) +{ + const SfxPoolItem* pItem; + if(pOutlineDlg) + { + pSaveNum = pOutlineDlg->GetNumRule(); + aLevelLB.EnableMultiSelection(sal_False); + } + else if(SFX_ITEM_SET == rSet.GetItemState(FN_PARAM_ACT_NUMBER, sal_False, &pItem)) + pSaveNum = ((SwUINumRuleItem*)pItem)->GetNumRule(); + + nActNumLvl = SwOutlineTabDialog::GetActNumLevel(); + sal_uInt16 nMask = 1; + aLevelLB.SetUpdateMode(sal_False); + aLevelLB.SetNoSelection(); + if(nActNumLvl == USHRT_MAX) + { + aLevelLB.SelectEntryPos( MAXLEVEL, sal_True); + } + else + for(sal_uInt16 i = 0; i < MAXLEVEL; i++) + { + if(nActNumLvl & nMask) + aLevelLB.SelectEntryPos( i, sal_True); + nMask <<= 1; + } + aLevelLB.SetUpdateMode(sal_True); + + if(!pActNum) + pActNum = new SwNumRule(*pSaveNum); + else if(*pSaveNum != *pActNum) + *pActNum = *pSaveNum; + aPreviewWIN.SetNumRule(pActNum); + // --> OD 2008-02-01 #newlistlevelattrs# + InitPosAndSpaceMode(); + ShowControlsDependingOnPosAndSpaceMode(); + // <-- + InitControls(); + bModified = sal_False; +} + +// --> OD 2008-01-11 #newlistlevelattrs# +void SwNumPositionTabPage::InitPosAndSpaceMode() +{ + if ( pActNum == 0 ) + { + DBG_ASSERT( false, + "<SwNumPositionTabPage::InitPosAndSpaceMode()> - misusage of method -> <pAktNum> has to be already set!" ); + return; + } + + SvxNumberFormat::SvxNumPositionAndSpaceMode ePosAndSpaceMode = + SvxNumberFormat::LABEL_ALIGNMENT; + sal_uInt16 nMask = 1; + for( sal_uInt16 i = 0; i < MAXLEVEL; ++i ) + { + if(nActNumLvl & nMask) + { + SvxNumberFormat aNumFmt( pActNum->Get(i) ); + ePosAndSpaceMode = aNumFmt.GetPositionAndSpaceMode(); + if ( ePosAndSpaceMode == SvxNumberFormat::LABEL_ALIGNMENT ) + { + break; + } + } + nMask <<= 1; + } + + bLabelAlignmentPosAndSpaceModeActive = + ePosAndSpaceMode == SvxNumberFormat::LABEL_ALIGNMENT; +} + +void SwNumPositionTabPage::ShowControlsDependingOnPosAndSpaceMode() +{ + aDistBorderFT.Show( !bLabelAlignmentPosAndSpaceModeActive ); + aDistBorderMF.Show( !bLabelAlignmentPosAndSpaceModeActive ); + aRelativeCB.Show( !bLabelAlignmentPosAndSpaceModeActive ); + aIndentFT.Show( !bLabelAlignmentPosAndSpaceModeActive ); + aIndentMF.Show( !bLabelAlignmentPosAndSpaceModeActive ); + aDistNumFT.Show( !bLabelAlignmentPosAndSpaceModeActive ); + aDistNumMF.Show( !bLabelAlignmentPosAndSpaceModeActive ); + aAlignFT.Show( !bLabelAlignmentPosAndSpaceModeActive ); + aAlignLB.Show( !bLabelAlignmentPosAndSpaceModeActive ); + + aLabelFollowedByFT.Show( bLabelAlignmentPosAndSpaceModeActive ); + aLabelFollowedByLB.Show( bLabelAlignmentPosAndSpaceModeActive ); + aListtabFT.Show( bLabelAlignmentPosAndSpaceModeActive ); + aListtabMF.Show( bLabelAlignmentPosAndSpaceModeActive ); + aAlign2FT.Show( bLabelAlignmentPosAndSpaceModeActive ); + aAlign2LB.Show( bLabelAlignmentPosAndSpaceModeActive ); + aAlignedAtFT.Show( bLabelAlignmentPosAndSpaceModeActive ); + aAlignedAtMF.Show( bLabelAlignmentPosAndSpaceModeActive ); + aIndentAtFT.Show( bLabelAlignmentPosAndSpaceModeActive ); + aIndentAtMF.Show( bLabelAlignmentPosAndSpaceModeActive ); +} +// <-- + +/*-----------------03.12.97 10:02------------------- + +--------------------------------------------------*/ +SfxTabPage* SwNumPositionTabPage::Create( Window* pParent, + const SfxItemSet& rAttrSet) +{ + return new SwNumPositionTabPage(pParent, rAttrSet); +} + +/*-----------------04.12.97 12:51------------------- + +--------------------------------------------------*/ +void SwNumPositionTabPage::SetWrtShell(SwWrtShell* pSh) +{ + pWrtSh = pSh; + + // --> OD 2008-02-01 #newlistlevelattrs# + const SwTwips nWidth = pWrtSh->GetAnyCurRect(RECT_FRM).Width(); + + aDistBorderMF.SetMax(aDistBorderMF.Normalize( nWidth ), FUNIT_TWIP ); + aDistNumMF .SetMax(aDistNumMF .Normalize( nWidth ), FUNIT_TWIP ); + aIndentMF .SetMax(aIndentMF .Normalize( nWidth ), FUNIT_TWIP ); + // --> OD 2008-02-18 #newlistlevelattrs# + aListtabMF.SetMax(aListtabMF.Normalize( nWidth ), FUNIT_TWIP ); + aAlignedAtMF.SetMax(aAlignedAtMF.Normalize( nWidth ), FUNIT_TWIP ); + aIndentAtMF.SetMax(aIndentAtMF.Normalize( nWidth ), FUNIT_TWIP ); + // <-- + const SwTwips nLast2 = nWidth /2; + aDistBorderMF.SetLast( aDistBorderMF.Normalize( nLast2 ), FUNIT_TWIP ); + aDistNumMF .SetLast( aDistNumMF .Normalize( nLast2 ), FUNIT_TWIP ); + aIndentMF .SetLast( aIndentMF .Normalize( nLast2 ), FUNIT_TWIP ); + // --> OD 2008-02-18 #newlistlevelattrs# + aListtabMF.SetLast(aListtabMF.Normalize( nLast2 ), FUNIT_TWIP ); + aAlignedAtMF.SetLast(aAlignedAtMF.Normalize( nLast2 ), FUNIT_TWIP ); + aIndentAtMF.SetLast(aIndentAtMF.Normalize( nLast2 ), FUNIT_TWIP ); + // <-- + // <-- + + const SwRect& rPrtRect = pWrtSh->GetAnyCurRect(RECT_PAGE); + aPreviewWIN.SetPageWidth(rPrtRect.Width()); + FieldUnit eMetric = ::GetDfltMetric(0 != PTR_CAST(SwWebView, &pWrtSh->GetView())); + if(eMetric == FUNIT_MM) + { + aDistBorderMF .SetDecimalDigits(1); + aDistNumMF .SetDecimalDigits(1); + aIndentMF .SetDecimalDigits(1); + // --> OD 2008-02-18 #newlistlevelattrs# + aListtabMF.SetDecimalDigits(1); + aAlignedAtMF.SetDecimalDigits(1); + aIndentAtMF.SetDecimalDigits(1); + // <-- + } + aDistBorderMF .SetUnit( eMetric ); + aDistNumMF .SetUnit( eMetric ); + aIndentMF .SetUnit( eMetric ); + // --> OD 2008-02-18 #newlistlevelattrs# + aListtabMF.SetUnit( eMetric ); + aAlignedAtMF.SetUnit( eMetric ); + aIndentAtMF.SetUnit( eMetric ); + // <-- +} + +/*-----------------03.12.97 11:06------------------- + +--------------------------------------------------*/ +IMPL_LINK( SwNumPositionTabPage, EditModifyHdl, Edit *, EMPTYARG ) +{ + sal_uInt16 nMask = 1; + for(sal_uInt16 i = 0; i < MAXLEVEL; i++) + { + if(nActNumLvl & nMask) + { + SwNumFmt aNumFmt(pActNum->Get(i)); + + // --> OD 2008-02-01 #newlistlevelattrs# + const sal_uInt16 nPos = aAlignLB.IsVisible() + ? aAlignLB.GetSelectEntryPos() + : aAlign2LB.GetSelectEntryPos(); + // <-- + SvxAdjust eAdjust = SVX_ADJUST_CENTER; + if(nPos == 0) + eAdjust = SVX_ADJUST_LEFT; + else if(nPos == 2) + eAdjust = SVX_ADJUST_RIGHT; + aNumFmt.SetNumAdjust( eAdjust ); + pActNum->Set(i, aNumFmt); + } + nMask <<= 1; + } + SetModified(); + return 0; +} +/*-----------------03.12.97 11:11------------------- + +--------------------------------------------------*/ +IMPL_LINK( SwNumPositionTabPage, LevelHdl, ListBox *, pBox ) +{ + sal_uInt16 nSaveNumLvl = nActNumLvl; + nActNumLvl = 0; + if(pBox->IsEntryPosSelected( MAXLEVEL ) && + (pBox->GetSelectEntryCount() == 1 || nSaveNumLvl != 0xffff)) + { + nActNumLvl = 0xFFFF; + pBox->SetUpdateMode(sal_False); + for( sal_uInt16 i = 0; i < MAXLEVEL; i++ ) + pBox->SelectEntryPos( i, sal_False ); + pBox->SetUpdateMode(sal_True); + } + else if(pBox->GetSelectEntryCount()) + { + sal_uInt16 nMask = 1; + for( sal_uInt16 i = 0; i < MAXLEVEL; i++ ) + { + if(pBox->IsEntryPosSelected( i )) + nActNumLvl |= nMask; + nMask <<= 1; + } + pBox->SelectEntryPos( MAXLEVEL, sal_False ); + } + else + { + nActNumLvl = nSaveNumLvl; + sal_uInt16 nMask = 1; + for( sal_uInt16 i = 0; i < MAXLEVEL; i++ ) + { + if(nActNumLvl & nMask) + { + pBox->SelectEntryPos(i); + break; + } + nMask <<=1; + } + } + aRelativeCB.Enable(1 != nActNumLvl); + SetModified(); + // --> OD 2008-02-01 #newlistlevelattrs# + InitPosAndSpaceMode(); + ShowControlsDependingOnPosAndSpaceMode(); + // <-- + InitControls(); + return 0; +} +/*-----------------03.12.97 12:24------------------- + +--------------------------------------------------*/ +IMPL_LINK( SwNumPositionTabPage, DistanceHdl, MetricField *, pFld ) +{ + if(bInInintControl) + return 0; + long nValue = static_cast< long >(pFld->Denormalize(pFld->GetValue(FUNIT_TWIP))); + sal_uInt16 nMask = 1; + for(sal_uInt16 i = 0; i < MAXLEVEL; i++) + { + if(nActNumLvl & nMask) + { + SwNumFmt aNumFmt( pActNum->Get( i ) ); + if(pFld == &aDistBorderMF) + { + + if(aRelativeCB.IsChecked() && aRelativeCB.IsEnabled()) + { + if(0 == i) + { + long nTmp = aNumFmt.GetFirstLineOffset(); + aNumFmt.SetAbsLSpace( sal_uInt16(nValue - nTmp)); + } + else + { + long nTmp = pActNum->Get( i - 1 ).GetAbsLSpace() + + pActNum->Get( i - 1 ).GetFirstLineOffset() - + pActNum->Get( i ).GetFirstLineOffset(); + + aNumFmt.SetAbsLSpace( sal_uInt16(nValue + nTmp)); + } + } + else + { + aNumFmt.SetAbsLSpace( (short)nValue - aNumFmt.GetFirstLineOffset()); + } + } + else if(pFld == &aDistNumMF) + { + aNumFmt.SetCharTextDistance( (short)nValue ); + } + else if(pFld == &aIndentMF) + { + //jetzt muss mit dem FirstLineOffset auch der AbsLSpace veraendert werden + long nDiff = nValue + aNumFmt.GetFirstLineOffset(); + long nAbsLSpace = aNumFmt.GetAbsLSpace(); + aNumFmt.SetAbsLSpace(sal_uInt16(nAbsLSpace + nDiff)); + aNumFmt.SetFirstLineOffset( -(short)nValue ); + } + + pActNum->Set( i, aNumFmt ); + } + nMask <<= 1; + } + + SetModified(); + if(!aDistBorderMF.IsEnabled()) + aDistBorderMF.SetText(aEmptyStr); + + return 0; +} + +/*-----------------04.12.97 12:35------------------- + +--------------------------------------------------*/ +IMPL_LINK( SwNumPositionTabPage, RelativeHdl, CheckBox *, pBox ) +{ + sal_Bool bOn = pBox->IsChecked(); + sal_Bool bSingleSelection = aLevelLB.GetSelectEntryCount() == 1 && USHRT_MAX != nActNumLvl; + sal_Bool bSetValue = sal_False; + long nValue = 0; + if(bOn || bSingleSelection) + { + sal_uInt16 nMask = 1; + sal_Bool bFirst = sal_True; + bSetValue = sal_True; + for(sal_uInt16 i = 0; i < MAXLEVEL; i++) + { + if(nActNumLvl & nMask) + { + const SwNumFmt &rNumFmt = pActNum->Get(i); + if(bFirst) + { + nValue = rNumFmt.GetAbsLSpace(); + if(bOn && i) + nValue -= pActNum->Get(i - 1).GetAbsLSpace(); + } + else + bSetValue = nValue == rNumFmt.GetAbsLSpace() - pActNum->Get(i - 1).GetAbsLSpace(); + bFirst = sal_False; + } + nMask <<= 1; + } + + } + if(bSetValue) + aDistBorderMF.SetValue(aDistBorderMF.Normalize(nValue), FUNIT_TWIP); + else + aDistBorderMF.SetText(aEmptyStr); + aDistBorderMF.Enable(bOn || bSingleSelection||0 != pOutlineDlg); + bLastRelative = bOn; + return 0; +} + +// --> OD 2008-02-01 #newlistlevelattrs# +IMPL_LINK( SwNumPositionTabPage, LabelFollowedByHdl_Impl, ListBox*, EMPTYARG ) +{ + // determine value to be set at the chosen list levels + SvxNumberFormat::SvxNumLabelFollowedBy eLabelFollowedBy = + SvxNumberFormat::LISTTAB; + { + const sal_uInt16 nPos = aLabelFollowedByLB.GetSelectEntryPos(); + if ( nPos == 1 ) + { + eLabelFollowedBy = SvxNumberFormat::SPACE; + } + else if ( nPos == 2 ) + { + eLabelFollowedBy = SvxNumberFormat::NOTHING; + } + } + + // set value at the chosen list levels + bool bSameListtabPos = true; + sal_uInt16 nFirstLvl = USHRT_MAX; + sal_uInt16 nMask = 1; + for( sal_uInt16 i = 0; i < MAXLEVEL; ++i ) + { + if ( nActNumLvl & nMask ) + { + SwNumFmt aNumFmt( pActNum->Get(i) ); + aNumFmt.SetLabelFollowedBy( eLabelFollowedBy ); + pActNum->Set( i, aNumFmt ); + + if ( nFirstLvl == USHRT_MAX ) + { + nFirstLvl = i; + } + else + { + bSameListtabPos &= aNumFmt.GetListtabPos() == + pActNum->Get( nFirstLvl ).GetListtabPos(); + } + } + nMask <<= 1; + } + + // enable/disable metric field for list tab stop position depending on + // selected item following the list label. + aListtabFT.Enable( eLabelFollowedBy == SvxNumberFormat::LISTTAB ); + aListtabMF.Enable( eLabelFollowedBy == SvxNumberFormat::LISTTAB ); + if ( bSameListtabPos && eLabelFollowedBy == SvxNumberFormat::LISTTAB ) + { + aListtabMF.SetValue( + aListtabMF.Normalize( pActNum->Get( nFirstLvl ).GetListtabPos() ), + FUNIT_TWIP ); + } + else + { + aListtabMF.SetText( String() ); + } + + SetModified(); + + return 0; +} +// <-- + +// --> OD 2008-02-01 #newlistlevelattrs# +IMPL_LINK( SwNumPositionTabPage, ListtabPosHdl_Impl, MetricField*, pFld ) +{ + // determine value to be set at the chosen list levels + const long nValue = static_cast< long >(pFld->Denormalize(pFld->GetValue(FUNIT_TWIP))); + + // set value at the chosen list levels + sal_uInt16 nMask = 1; + for( sal_uInt16 i = 0; i < MAXLEVEL; ++i ) + { + if ( nActNumLvl & nMask ) + { + SwNumFmt aNumFmt( pActNum->Get(i) ); + aNumFmt.SetListtabPos( nValue ); + pActNum->Set( i, aNumFmt ); + } + nMask <<= 1; + } + + SetModified(); + + return 0; +} +// <-- + +// --> OD 2008-02-01 #newlistlevelattrs# +IMPL_LINK( SwNumPositionTabPage, AlignAtHdl_Impl, MetricField*, pFld ) +{ + // determine value to be set at the chosen list levels + const long nValue = static_cast< long >(pFld->Denormalize(pFld->GetValue(FUNIT_TWIP))); + + // set value at the chosen list levels + sal_uInt16 nMask = 1; + for( sal_uInt16 i = 0; i < MAXLEVEL; ++i ) + { + if ( nActNumLvl & nMask ) + { + SwNumFmt aNumFmt( pActNum->Get(i) ); + const long nFirstLineIndent = nValue - aNumFmt.GetIndentAt(); + aNumFmt.SetFirstLineIndent( nFirstLineIndent ); + pActNum->Set( i, aNumFmt ); + } + nMask <<= 1; + } + + SetModified(); + + return 0; +} +// <-- + +// --> OD 2008-02-01 #newlistlevelattrs# +IMPL_LINK( SwNumPositionTabPage, IndentAtHdl_Impl, MetricField*, pFld ) +{ + // determine value to be set at the chosen list levels + const long nValue = static_cast< long >(pFld->Denormalize(pFld->GetValue(FUNIT_TWIP))); + + // set value at the chosen list levels + sal_uInt16 nMask = 1; + for( sal_uInt16 i = 0; i < MAXLEVEL; ++i ) + { + if ( nActNumLvl & nMask ) + { + SwNumFmt aNumFmt( pActNum->Get(i) ); + const long nAlignedAt = aNumFmt.GetIndentAt() + + aNumFmt.GetFirstLineIndent(); + aNumFmt.SetIndentAt( nValue ); + const long nNewFirstLineIndent = nAlignedAt - nValue; + aNumFmt.SetFirstLineIndent( nNewFirstLineIndent ); + pActNum->Set( i, aNumFmt ); + } + nMask <<= 1; + } + + SetModified(); + + return 0; +} +// <-- + +/*-----------------05.12.97 15:33------------------- + +--------------------------------------------------*/ +IMPL_LINK( SwNumPositionTabPage, StandardHdl, PushButton *, EMPTYARG ) +{ + sal_uInt16 nMask = 1; + for(sal_uInt16 i = 0; i < MAXLEVEL; i++) + { + if(nActNumLvl & nMask) + { + SwNumFmt aNumFmt( pActNum->Get( i ) ); + // --> OD 2008-02-11 #newlistlevelattrs# + SwNumRule aTmpNumRule( pWrtSh->GetUniqueNumRuleName(), + aNumFmt.GetPositionAndSpaceMode(), + pOutlineDlg ? OUTLINE_RULE : NUM_RULE ); + // <-- + SwNumFmt aTempFmt(aTmpNumRule.Get( i )); + // --> OD 2008-02-05 #newlistlevelattrs# + aNumFmt.SetPositionAndSpaceMode( aTempFmt.GetPositionAndSpaceMode() ); + if ( aTempFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_WIDTH_AND_POSITION ) + { + aNumFmt.SetAbsLSpace( aTempFmt.GetAbsLSpace()); + aNumFmt.SetCharTextDistance( aTempFmt.GetCharTextDistance() ); + aNumFmt.SetFirstLineOffset( aTempFmt.GetFirstLineOffset() ); + } + else if ( aTempFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT ) + { + aNumFmt.SetNumAdjust( aTempFmt.GetNumAdjust() ); + aNumFmt.SetLabelFollowedBy( aTempFmt.GetLabelFollowedBy() ); + aNumFmt.SetListtabPos( aTempFmt.GetListtabPos() ); + aNumFmt.SetFirstLineIndent( aTempFmt.GetFirstLineIndent() ); + aNumFmt.SetIndentAt( aTempFmt.GetIndentAt() ); + } + // <-- + + pActNum->Set( i, aNumFmt ); + } + nMask <<= 1; + } + + InitControls(); + SetModified(); + return 0; +} + +#if OSL_DEBUG_LEVEL > 1 +void SwNumPositionTabPage::SetModified(sal_Bool bRepaint) +{ + bModified = sal_True; + if(bRepaint) + { + aPreviewWIN.SetLevel(nActNumLvl); + aPreviewWIN.Invalidate(); + } +} + +#endif + +/**************************************************************************/ +/* */ +/* */ +/**************************************************************************/ + + +SwSvxNumBulletTabDialog::SwSvxNumBulletTabDialog(Window* pParent, + const SfxItemSet* pSwItemSet, SwWrtShell & rSh) : + SfxTabDialog(pParent, SW_RES(DLG_SVXTEST_NUM_BULLET), pSwItemSet, sal_False, &aEmptyStr), + rWrtSh(rSh), + sRemoveText(SW_RES(ST_RESET)), + nRetOptionsDialog(USHRT_MAX) +{ + FreeResource(); + GetUserButton()->SetText(sRemoveText); + GetUserButton()->SetHelpId(HID_NUM_RESET); + GetUserButton()->SetClickHdl(LINK(this, SwSvxNumBulletTabDialog, RemoveNumberingHdl)); + if(!rWrtSh.GetCurNumRule()) + GetUserButton()->Enable(sal_False); + AddTabPage( RID_SVXPAGE_PICK_SINGLE_NUM ); + AddTabPage( RID_SVXPAGE_PICK_BULLET ); + AddTabPage( RID_SVXPAGE_PICK_NUM ); + AddTabPage( RID_SVXPAGE_PICK_BMP ); + AddTabPage( RID_SVXPAGE_NUM_OPTIONS ); + AddTabPage( RID_SVXPAGE_NUM_POSITION ); + +} +/*-----------------07.02.97 12.08------------------- + +--------------------------------------------------*/ + +SwSvxNumBulletTabDialog::~SwSvxNumBulletTabDialog() +{ +} + +/*-----------------07.02.97 14.48------------------- + +--------------------------------------------------*/ + +void SwSvxNumBulletTabDialog::PageCreated(sal_uInt16 nPageId, SfxTabPage& rPage) +{ + //Namen der Vorlagen und Metric setzen + String sNumCharFmt, sBulletCharFmt; + SwStyleNameMapper::FillUIName( RES_POOLCHR_NUM_LEVEL, sNumCharFmt ); + SwStyleNameMapper::FillUIName( RES_POOLCHR_BUL_LEVEL, sBulletCharFmt ); + + switch ( nPageId ) + { + case RID_SVXPAGE_PICK_NUM: + { + SfxAllItemSet aSet(*(GetInputSetImpl()->GetPool())); + aSet.Put (SfxStringItem(SID_NUM_CHAR_FMT,sNumCharFmt)); + aSet.Put (SfxStringItem(SID_BULLET_CHAR_FMT,sBulletCharFmt)); + rPage.PageCreated(aSet); + } + break; + case RID_SVXPAGE_PICK_BULLET : + { + SfxAllItemSet aSet(*(GetInputSetImpl()->GetPool())); + aSet.Put (SfxStringItem(SID_BULLET_CHAR_FMT,sBulletCharFmt)); + rPage.PageCreated(aSet); + } + break; + + case RID_SVXPAGE_NUM_OPTIONS: + { + SfxAllItemSet aSet(*(GetInputSetImpl()->GetPool())); + aSet.Put (SfxStringItem(SID_NUM_CHAR_FMT,sNumCharFmt)); + aSet.Put (SfxStringItem(SID_BULLET_CHAR_FMT,sBulletCharFmt)); + // Zeichenvorlagen sammeln + ListBox rCharFmtLB(this); + rCharFmtLB.Clear(); + rCharFmtLB.InsertEntry( ViewShell::GetShellRes()->aStrNone ); + SwDocShell* pDocShell = rWrtSh.GetView().GetDocShell(); + ::FillCharStyleListBox(rCharFmtLB, pDocShell); + List aList; + for(sal_uInt16 j = 0; j < rCharFmtLB.GetEntryCount(); j++) + { + + aList.Insert( new XubString(rCharFmtLB.GetEntry(j)), LIST_APPEND ); + } + aSet.Put( SfxStringListItem( SID_CHAR_FMT_LIST_BOX,&aList ) ) ; + + FieldUnit eMetric = ::GetDfltMetric(0 != PTR_CAST(SwWebDocShell, pDocShell)); + aSet.Put ( SfxAllEnumItem(SID_METRIC_ITEM, static_cast< sal_uInt16 >(eMetric) ) ); + rPage.PageCreated(aSet); + for( sal_uInt16 i = (sal_uInt16)aList.Count(); i; --i ) + delete (XubString*)aList.Remove(i); + aList.Clear(); + } + break; + case RID_SVXPAGE_NUM_POSITION: + { + SwDocShell* pDocShell = rWrtSh.GetView().GetDocShell(); + FieldUnit eMetric = ::GetDfltMetric(0 != PTR_CAST(SwWebDocShell, pDocShell)); + SfxAllItemSet aSet(*(GetInputSetImpl()->GetPool())); + aSet.Put ( SfxAllEnumItem(SID_METRIC_ITEM, static_cast< sal_uInt16 >(eMetric)) ); + rPage.PageCreated(aSet); +// ((SvxNumPositionTabPage&)rPage).SetWrtShell(&rWrtSh); + } + break; + } +} +/*-----------------17.02.97 16.52------------------- + +--------------------------------------------------*/ +short SwSvxNumBulletTabDialog::Ok() +{ + short nRet = SfxTabDialog::Ok(); + pExampleSet->ClearItem(SID_PARAM_NUM_PRESET); + return nRet; +} +/* -----------------02.12.98 08:35------------------- + * + * --------------------------------------------------*/ +IMPL_LINK(SwSvxNumBulletTabDialog, RemoveNumberingHdl, PushButton*, EMPTYARG) +{ + EndDialog(RET_USER); + return 0; +} + + |