blob: fc377f4348cb12121a32b9f1a47efc6dcaadf4e8 [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_cui.hxx"
// include ---------------------------------------------------------------
#include <sfx2/app.hxx>
#include <tools/shl.hxx>
#include <svtools/ruler.hxx>
#include <svx/dialogs.hrc>
#include <svx/dialogs.hrc>
#define _SVX_TABSTPGE_CXX
#include <cuires.hrc>
#include "tabstpge.hrc"
#include <editeng/lrspitem.hxx>
#include "tabstpge.hxx"
#include <dialmgr.hxx>
#include "svx/dlgutil.hxx"
#include <sfx2/module.hxx>
#include <svl/cjkoptions.hxx>
#include <unotools/localedatawrapper.hxx>
#include <comphelper/processfactory.hxx>
#include <sfx2/request.hxx> //CHINA001
#include <svl/intitem.hxx> //add CHINA001
// class TabWin_Impl -----------------------------------------------------
class TabWin_Impl : public Window
{
private:
sal_uInt16 nTabStyle;
public:
TabWin_Impl( Window* pParent, const ResId& rId, sal_uInt16 nStyle ) :
Window( pParent, rId ),
nTabStyle( nStyle ) {}
virtual void Paint( const Rectangle& rRect );
};
// static ----------------------------------------------------------------
static sal_uInt16 pRanges[] =
{
SID_ATTR_TABSTOP,
SID_ATTR_TABSTOP_OFFSET,
0
};
// C-Funktion ------------------------------------------------------------
void FillUpWithDefTabs_Impl( long nDefDist, SvxTabStopItem& rTabs )
{
if( rTabs.Count() )
return;
{
SvxTabStop aSwTabStop( nDefDist, SVX_TAB_ADJUST_DEFAULT );
rTabs.Insert( aSwTabStop );
}
}
// class TabWin_Impl -----------------------------------------------------
void TabWin_Impl::Paint( const Rectangle& )
{
// Tabulatoren malen
Point aPnt;
Size aSize = GetOutputSizePixel();
aPnt.X() = aSize.Width() / 2;
aPnt.Y() = aSize.Height() / 2;
Ruler::DrawTab( this, aPnt, nTabStyle );
}
// class SvxTabulatorTabPage ---------------------------------------------
SvxTabulatorTabPage::SvxTabulatorTabPage( Window* pParent,
const SfxItemSet& rAttr ):
SfxTabPage( pParent, CUI_RES( RID_SVXPAGE_TABULATOR ), rAttr ),
aTabLabel ( this, CUI_RES( FL_TABPOS ) ),
aTabBox ( this, CUI_RES( ED_TABPOS ) ),
aTabLabelVert ( this, CUI_RES( FL_TABPOS_VERT ) ),
aTabTypeLabel ( this, CUI_RES( FL_TABTYPE ) ),
aLeftTab ( this, CUI_RES( BTN_TABTYPE_LEFT ) ),
aRightTab ( this, CUI_RES( BTN_TABTYPE_RIGHT ) ),
aCenterTab ( this, CUI_RES( BTN_TABTYPE_CENTER ) ),
aDezTab ( this, CUI_RES( BTN_TABTYPE_DECIMAL ) ),
pLeftWin ( new TabWin_Impl( this, CUI_RES( WIN_TABLEFT ), (sal_uInt16)(RULER_TAB_LEFT|WB_HORZ) ) ),
pRightWin ( new TabWin_Impl( this, CUI_RES( WIN_TABRIGHT ), (sal_uInt16)(RULER_TAB_RIGHT|WB_HORZ) ) ),
pCenterWin ( new TabWin_Impl( this, CUI_RES( WIN_TABCENTER ), (sal_uInt16)(RULER_TAB_CENTER|WB_HORZ) ) ),
pDezWin ( new TabWin_Impl( this, CUI_RES( WIN_TABDECIMAL ), (sal_uInt16)(RULER_TAB_DECIMAL|WB_HORZ) ) ),
aDezCharLabel ( this, CUI_RES( FT_TABTYPE_DECCHAR ) ),
aDezChar ( this, CUI_RES( ED_TABTYPE_DECCHAR ) ),
aFillLabel ( this, CUI_RES( FL_FILLCHAR ) ),
aNoFillChar ( this, CUI_RES( BTN_FILLCHAR_NO ) ),
aFillPoints ( this, CUI_RES( BTN_FILLCHAR_POINTS ) ),
aFillDashLine ( this, CUI_RES( BTN_FILLCHAR_DASHLINE ) ),
aFillSolidLine ( this, CUI_RES( BTN_FILLCHAR_UNDERSCORE ) ),
aFillSpecial ( this, CUI_RES( BTN_FILLCHAR_OTHER ) ),
aFillChar ( this, CUI_RES( ED_FILLCHAR_OTHER ) ),
aNewBtn ( this, CUI_RES( BTN_NEW ) ),
aDelAllBtn ( this, CUI_RES( BTN_DELALL ) ),
aDelBtn ( this, CUI_RES( BTN_DEL ) ),
aAktTab ( 0 ),
aNewTabs ( 0, 0, SVX_TAB_ADJUST_LEFT, GetWhich( SID_ATTR_TABSTOP ) ),
nDefDist ( 0 ),
eDefUnit( FUNIT_100TH_MM ),
bCheck ( sal_False )
{
SvtCJKOptions aCJKOptions;
if(aCJKOptions.IsAsianTypographyEnabled())
{
aLeftTab .SetText(String(CUI_RES( ST_LEFTTAB_ASIAN )));
aRightTab .SetText(String(CUI_RES( ST_RIGHTTAB_ASIAN )));
}
aFillChar.SetAccessibleName(String(CUI_RES( ST_FILLCHAR_OTHER )));
// diese Page braucht ExchangeSupport
SetExchangeSupport();
// Metrik einstellen
FieldUnit eFUnit = GetModuleFieldUnit( rAttr );
SetFieldUnit( aTabBox, eFUnit );
// Buttons initialisieren
aNewBtn.SetClickHdl( LINK( this,SvxTabulatorTabPage, NewHdl_Impl ) );
aDelBtn.SetClickHdl( LINK( this,SvxTabulatorTabPage, DelHdl_Impl ) );
aDelAllBtn.SetClickHdl( LINK( this,SvxTabulatorTabPage, DelAllHdl_Impl ) );
Link aLink = LINK( this, SvxTabulatorTabPage, TabTypeCheckHdl_Impl );
aLeftTab.SetClickHdl( aLink );
aRightTab.SetClickHdl( aLink );
aDezTab.SetClickHdl( aLink );
aCenterTab.SetClickHdl( aLink );
aDezChar.SetLoseFocusHdl( LINK( this, SvxTabulatorTabPage, GetDezCharHdl_Impl ) );
aDezChar.SetMaxTextLen(1);
aDezChar.Disable();
aDezCharLabel.Disable();
aLink = LINK( this, SvxTabulatorTabPage, FillTypeCheckHdl_Impl );
aNoFillChar.SetClickHdl( aLink );
aFillPoints.SetClickHdl( aLink );
aFillDashLine.SetClickHdl( aLink );
aFillSolidLine.SetClickHdl( aLink );
aFillSpecial.SetClickHdl( aLink );
aFillChar.SetLoseFocusHdl( LINK( this, SvxTabulatorTabPage, GetFillCharHdl_Impl ) );
aFillChar.SetMaxTextLen(1);
aFillChar.Disable();
aTabBox.SetDoubleClickHdl( LINK( this, SvxTabulatorTabPage, SelectHdl_Impl ) );
aTabBox.SetModifyHdl( LINK( this, SvxTabulatorTabPage, ModifyHdl_Impl ) );
aLeftTab.SetAccessibleRelationMemberOf( &aTabTypeLabel );
aRightTab.SetAccessibleRelationMemberOf( &aTabTypeLabel );
aCenterTab.SetAccessibleRelationMemberOf( &aTabTypeLabel );
aDezTab.SetAccessibleRelationMemberOf( &aTabTypeLabel );
aDezCharLabel.SetAccessibleRelationMemberOf( &aTabTypeLabel );
aDezChar.SetAccessibleRelationMemberOf( &aTabTypeLabel );
aNoFillChar.SetAccessibleRelationMemberOf( &aFillLabel );
aFillPoints.SetAccessibleRelationMemberOf( &aFillLabel );
aFillDashLine.SetAccessibleRelationMemberOf( &aFillLabel );
aFillSolidLine.SetAccessibleRelationMemberOf( &aFillLabel );
aFillSpecial.SetAccessibleRelationMemberOf( &aFillLabel );
aFillChar.SetAccessibleRelationMemberOf( &aFillLabel );
aFillChar.SetAccessibleRelationLabeledBy(&aFillSpecial);
// das Default-Dezimalzeichen vom System holen
LocaleDataWrapper aLocaleWrapper( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLocale() );
aAktTab.GetDecimal() = aLocaleWrapper.getNumDecimalSep().GetChar(0);
FreeResource();
}
// -----------------------------------------------------------------------
SvxTabulatorTabPage::~SvxTabulatorTabPage()
{
delete pLeftWin;
delete pRightWin;
delete pCenterWin;
delete pDezWin;
}
// -----------------------------------------------------------------------
sal_uInt16* SvxTabulatorTabPage::GetRanges()
{
return pRanges;
}
// -----------------------------------------------------------------------
sal_Bool SvxTabulatorTabPage::FillItemSet( SfxItemSet& rSet )
{
sal_Bool bModified = sal_False;
// Hier die Werte aus den Controls eintueten
if ( aNewBtn.IsEnabled() )
NewHdl_Impl( 0 );
// call at first the LoseFocus-Handler
GetDezCharHdl_Impl( &aDezChar );
GetFillCharHdl_Impl( &aFillChar );
FillUpWithDefTabs_Impl( nDefDist, aNewTabs );
SfxItemPool* pPool = rSet.GetPool();
MapUnit eUnit = (MapUnit)pPool->GetMetric( GetWhich( SID_ATTR_TABSTOP ) );
const SfxPoolItem* pOld = GetOldItem( rSet, SID_ATTR_TABSTOP );
if ( MAP_100TH_MM != eUnit )
{
// Wenn sich im ItemSet ein LRSpaceItem mit negativen Erstzeileneinzug
// befindet, muss im TabStopItem auf der Position 0 ein DefTab sein.
const SfxPoolItem* pLRSpace;
// wenn nicht im neuen Set, dann vielleicht im alten
if ( SFX_ITEM_SET !=
rSet.GetItemState( GetWhich( SID_ATTR_LRSPACE ), sal_True, &pLRSpace ) )
pLRSpace = GetOldItem( rSet, SID_ATTR_LRSPACE );
if ( pLRSpace && ( (SvxLRSpaceItem*)pLRSpace )->GetTxtFirstLineOfst() < 0 )
{
SvxTabStop aNull( 0, SVX_TAB_ADJUST_DEFAULT );
aNewTabs.Insert( aNull );
}
SvxTabStopItem aTmp( aNewTabs );
aTmp.Remove( 0, aTmp.Count() );
for ( sal_uInt16 i = 0; i < aNewTabs.Count(); ++i )
{
SvxTabStop aTmpStop = aNewTabs[i];
aTmpStop.GetTabPos() =
LogicToLogic( aTmpStop.GetTabPos(), MAP_100TH_MM, eUnit );
aTmp.Insert( aTmpStop );
}
if ( !pOld || !( *( (SvxTabStopItem*)pOld ) == aTmp ) )
{
rSet.Put( aTmp );
bModified = sal_True;
}
}
else if ( !pOld || !( *( (SvxTabStopItem*)pOld ) == aNewTabs ) )
{
rSet.Put( aNewTabs );
bModified = sal_True;
}
return bModified;
}
// -----------------------------------------------------------------------
SfxTabPage* SvxTabulatorTabPage::Create( Window* pParent,
const SfxItemSet& rSet)
{
return ( new SvxTabulatorTabPage( pParent, rSet ) );
}
// -----------------------------------------------------------------------
void SvxTabulatorTabPage::Reset( const SfxItemSet& rSet )
{
SfxItemPool* pPool = rSet.GetPool();
MapUnit eUnit = (MapUnit)pPool->GetMetric( GetWhich( SID_ATTR_TABSTOP ) );
// Aktuelle Tabs
const SfxPoolItem* pItem = GetItem( rSet, SID_ATTR_TABSTOP );
if ( pItem )
{
if ( MAP_100TH_MM != eUnit )
{
SvxTabStopItem aTmp( *( (const SvxTabStopItem*)pItem ) );
aNewTabs.Remove( 0, aNewTabs.Count() );
for ( sal_uInt16 i = 0; i < aTmp.Count(); ++i )
{
SvxTabStop aTmpStop = aTmp[i];
aTmpStop.GetTabPos() =
LogicToLogic( aTmpStop.GetTabPos(), eUnit, MAP_100TH_MM );
aNewTabs.Insert( aTmpStop );
}
}
else
aNewTabs = *( (const SvxTabStopItem*)pItem );
}
else
aNewTabs.Remove( 0, aNewTabs.Count() );
// Default-Tab - Abstand
nDefDist = SVX_TAB_DEFDIST;
pItem = GetItem( rSet, SID_ATTR_TABSTOP_DEFAULTS );
if ( pItem )
nDefDist = LogicToLogic(
(long)((const SfxUInt16Item*)pItem)->GetValue(), eUnit, MAP_100TH_MM );
// Aktuell selektierte Tab-Pos
sal_uInt16 nTabPos = 0;
pItem = GetItem( rSet, SID_ATTR_TABSTOP_POS );
if ( pItem )
nTabPos = ( (const SfxUInt16Item*)pItem )->GetValue();
InitTabPos_Impl( nTabPos );
}
// -----------------------------------------------------------------------
void SvxTabulatorTabPage::DisableControls( const sal_uInt16 nFlag )
{
if ( ( TABTYPE_LEFT & nFlag ) == TABTYPE_LEFT )
{
aLeftTab.Disable();
pLeftWin->Disable();
}
if ( ( TABTYPE_RIGHT & nFlag ) == TABTYPE_RIGHT )
{
aRightTab.Disable();
pRightWin->Disable();
}
if ( ( TABTYPE_CENTER & nFlag ) == TABTYPE_CENTER )
{
aCenterTab.Disable();
pCenterWin->Disable();
}
if ( ( TABTYPE_DEZIMAL & nFlag ) == TABTYPE_DEZIMAL )
{
aDezTab.Disable();
pDezWin->Disable();
aDezCharLabel.Disable();
aDezChar.Disable();
}
if ( ( TABTYPE_ALL & nFlag ) == TABTYPE_ALL )
aTabTypeLabel.Disable();
if ( ( TABFILL_NONE & nFlag ) == TABFILL_NONE )
aNoFillChar.Disable();
if ( ( TABFILL_POINT & nFlag ) == TABFILL_POINT )
aFillPoints.Disable();
if ( ( TABFILL_DASHLINE & nFlag ) == TABFILL_DASHLINE )
aFillDashLine.Disable();
if ( ( TABFILL_SOLIDLINE & nFlag ) == TABFILL_SOLIDLINE )
aFillSolidLine.Disable();
if ( ( TABFILL_SPECIAL & nFlag ) == TABFILL_SPECIAL )
{
aFillSpecial.Disable();
aFillChar.Disable();
}
if ( ( TABFILL_ALL & nFlag ) == TABFILL_ALL )
aFillLabel.Disable();
}
// -----------------------------------------------------------------------
int SvxTabulatorTabPage::DeactivatePage( SfxItemSet* _pSet )
{
if ( _pSet )
FillItemSet( *_pSet );
return LEAVE_PAGE;
}
// -----------------------------------------------------------------------
void SvxTabulatorTabPage::InitTabPos_Impl( sal_uInt16 nTabPos )
{
aTabBox.Clear();
long nOffset = 0;
const SfxPoolItem* pItem = 0;
if ( GetItemSet().GetItemState( SID_ATTR_TABSTOP_OFFSET, sal_True, &pItem )
== SFX_ITEM_SET )
{
nOffset = ( (const SfxInt32Item*)pItem )->GetValue();
MapUnit eUnit = (MapUnit)GetItemSet().GetPool()->GetMetric( GetWhich( SID_ATTR_TABSTOP ) );
nOffset = OutputDevice::LogicToLogic( nOffset, eUnit, MAP_100TH_MM );
}
// Aktuelle TabPos korrigieren und Defaults-Tabs
for ( sal_uInt16 i = 0; i < aNewTabs.Count(); i++ )
{
if ( aNewTabs[i].GetAdjustment() != SVX_TAB_ADJUST_DEFAULT )
{
aTabBox.InsertValue( aTabBox.Normalize(
aNewTabs[i].GetTabPos() + nOffset ), eDefUnit );
}
else
aNewTabs.Remove( i-- );
}
// aktuellen Tabulator auswaehlen
const sal_uInt16 nSize = aNewTabs.Count();
if ( nTabPos >= nSize )
nTabPos = 0;
// alle RadioButtons erstmal ausschalten
aLeftTab.Check( sal_True );
aNoFillChar.Check( sal_True );
if( aTabBox.GetEntryCount() > 0 )
{
aTabBox.SetText( aTabBox.GetEntry( nTabPos ) );
aAktTab = aNewTabs[nTabPos];
SetFillAndTabType_Impl();
aNewBtn.Disable();
aDelBtn.Enable();
}
else
{ // kein Eintrag dann ist 0 der Default-Wert
aTabBox.SetValue( 0, eDefUnit );
aNewBtn.Enable();
aDelBtn.Disable();
}
}
// -----------------------------------------------------------------------
void SvxTabulatorTabPage::SetFillAndTabType_Impl()
{
RadioButton* pTypeBtn = 0;
RadioButton* pFillBtn = 0;
aDezChar.Disable();
aDezCharLabel.Disable();
if ( aAktTab.GetAdjustment() == SVX_TAB_ADJUST_LEFT )
pTypeBtn = &aLeftTab;
else if ( aAktTab.GetAdjustment() == SVX_TAB_ADJUST_RIGHT )
pTypeBtn = &aRightTab;
else if ( aAktTab.GetAdjustment() == SVX_TAB_ADJUST_DECIMAL )
{
pTypeBtn = &aDezTab;
aDezChar.Enable();
aDezCharLabel.Enable();
aDezChar.SetText( String( (sal_Unicode)aAktTab.GetDecimal() ) );
}
else if ( aAktTab.GetAdjustment() == SVX_TAB_ADJUST_CENTER )
pTypeBtn = &aCenterTab;
if ( pTypeBtn )
pTypeBtn->Check();
aFillChar.Disable();
aFillChar.SetText( String() );
if ( aAktTab.GetFill() == ' ' )
pFillBtn = &aNoFillChar;
else if ( aAktTab.GetFill() == '-' )
pFillBtn = &aFillDashLine;
else if ( aAktTab.GetFill() == '_' )
pFillBtn = &aFillSolidLine;
else if ( aAktTab.GetFill() == '.' )
pFillBtn = &aFillPoints;
else
{
pFillBtn = &aFillSpecial;
aFillChar.Enable();
aFillChar.SetText( String( (sal_Unicode)aAktTab.GetFill() ) );
}
pFillBtn->Check();
}
// -----------------------------------------------------------------------
IMPL_LINK( SvxTabulatorTabPage, NewHdl_Impl, Button *, pBtn )
{
// Einen neuen Hinzufuegen und Selectieren
// Wert aus der Anzeige holen
long nVal = static_cast<long>(aTabBox.Denormalize( aTabBox.GetValue( eDefUnit ) ));
// Wenn der pBtn == 0 && der Value == 0 dann keinen Tab Erzeugen
// weil ueber OK erzeugt
if ( nVal == 0 && pBtn == 0 )
return 0;
long nOffset = 0;
const SfxPoolItem* pItem = 0;
if ( GetItemSet().GetItemState( SID_ATTR_TABSTOP_OFFSET, sal_True, &pItem ) ==
SFX_ITEM_SET )
{
nOffset = ( (const SfxInt32Item*)pItem )->GetValue();
MapUnit eUnit = (MapUnit)GetItemSet().GetPool()->GetMetric( GetWhich( SID_ATTR_TABSTOP ) );
nOffset = OutputDevice::LogicToLogic( nOffset, eUnit, MAP_100TH_MM );
}
const long nReal = nVal - nOffset;
sal_uInt16 nSize = aTabBox.GetEntryCount();
sal_uInt16 i;
for( i = 0; i < nSize; i++ )
{
if ( nReal < aNewTabs[i].GetTabPos() )
break;
}
// ListBox-Eintrag vornehmen
aTabBox.InsertValue( aTabBox.Normalize( nVal ), eDefUnit, i );
aAktTab.GetTabPos() = nReal;
SvxTabAdjust eAdj = SVX_TAB_ADJUST_LEFT;
if ( aRightTab.IsChecked() )
eAdj = SVX_TAB_ADJUST_RIGHT;
else if ( aCenterTab.IsChecked() )
eAdj = SVX_TAB_ADJUST_CENTER;
else if ( aDezTab.IsChecked() )
eAdj = SVX_TAB_ADJUST_DECIMAL;
aAktTab.GetAdjustment() = eAdj;
aNewTabs.Insert( aAktTab );
aNewBtn.Disable();
aDelBtn.Enable();
aTabBox.GrabFocus();
// falls kein RadioButton geclickt wurde,
// muss trotzdem geputtet werden
bCheck |= sal_True;
// set the selection into the position Edit
aTabBox.SetSelection(Selection(0, aTabBox.GetText().Len()));
return 0;
}
// -----------------------------------------------------------------------
IMPL_LINK( SvxTabulatorTabPage, DelHdl_Impl, Button *, EMPTYARG )
{
sal_uInt16 nPos = aTabBox.GetValuePos( aTabBox.GetValue() );
if ( nPos == COMBOBOX_ENTRY_NOTFOUND )
return 0;
if ( aTabBox.GetEntryCount() == 1 )
{
DelAllHdl_Impl( 0 );
return 0;
}
// Tab loeschen
aTabBox.RemoveEntry( nPos );
aNewTabs.Remove( nPos );
// aAktTab neu setzen
const sal_uInt16 nSize = aNewTabs.Count();
if ( nSize > 0 )
{
// Pos korrigieren
nPos = ( ( nSize - 1 ) >= nPos) ? nPos : nPos - 1;
aTabBox.SetValue( aTabBox.GetValue( nPos ) );
aAktTab = aNewTabs[nPos];
}
// Falls keine Tabs Enable Disable Controls
if ( aTabBox.GetEntryCount() == 0 )
{
aDelBtn.Disable();
aNewBtn.Enable();
aTabBox.GrabFocus();
}
// falls kein RadioButton geclickt wurde,
// muss trotzdem geputtet werden
bCheck |= sal_True;
return 0;
}
// -----------------------------------------------------------------------
IMPL_LINK( SvxTabulatorTabPage, DelAllHdl_Impl, Button *, EMPTYARG )
{
if ( aNewTabs.Count() )
{
aNewTabs = SvxTabStopItem( 0 );
InitTabPos_Impl();
// damit in FillItemSet() geputtet wird
bCheck |= sal_True;
}
return 0;
}
// -----------------------------------------------------------------------
IMPL_LINK( SvxTabulatorTabPage, TabTypeCheckHdl_Impl, RadioButton *, pBox )
{
bCheck |= sal_True;
SvxTabAdjust eAdj;
aDezChar.Disable();
aDezCharLabel.Disable();
aDezChar.SetText( String() );
if ( pBox == &aLeftTab )
eAdj = SVX_TAB_ADJUST_LEFT;
else if ( pBox == &aRightTab )
eAdj = SVX_TAB_ADJUST_RIGHT;
else if ( pBox == &aCenterTab )
eAdj = SVX_TAB_ADJUST_CENTER;
else
{
eAdj = SVX_TAB_ADJUST_DECIMAL;
aDezChar.Enable();
aDezCharLabel.Enable();
aDezChar.SetText( String( (sal_Unicode)aAktTab.GetDecimal() ) );
}
aAktTab.GetAdjustment() = eAdj;
sal_uInt16 nPos = aTabBox.GetValuePos( aTabBox.GetValue( eDefUnit ), eDefUnit );
if ( nPos != COMBOBOX_ENTRY_NOTFOUND )
{
aNewTabs.Remove( nPos );
aNewTabs.Insert( aAktTab );
}
return 0;
}
// -----------------------------------------------------------------------
IMPL_LINK( SvxTabulatorTabPage, FillTypeCheckHdl_Impl, RadioButton *, pBox )
{
bCheck |= sal_True;
sal_uInt8 cFill = ' ';
aFillChar.SetText( String() );
aFillChar.Disable();
if( pBox == &aFillSpecial )
aFillChar.Enable();
else if ( pBox == &aNoFillChar )
cFill = ' ';
else if ( pBox == &aFillSolidLine )
cFill = '_';
else if ( pBox == &aFillPoints )
cFill = '.';
else if ( pBox == &aFillDashLine )
cFill = '-';
aAktTab.GetFill() = cFill;
sal_uInt16 nPos = aTabBox.GetValuePos( aTabBox.GetValue( eDefUnit ), eDefUnit );
if ( nPos != COMBOBOX_ENTRY_NOTFOUND )
{
aNewTabs.Remove( nPos );
aNewTabs.Insert( aAktTab );
}
return 0;
}
// -----------------------------------------------------------------------
IMPL_LINK( SvxTabulatorTabPage, GetFillCharHdl_Impl, Edit *, pEdit )
{
String aChar( pEdit->GetText() );
if ( aChar.Len() > 0 )
aAktTab.GetFill() = aChar.GetChar( 0 );
const sal_uInt16 nPos = aTabBox.GetValuePos( aTabBox.GetValue( eDefUnit ), eDefUnit);
if ( nPos != COMBOBOX_ENTRY_NOTFOUND )
{
aNewTabs.Remove( nPos );
aNewTabs.Insert( aAktTab );
}
return 0;
}
// -----------------------------------------------------------------------
IMPL_LINK( SvxTabulatorTabPage, GetDezCharHdl_Impl, Edit *, pEdit )
{
String aChar( pEdit->GetText() );
if ( aChar.Len() > 0 && ( aChar.GetChar( 0 ) >= ' '))
aAktTab.GetDecimal() = aChar.GetChar( 0 );
sal_uInt16 nPos = aTabBox.GetValuePos( aTabBox.GetValue( eDefUnit ), eDefUnit );
if ( nPos != COMBOBOX_ENTRY_NOTFOUND )
{
aNewTabs.Remove( nPos );
aNewTabs.Insert( aAktTab );
}
return 0;
}
// -----------------------------------------------------------------------
IMPL_LINK( SvxTabulatorTabPage, SelectHdl_Impl, MetricBox *, EMPTYARG )
{
sal_uInt16 nPos = aTabBox.GetValuePos( aTabBox.GetValue( eDefUnit ), eDefUnit );
if ( nPos != COMBOBOX_ENTRY_NOTFOUND )
{
aAktTab = aNewTabs[nPos];
aNewBtn.Disable();
SetFillAndTabType_Impl();
}
return 0;
}
// -----------------------------------------------------------------------
IMPL_LINK( SvxTabulatorTabPage, ModifyHdl_Impl, MetricBox *, EMPTYARG )
{
sal_uInt16 nPos = aTabBox.GetValuePos( aTabBox.GetValue( eDefUnit ), eDefUnit );
if ( nPos != COMBOBOX_ENTRY_NOTFOUND )
{
aAktTab = aNewTabs[nPos];
SetFillAndTabType_Impl();
aAktTab.GetTabPos() =
static_cast<long>(aTabBox.Denormalize( aTabBox.GetValue( eDefUnit ) ));
aNewBtn.Disable();
aDelBtn.Enable();
return 0;
}
aNewBtn.Enable();
aDelBtn.Disable();
return 0;
}
//add CHINA001 Begin
void SvxTabulatorTabPage::PageCreated(SfxAllItemSet aSet)
{
SFX_ITEMSET_ARG (&aSet,pControlItem,SfxUInt16Item,SID_SVXTABULATORTABPAGE_CONTROLFLAGS,sal_False);
if (pControlItem)
DisableControls(pControlItem->GetValue());
}
//end of CHINA001