blob: 5845dfacfd01835237ecb5d796fe01096166d35f [file] [log] [blame]
/**************************************************************
*
* 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.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sw.hxx"
#ifdef SW_DLLIMPLEMENTATION
#undef SW_DLLIMPLEMENTATION
#endif
#include <tools/shl.hxx>
#include <swtypes.hxx>
#include <helpid.h>
#include <uiitems.hxx>
#include <modcfg.hxx>
#include "swmodule.hxx"
#include "usrpref.hxx"
#include "wrtsh.hxx"
#include "linkenum.hxx"
#include <uitool.hxx>
#include <view.hxx>
#include "globals.hrc"
#include "cmdid.h"
#include "optload.hrc"
#include "optload.hxx"
#include <svx/dlgutil.hxx>
#include <svx/htmlmode.hxx>
#include <fldmgr.hxx>
#include <poolfmt.hxx>
#include <expfld.hxx>
#include <caption.hxx>
#include <com/sun/star/document/PrinterIndependentLayout.hpp>
#include <svtools/insdlg.hxx>
#include <sot/clsids.hxx>
#include <unotools/configmgr.hxx>
#include <docsh.hxx>
#include <config.hrc>
#include <SwStyleNameMapper.hxx>
#include <numrule.hxx>
#include <SwNodeNum.hxx>
#include <doc.hxx>
#include <svl/cjkoptions.hxx>
using namespace ::com::sun::star;
/* -----------------22.10.98 15:12-------------------
*
* --------------------------------------------------*/
SwLoadOptPage::SwLoadOptPage( Window* pParent, const SfxItemSet& rSet ) :
SfxTabPage( pParent, SW_RES( TP_OPTLOAD_PAGE ), rSet ),
aUpdateFL ( this, SW_RES( FL_UPDATE ) ),
aLinkFT ( this, SW_RES( FT_LINK ) ),
aAlwaysRB ( this, SW_RES( RB_ALWAYS ) ),
aRequestRB ( this, SW_RES( RB_REQUEST ) ),
aNeverRB ( this, SW_RES( RB_NEVER ) ),
aFieldFT ( this, SW_RES( FT_FIELD ) ),
aAutoUpdateFields ( this, SW_RES( CB_AUTO_UPDATE_FIELDS ) ),
aAutoUpdateCharts ( this, SW_RES( CB_AUTO_UPDATE_CHARTS ) ),
aSettingsFL ( this, SW_RES( FL_SETTINGS ) ),
aMetricFT ( this, SW_RES( FT_METRIC ) ),
aMetricLB ( this, SW_RES( LB_METRIC ) ),
aTabFT ( this, SW_RES( FT_TAB ) ),
aTabMF ( this, SW_RES( MF_TAB ) ),
aUseSquaredPageMode ( this, SW_RES( CB_USE_SQUARE_PAGE_MODE ) ),
pWrtShell ( NULL ),
bHTMLMode ( sal_False ),
nLastTab ( 0 ),
nOldLinkMode( MANUAL )
{
FreeResource();
SvxStringArray aMetricArr( SW_RES( STR_ARR_METRIC ) );
for ( sal_uInt16 i = 0; i < aMetricArr.Count(); ++i )
{
String sMetric = aMetricArr.GetStringByPos( i );
FieldUnit eFUnit = (FieldUnit)aMetricArr.GetValue( i );
switch ( eFUnit )
{
case FUNIT_MM:
case FUNIT_CM:
case FUNIT_POINT:
case FUNIT_PICA:
case FUNIT_INCH:
{
// nur diese Metriken benutzen
sal_uInt16 nPos = aMetricLB.InsertEntry( sMetric );
aMetricLB.SetEntryData( nPos, (void*)(long)eFUnit );
}
default:; //prevent warning
}
}
aMetricLB.SetSelectHdl(LINK(this, SwLoadOptPage, MetricHdl));
const SfxPoolItem* pItem;
if(SFX_ITEM_SET == rSet.GetItemState(SID_HTML_MODE, sal_False, &pItem )
&& ((SfxUInt16Item*)pItem)->GetValue() & HTMLMODE_ON)
{
aTabFT.Hide();
aTabMF.Hide();
}
SvtCJKOptions aCJKOptions;
if(!aCJKOptions.IsAsianTypographyEnabled())
aUseSquaredPageMode.Hide();
}
/*-----------------18.01.97 12.43-------------------
--------------------------------------------------*/
SwLoadOptPage::~SwLoadOptPage()
{
}
/*-----------------18.01.97 12.43-------------------
--------------------------------------------------*/
SfxTabPage* __EXPORT SwLoadOptPage::Create( Window* pParent,
const SfxItemSet& rAttrSet )
{
return new SwLoadOptPage(pParent, rAttrSet );
}
/*-----------------18.01.97 12.42-------------------
--------------------------------------------------*/
sal_Bool __EXPORT SwLoadOptPage::FillItemSet( SfxItemSet& rSet )
{
sal_Bool bRet = sal_False;
SwModule* pMod = SW_MOD();
sal_uInt16 nNewLinkMode = AUTOMATIC;
if (aNeverRB.IsChecked())
nNewLinkMode = NEVER;
else if (aRequestRB.IsChecked())
nNewLinkMode = MANUAL;
SwFldUpdateFlags eFldFlags = aAutoUpdateFields.IsChecked() ?
aAutoUpdateCharts.IsChecked() ? AUTOUPD_FIELD_AND_CHARTS : AUTOUPD_FIELD_ONLY : AUTOUPD_OFF;
if(aAutoUpdateFields.IsChecked() != aAutoUpdateFields.GetSavedValue() ||
aAutoUpdateCharts.IsChecked() != aAutoUpdateCharts.GetSavedValue())
{
pMod->ApplyFldUpdateFlags(eFldFlags);
if(pWrtShell)
{
pWrtShell->SetFldUpdateFlags(eFldFlags);
pWrtShell->SetModified();
}
}
if (nNewLinkMode != nOldLinkMode)
{
pMod->ApplyLinkMode(nNewLinkMode);
if (pWrtShell)
{
pWrtShell->SetLinkUpdMode( nNewLinkMode );
pWrtShell->SetModified();
}
bRet = sal_True;
}
const sal_uInt16 nMPos = aMetricLB.GetSelectEntryPos();
if ( nMPos != aMetricLB.GetSavedValue() )
{
// Doppel-Cast fuer VA3.0
sal_uInt16 nFieldUnit = (sal_uInt16)(long)aMetricLB.GetEntryData( nMPos );
rSet.Put( SfxUInt16Item( SID_ATTR_METRIC, (sal_uInt16)nFieldUnit ) );
bRet = sal_True;
}
if(aTabMF.IsVisible() && aTabMF.GetText() != aTabMF.GetSavedValue())
{
rSet.Put(SfxUInt16Item(SID_ATTR_DEFTABSTOP,
(sal_uInt16)aTabMF.Denormalize(aTabMF.GetValue(FUNIT_TWIP))));
bRet = sal_True;
}
sal_Bool bIsSquaredPageModeFlag = aUseSquaredPageMode.IsChecked();
if ( bIsSquaredPageModeFlag != aUseSquaredPageMode.GetSavedValue() )
{
pMod->ApplyDefaultPageMode( bIsSquaredPageModeFlag );
if ( pWrtShell )
{
SwDoc* pDoc = pWrtShell->GetDoc();
pDoc->SetDefaultPageMode( bIsSquaredPageModeFlag );
pWrtShell->SetModified();
}
bRet = sal_True;
}
return bRet;
}
/*-----------------18.01.97 12.42-------------------
--------------------------------------------------*/
void __EXPORT SwLoadOptPage::Reset( const SfxItemSet& rSet)
{
const SwMasterUsrPref* pUsrPref = SW_MOD()->GetUsrPref(sal_False);
const SfxPoolItem* pItem;
if(SFX_ITEM_SET == rSet.GetItemState(FN_PARAM_WRTSHELL, sal_False, &pItem))
pWrtShell = (SwWrtShell*)((const SwPtrItem*)pItem)->GetValue();
SwFldUpdateFlags eFldFlags = AUTOUPD_GLOBALSETTING;
nOldLinkMode = GLOBALSETTING;
if (pWrtShell)
{
eFldFlags = pWrtShell->GetFldUpdateFlags(sal_True);
nOldLinkMode = pWrtShell->GetLinkUpdMode(sal_True);
}
if(GLOBALSETTING == nOldLinkMode)
nOldLinkMode = pUsrPref->GetUpdateLinkMode();
if(AUTOUPD_GLOBALSETTING == eFldFlags)
eFldFlags = pUsrPref->GetFldUpdateFlags();
aAutoUpdateFields.Check(eFldFlags != AUTOUPD_OFF);
aAutoUpdateCharts.Check(eFldFlags == AUTOUPD_FIELD_AND_CHARTS);
switch (nOldLinkMode)
{
case NEVER: aNeverRB.Check(); break;
case MANUAL: aRequestRB.Check(); break;
case AUTOMATIC: aAlwaysRB.Check(); break;
}
aAutoUpdateFields.SaveValue();
aAutoUpdateCharts.SaveValue();
aMetricLB.SetNoSelection();
if ( rSet.GetItemState( SID_ATTR_METRIC ) >= SFX_ITEM_AVAILABLE )
{
const SfxUInt16Item& rItem = (SfxUInt16Item&)rSet.Get( SID_ATTR_METRIC );
FieldUnit eFieldUnit = (FieldUnit)rItem.GetValue();
for ( sal_uInt16 i = 0; i < aMetricLB.GetEntryCount(); ++i )
{
if ( (int)(sal_IntPtr)aMetricLB.GetEntryData( i ) == (int)eFieldUnit )
{
aMetricLB.SelectEntryPos( i );
break;
}
}
::SetFieldUnit(aTabMF, eFieldUnit);
}
aMetricLB.SaveValue();
if(SFX_ITEM_SET == rSet.GetItemState(SID_ATTR_DEFTABSTOP, sal_False, &pItem))
{
nLastTab = ((SfxUInt16Item*)pItem)->GetValue();
aTabMF.SetValue(aTabMF.Normalize(nLastTab), FUNIT_TWIP);
}
aTabMF.SaveValue();
if(SFX_ITEM_SET == rSet.GetItemState(SID_HTML_MODE, sal_False, &pItem))
{
bHTMLMode = 0 != (((const SfxUInt16Item*)pItem)->GetValue() & HTMLMODE_ON);
}
//default page mode loading
if(pWrtShell)
{
sal_Bool bSquaredPageMode = pWrtShell->GetDoc()->IsSquaredPageMode();
aUseSquaredPageMode.Check( bSquaredPageMode );
aUseSquaredPageMode.SaveValue();
}
}
/*-----------------13.01.97 14.44-------------------
Metric des Deftabstops umschalten
--------------------------------------------------*/
IMPL_LINK(SwLoadOptPage, MetricHdl, ListBox*, EMPTYARG)
{
const sal_uInt16 nMPos = aMetricLB.GetSelectEntryPos();
if(nMPos != USHRT_MAX)
{
// Doppel-Cast fuer VA3.0
FieldUnit eFieldUnit = (FieldUnit)(long)aMetricLB.GetEntryData( nMPos );
sal_Bool bModified = aTabMF.IsModified();
long nVal = bModified ?
sal::static_int_cast<sal_Int32, sal_Int64 >( aTabMF.Denormalize( aTabMF.GetValue( FUNIT_TWIP ) )) :
nLastTab;
::SetFieldUnit( aTabMF, eFieldUnit );
aTabMF.SetValue( aTabMF.Normalize( nVal ), FUNIT_TWIP );
if(!bModified)
aTabMF.ClearModifyFlag();
}
return 0;
}
/*********************************************************************/
/* */
/*********************************************************************/
IMPL_LINK(SwLoadOptPage, CaptionHdl, PushButton*, EMPTYARG)
{
SwCaptionOptDlg aDlg(this, GetItemSet());
aDlg.Execute();
return 0;
}
/*--------------------------------------------------------------------
Beschreibung:
--------------------------------------------------------------------*/
SwCaptionOptDlg::SwCaptionOptDlg(Window* pParent, const SfxItemSet& rSet) :
SfxSingleTabDialog(pParent, rSet, 0)
{
// TabPage erzeugen
SetTabPage((SwCaptionOptPage*) SwCaptionOptPage::Create(this, rSet));
}
/*--------------------------------------------------------------------
Beschreibung:
--------------------------------------------------------------------*/
SwCaptionOptDlg::~SwCaptionOptDlg()
{
}
/* -----------------22.10.98 15:12-------------------
*
* --------------------------------------------------*/
SwCaptionPreview::SwCaptionPreview( Window* pParent, const ResId& rResId )
: Window( pParent, rResId )
{
maDrawPos = Point( 4, 6 );
Wallpaper aBack( GetSettings().GetStyleSettings().GetWindowColor() );
SetBackground( aBack );
SetFillColor( aBack.GetColor() );
SetLineColor( aBack.GetColor() );
SetBorderStyle( WINDOW_BORDER_MONO );
Font aFont(GetFont());
aFont.SetHeight(aFont.GetHeight() * 120 / 100 );
SetFont(aFont);
}
void SwCaptionPreview::SetPreviewText( const String& rText )
{
if( rText != maText )
{
maText = rText;
Invalidate();
}
}
void SwCaptionPreview::Paint( const Rectangle& rRect )
{
Window::Paint( rRect );
DrawRect( Rectangle( Point( 0, 0 ), GetSizePixel() ) );
DrawText( Point( 4, 6 ), maText );
}
SwCaptionOptPage::SwCaptionOptPage( Window* pParent, const SfxItemSet& rSet )
: SfxTabPage(pParent, SW_RES(TP_OPTCAPTION_PAGE), rSet),
aCheckFT (this, SW_RES(FT_OBJECTS )),
aCheckLB (this, SW_RES(CLB_OBJECTS )),
aFtCaptionOrder(this, SW_RES( FT_ORDER )),
aLbCaptionOrder(this, SW_RES( LB_ORDER )),
aPreview (this, SW_RES(WIN_PREVIEW )),
aSettingsGroupFL(this, SW_RES(FL_SETTINGS_2 )),
aCategoryText (this, SW_RES(TXT_CATEGORY )),
aCategoryBox (this, SW_RES(BOX_CATEGORY )),
aFormatText (this, SW_RES(TXT_FORMAT )),
aFormatBox (this, SW_RES(BOX_FORMAT )),
aNumberingSeparatorFT(this, SW_RES(FT_NUM_SEP )),
aNumberingSeparatorED(this, SW_RES(ED_NUM_SEP )),
aTextText (this, SW_RES(TXT_TEXT )),
aTextEdit (this, SW_RES(EDT_TEXT )),
aPosText (this, SW_RES(TXT_POS )),
aPosBox (this, SW_RES(BOX_POS )),
aNumCaptFL (this, SW_RES(FL_NUMCAPT )),
aFtLevel (this, SW_RES(FT_LEVEL )),
aLbLevel (this, SW_RES(LB_LEVEL )),
aFtDelim (this, SW_RES(FT_SEPARATOR )),
aEdDelim (this, SW_RES(ED_SEPARATOR )),
aCategoryFL (this, SW_RES(FL_CATEGORY )),
aCharStyleFT (this, SW_RES(FT_CHARSTYLE )),
aCharStyleLB (this, SW_RES(LB_CHARSTYLE )),
aApplyBorderCB (this, SW_RES(CB_APPLYBORDER)),
sSWTable (SW_RES(STR_TABLE )),
sSWFrame (SW_RES(STR_FRAME )),
sSWGraphic (SW_RES(STR_GRAPHIC )),
sOLE (SW_RES(STR_OLE )),
sBegin (SW_RESSTR(STR_BEGINNING )),
sEnd (SW_RESSTR(STR_END )),
sAbove (SW_RESSTR(STR_ABOVE )),
sBelow (SW_RESSTR(STR_CP_BELOW )),
sNone (SW_RESSTR( STR_CATEGORY_NONE )),
pMgr (new SwFldMgr()),
bHTMLMode(sal_False)
{
Wallpaper aBack( GetSettings().GetStyleSettings().GetWindowColor() );
aPreview.SetBackground( aBack );
SwStyleNameMapper::FillUIName( RES_POOLCOLL_LABEL_ABB, sIllustration );
SwStyleNameMapper::FillUIName( RES_POOLCOLL_LABEL_TABLE, sTable );
SwStyleNameMapper::FillUIName( RES_POOLCOLL_LABEL_FRAME, sText );
SwStyleNameMapper::FillUIName( RES_POOLCOLL_LABEL_DRAWING, sDrawing );
sal_uInt16 i, nCount;
SwWrtShell *pSh = ::GetActiveWrtShell();
// aFormatBox
sal_uInt16 nSelFmt = SVX_NUM_ARABIC;
if (pSh)
{
nCount = pMgr->GetFldTypeCount();
SwFieldType* pFldType;
for ( i = nCount; i; )
if( ( pFldType = pMgr->GetFldType(USHRT_MAX, --i))->GetName() ==
aCategoryBox.GetText() )
{
nSelFmt = (sal_uInt16)((SwSetExpFieldType*)pFldType)->GetSeqFormat();
break;
}
::FillCharStyleListBox( aCharStyleLB, pSh->GetView().GetDocShell(), sal_True, sal_True );
}
nCount = pMgr->GetFormatCount(TYP_SEQFLD, sal_False);
for ( i = 0; i < nCount; ++i )
{
aFormatBox.InsertEntry( pMgr->GetFormatStr(TYP_SEQFLD, i) );
sal_uInt16 nFmtId = pMgr->GetFormatId(TYP_SEQFLD, i);
aFormatBox.SetEntryData( i, reinterpret_cast<void*>(nFmtId) );
if( nFmtId == nSelFmt )
aFormatBox.SelectEntryPos( i );
}
for (i = 0; i < MAXLEVEL; i++)
aLbLevel.InsertEntry(String::CreateFromInt32(i + 1));
sal_Unicode nLvl = MAXLEVEL;
String sDelim( String::CreateFromAscii( ": " ) );
if (pSh)
{
SwSetExpFieldType* pFldType = (SwSetExpFieldType*)pMgr->GetFldType(
RES_SETEXPFLD, aCategoryBox.GetText() );
if( pFldType )
{
sDelim = pFldType->GetDelimiter();
nLvl = pFldType->GetOutlineLvl();
}
}
aLbLevel.SelectEntryPos( nLvl < MAXLEVEL ? nLvl + 1 : 0 );
aEdDelim.SetText( sDelim );
aCheckLB.SetHelpId(HID_OPTCAPTION_CLB);
FreeResource();
Link aLk = LINK( this, SwCaptionOptPage, ModifyHdl );
aCategoryBox.SetModifyHdl( aLk );
aNumberingSeparatorED.SetModifyHdl( aLk );
aTextEdit .SetModifyHdl( aLk );
aLk = LINK(this, SwCaptionOptPage, SelectHdl);
aCategoryBox.SetSelectHdl( aLk );
aFormatBox .SetSelectHdl( aLk );
aLbCaptionOrder.SetSelectHdl( LINK(this, SwCaptionOptPage, OrderHdl));
aCheckLB.SetSelectHdl( LINK(this, SwCaptionOptPage, ShowEntryHdl) );
aCheckLB.SetCheckButtonHdl( LINK(this, SwCaptionOptPage, ShowEntryHdl) );
aCheckLB.SetDeselectHdl( LINK(this, SwCaptionOptPage, SaveEntryHdl) );
}
/*-----------------18.01.97 12.43-------------------
--------------------------------------------------*/
SwCaptionOptPage::~SwCaptionOptPage()
{
DelUserData();
delete pMgr;
}
/*-----------------18.01.97 12.43-------------------
--------------------------------------------------*/
SfxTabPage* SwCaptionOptPage::Create( Window* pParent,
const SfxItemSet& rAttrSet )
{
return new SwCaptionOptPage(pParent, rAttrSet );
}
/*-----------------18.01.97 12.42-------------------
--------------------------------------------------*/
sal_Bool SwCaptionOptPage::FillItemSet( SfxItemSet& )
{
sal_Bool bRet = sal_False;
SwModuleOptions* pModOpt = SW_MOD()->GetModuleConfig();
SaveEntry(aCheckLB.FirstSelected()); // Aktuellen Eintrag uebernehmen
SvLBoxEntry* pEntry = aCheckLB.First();
while (pEntry)
{
InsCaptionOpt* pData = (InsCaptionOpt*)pEntry->GetUserData();
bRet |= pModOpt->SetCapOption(bHTMLMode, pData);
pEntry = aCheckLB.Next(pEntry);
}
sal_uInt16 nCheckCount = aCheckLB.GetCheckedEntryCount();
pModOpt->SetInsWithCaption( bHTMLMode, nCheckCount > 0 );
sal_Int32 nPos = aLbCaptionOrder.GetSelectEntryPos();
pModOpt->SetCaptionOrderNumberingFirst(nPos == 1 ? sal_True : sal_False );
return bRet;
}
/*-----------------18.01.97 12.42-------------------
--------------------------------------------------*/
void SwCaptionOptPage::Reset( const SfxItemSet& rSet)
{
const SfxPoolItem* pItem;
if(SFX_ITEM_SET == rSet.GetItemState(SID_HTML_MODE, sal_False, &pItem))
{
bHTMLMode = 0 != (((const SfxUInt16Item*)pItem)->GetValue() & HTMLMODE_ON);
}
DelUserData();
aCheckLB.GetModel()->Clear(); // remove all entries
// Writer objects
sal_uInt16 nPos = 0;
aCheckLB.InsertEntry(sSWTable);
SetOptions(nPos++, TABLE_CAP);
aCheckLB.InsertEntry(sSWFrame);
SetOptions(nPos++, FRAME_CAP);
aCheckLB.InsertEntry(sSWGraphic);
SetOptions(nPos++, GRAPHIC_CAP);
// get Productname and -version
String sComplete, sWithoutVersion;
::rtl::OUString sTemp;
uno::Any aAny =
::utl::ConfigManager::GetDirectConfigProperty( ::utl::ConfigManager::PRODUCTNAME );
if ( aAny >>= sTemp )
{
sComplete = sTemp;
sWithoutVersion = sTemp;
aAny = ::utl::ConfigManager::GetDirectConfigProperty( ::utl::ConfigManager::PRODUCTVERSION );
if ( !( aAny >>= sTemp ) )
{
DBG_ERRORFILE( "Couldn't get PRODUCTVERSION variable" );
}
else
{
sComplete += ' ';
sComplete += String( sTemp );
}
}
else
{
DBG_ERRORFILE( "Couldn't get PRODUCTNAME variable" );
}
SvObjectServerList aObjS;
aObjS.FillInsertObjects();
aObjS.Remove( SvGlobalName( SO3_SW_CLASSID ) ); // remove Writer-ID
for ( sal_uLong i = 0; i < aObjS.Count(); ++i )
{
const SvGlobalName &rOleId = aObjS[i].GetClassName();
const String* pClassName = &aObjS[i].GetHumanName();
if ( rOleId == SvGlobalName( SO3_OUT_CLASSID ) )
pClassName = &sOLE;
String sClass( *pClassName );
// don't show product version
sClass.SearchAndReplace( sComplete, sWithoutVersion );
aCheckLB.InsertEntry( sClass );
SetOptions( nPos++, OLE_CAP, &rOleId );
}
aLbCaptionOrder.SelectEntryPos(
SW_MOD()->GetModuleConfig()->IsCaptionOrderNumberingFirst() ? 1 : 0);
ModifyHdl();
}
/*-----------------18.01.97 12.42-------------------
--------------------------------------------------*/
void SwCaptionOptPage::SetOptions(const sal_uInt16 nPos,
const SwCapObjType eObjType, const SvGlobalName *pOleId)
{
SwModuleOptions* pModOpt = SW_MOD()->GetModuleConfig();
const InsCaptionOpt* pOpt = pModOpt->GetCapOption(bHTMLMode, eObjType, pOleId);
if (pOpt)
{
aCheckLB.SetEntryData(nPos, new InsCaptionOpt(*pOpt));
aCheckLB.CheckEntryPos(nPos, pOpt->UseCaption());
}
else
aCheckLB.SetEntryData(nPos, new InsCaptionOpt(eObjType, pOleId));
}
/*-----------------18.01.97 12.42-------------------
--------------------------------------------------*/
void SwCaptionOptPage::DelUserData()
{
SvLBoxEntry* pEntry = aCheckLB.First();
while (pEntry)
{
delete (InsCaptionOpt*)pEntry->GetUserData();
pEntry->SetUserData(0);
pEntry = aCheckLB.Next(pEntry);
}
}
/* -----------------26.10.98 11:06-------------------
*
* --------------------------------------------------*/
IMPL_LINK( SwCaptionOptPage, ShowEntryHdl, SvxCheckListBox *, EMPTYARG )
{
SvLBoxEntry* pSelEntry = aCheckLB.FirstSelected();
if (pSelEntry)
{
sal_Bool bChecked = aCheckLB.IsChecked((sal_uInt16)aCheckLB.GetModel()->GetAbsPos(pSelEntry));
aSettingsGroupFL.Enable( bChecked );
aCategoryText.Enable( bChecked );
aCategoryBox.Enable( bChecked );
aFormatText.Enable( bChecked );
aFormatBox.Enable( bChecked );
sal_Bool bNumSep = bChecked && aLbCaptionOrder.GetSelectEntryPos() == 1;
aNumberingSeparatorED.Enable( bNumSep );
aNumberingSeparatorFT.Enable( bNumSep );
aTextText.Enable( bChecked );
aTextEdit.Enable( bChecked );
aPosText.Enable( bChecked );
aPosBox.Enable( bChecked );
aNumCaptFL.Enable( bChecked );
aFtLevel.Enable( bChecked );
aLbLevel.Enable( bChecked );
aFtDelim.Enable( bChecked );
aEdDelim.Enable( bChecked );
aCategoryFL.Enable( bChecked );
aCharStyleFT.Enable( bChecked );
aCharStyleLB.Enable( bChecked );
aApplyBorderCB.Enable( bChecked );
aPreview.Enable( bChecked );
SwWrtShell *pSh = ::GetActiveWrtShell();
InsCaptionOpt* pOpt = (InsCaptionOpt*)pSelEntry->GetUserData();
aCategoryBox.Clear();
aCategoryBox.InsertEntry( sNone );
if (pSh)
{
sal_uInt16 nCount = pMgr->GetFldTypeCount();
for (sal_uInt16 i = 0; i < nCount; i++)
{
SwFieldType *pType = pMgr->GetFldType( USHRT_MAX, i );
if( pType->Which() == RES_SETEXPFLD &&
((SwSetExpFieldType *) pType)->GetType() & nsSwGetSetExpType::GSE_SEQ )
aCategoryBox.InsertEntry(SwBoxEntry(pType->GetName()));
}
}
else
{
aCategoryBox.InsertEntry(SwBoxEntry(sIllustration));
aCategoryBox.InsertEntry(SwBoxEntry(sTable));
aCategoryBox.InsertEntry(SwBoxEntry(sText));
aCategoryBox.InsertEntry(SwBoxEntry(sDrawing));
}
if(pOpt->GetCategory().Len())
aCategoryBox.SetText(pOpt->GetCategory());
else
aCategoryBox.SetText( sNone );
if (pOpt->GetCategory().Len() &&
aCategoryBox.GetEntryPos(pOpt->GetCategory()) == COMBOBOX_ENTRY_NOTFOUND)
aCategoryBox.InsertEntry(pOpt->GetCategory());
if (!aCategoryBox.GetText().Len())
{
sal_uInt16 nPos = 0;
switch(pOpt->GetObjType())
{
case OLE_CAP:
case GRAPHIC_CAP: nPos = 1; break;
case TABLE_CAP: nPos = 2; break;
case FRAME_CAP: nPos = 3; break;
}
aCategoryBox.SetText(aCategoryBox.GetEntry(nPos).GetName());
}
for (sal_uInt16 i = 0; i < aFormatBox.GetEntryCount(); i++)
{
if (pOpt->GetNumType() == (sal_uInt16)(sal_uLong)aFormatBox.GetEntryData(i))
{
aFormatBox.SelectEntryPos(i);
break;
}
}
aTextEdit.SetText(pOpt->GetCaption());
aPosBox.Clear();
switch (pOpt->GetObjType())
{
case GRAPHIC_CAP:
case TABLE_CAP:
case OLE_CAP:
aPosBox.InsertEntry(sAbove);
aPosBox.InsertEntry(sBelow);
break;
case FRAME_CAP:
aPosBox.InsertEntry(sBegin);
aPosBox.InsertEntry(sEnd);
break;
}
aPosBox.SelectEntryPos(pOpt->GetPos());
aPosBox.Enable( pOpt->GetObjType() != GRAPHIC_CAP &&
pOpt->GetObjType() != OLE_CAP &&
aPosText.IsEnabled() );
aPosBox.SelectEntryPos(pOpt->GetPos());
sal_uInt16 nLevelPos = ( pOpt->GetLevel() < MAXLEVEL ) ? pOpt->GetLevel() + 1 : 0;
aLbLevel.SelectEntryPos( nLevelPos );
aEdDelim.SetText(pOpt->GetSeparator());
aNumberingSeparatorED.SetText( pOpt->GetNumSeparator() );
if(pOpt->GetCharacterStyle().Len())
aCharStyleLB.SelectEntry( pOpt->GetCharacterStyle() );
else
aCharStyleLB.SelectEntryPos( 0 );
aApplyBorderCB.Enable( aCategoryBox.IsEnabled() &&
pOpt->GetObjType() != TABLE_CAP && pOpt->GetObjType() != FRAME_CAP );
aApplyBorderCB.Check( pOpt->CopyAttributes() );
}
ModifyHdl();
return 0;
}
/* -----------------26.10.98 11:06-------------------
*
* --------------------------------------------------*/
IMPL_LINK( SwCaptionOptPage, SaveEntryHdl, SvxCheckListBox *, EMPTYARG )
{
SvLBoxEntry* pEntry = aCheckLB.GetHdlEntry();
if (pEntry) // Alles speichern
SaveEntry(pEntry);
return 0;
}
/* -----------------05.11.98 16:23-------------------
*
* --------------------------------------------------*/
void SwCaptionOptPage::SaveEntry(SvLBoxEntry* pEntry)
{
if (pEntry)
{
InsCaptionOpt* pOpt = (InsCaptionOpt*)pEntry->GetUserData();
pOpt->UseCaption() = aCheckLB.IsChecked((sal_uInt16)aCheckLB.GetModel()->GetAbsPos(pEntry));
String aName( aCategoryBox.GetText() );
if(aName == sNone)
pOpt->SetCategory(aEmptyStr);
else
{
aName.EraseLeadingChars (' ');
aName.EraseTrailingChars(' ');
pOpt->SetCategory(aName);
}
pOpt->SetNumType((sal_uInt16)(sal_uLong)aFormatBox.GetEntryData(aFormatBox.GetSelectEntryPos()));
pOpt->SetCaption(aTextEdit.IsEnabled() ? aTextEdit.GetText() : aEmptyStr );
pOpt->SetPos(aPosBox.GetSelectEntryPos());
sal_uInt16 nPos = aLbLevel.GetSelectEntryPos();
sal_uInt16 nLevel = ( nPos > 0 && nPos != LISTBOX_ENTRY_NOTFOUND ) ? nPos - 1 : MAXLEVEL;
pOpt->SetLevel(nLevel);
pOpt->SetSeparator(aEdDelim.GetText());
pOpt->SetNumSeparator( aNumberingSeparatorED.GetText());
if(!aCharStyleLB.GetSelectEntryPos())
pOpt->SetCharacterStyle(aEmptyStr);
else
pOpt->SetCharacterStyle(aCharStyleLB.GetSelectEntry());
pOpt->CopyAttributes() = aApplyBorderCB.IsChecked();
}
}
/* -----------------26.10.98 11:06-------------------
*
* --------------------------------------------------*/
IMPL_LINK( SwCaptionOptPage, ModifyHdl, Edit *, EMPTYARG )
{
String sFldTypeName = aCategoryBox.GetText();
/*
SwFieldType* pType = sFldTypeName.Len() ? pMgr->GetFldType(RES_SETEXPFLD, sFldTypeName) : 0;
((SfxSingleTabDialog*)GetParent())->GetOKButton()->Enable( (!pType || ((SwSetExpFieldType*)pType)->GetType() == GSE_SEQ)
&& sFldTypeName.Len() != 0 );
*/
SfxSingleTabDialog *pDlg = (SfxSingleTabDialog *)GetParent();
PushButton *pBtn = pDlg->GetOKButton();
if (pBtn)
pBtn->Enable(sFldTypeName.Len() != 0);
sal_Bool bEnable = aCategoryBox.IsEnabled() && sFldTypeName != sNone;
aFormatText.Enable(bEnable);
aFormatBox.Enable(bEnable);
aTextText.Enable(bEnable);
aTextEdit.Enable(bEnable);
DrawSample();
return 0;
}
/* -----------------26.10.98 10:58-------------------
*
* --------------------------------------------------*/
IMPL_LINK_INLINE_START( SwCaptionOptPage, SelectHdl, ListBox *, EMPTYARG )
{
DrawSample();
return 0;
}
IMPL_LINK_INLINE_END( SwCaptionOptPage, SelectHdl, ListBox *, EMPTYARG )
/*-- 02.11.2007 10:00:36---------------------------------------------------
-----------------------------------------------------------------------*/
IMPL_LINK( SwCaptionOptPage, OrderHdl, ListBox*, pBox )
{
DrawSample();
sal_Int32 nPos = pBox->GetSelectEntryPos();
aNumberingSeparatorFT.Enable( nPos == 1 );
aNumberingSeparatorED.Enable( nPos == 1 );
return 0;
}
/* -----------------26.10.98 10:58-------------------
*
* --------------------------------------------------*/
void SwCaptionOptPage::DrawSample()
{
String aStr;
if( aCategoryBox.GetText() != sNone)
{
//#i61007# order of captions
bool bOrderNumberingFirst = aLbCaptionOrder.GetSelectEntryPos() == 1;
// Nummer
sal_uInt16 nNumFmt = (sal_uInt16)(sal_uLong)aFormatBox.GetEntryData(
aFormatBox.GetSelectEntryPos() );
if( SVX_NUM_NUMBER_NONE != nNumFmt )
{
//#i61007# order of captions
if( !bOrderNumberingFirst )
{
// Kategorie
aStr += aCategoryBox.GetText();
aStr += ' ';
}
SwWrtShell *pSh = ::GetActiveWrtShell();
String sFldTypeName( aCategoryBox.GetText() );
if (pSh)
{
SwSetExpFieldType* pFldType = (SwSetExpFieldType*)pMgr->GetFldType(
RES_SETEXPFLD, sFldTypeName );
if( pFldType && pFldType->GetOutlineLvl() < MAXLEVEL )
{
sal_uInt8 nLvl = pFldType->GetOutlineLvl();
SwNumberTree::tNumberVector aNumVector;
for( sal_uInt8 i = 0; i <= nLvl; ++i )
aNumVector.push_back(1);
String sNumber( pSh->GetOutlineNumRule()->MakeNumString(
aNumVector, sal_False ));
if( sNumber.Len() )
(aStr += sNumber) += pFldType->GetDelimiter();
}
}
switch( nNumFmt )
{
case SVX_NUM_CHARS_UPPER_LETTER: aStr += 'A'; break;
case SVX_NUM_CHARS_UPPER_LETTER_N: aStr += 'A'; break;
case SVX_NUM_CHARS_LOWER_LETTER: aStr += 'a'; break;
case SVX_NUM_CHARS_LOWER_LETTER_N: aStr += 'a'; break;
case SVX_NUM_ROMAN_UPPER: aStr += 'I'; break;
case SVX_NUM_ROMAN_LOWER: aStr += 'i'; break;
//case ARABIC:
default: aStr += '1'; break;
}
}
//#i61007# order of captions
if( bOrderNumberingFirst )
{
aStr += aNumberingSeparatorED.GetText();
aStr += aCategoryBox.GetText();
}
aStr += aTextEdit.GetText();
}
aPreview.SetPreviewText( aStr );
}
/*------------------------------------------------------------------------
Beschreibung: ComboBox ohne Spaces
------------------------------------------------------------------------*/
void CaptionComboBox::KeyInput(const KeyEvent& rEvt)
{
if( rEvt.GetKeyCode().GetCode() != KEY_SPACE )
SwComboBox::KeyInput(rEvt);
}