1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_cui.hxx" 26 27 // include --------------------------------------------------------------- 28 29 #include <sfx2/app.hxx> 30 #include <tools/shl.hxx> 31 #include <svtools/ruler.hxx> 32 #include <svx/dialogs.hrc> 33 #include <svx/dialogs.hrc> 34 35 #define _SVX_TABSTPGE_CXX 36 37 #include <cuires.hrc> 38 #include "tabstpge.hrc" 39 #include <editeng/lrspitem.hxx> 40 #include "tabstpge.hxx" 41 #include <dialmgr.hxx> 42 #include "svx/dlgutil.hxx" 43 #include <sfx2/module.hxx> 44 #include <svl/cjkoptions.hxx> 45 #include <unotools/localedatawrapper.hxx> 46 #include <comphelper/processfactory.hxx> 47 #include <sfx2/request.hxx> //CHINA001 48 #include <svl/intitem.hxx> //add CHINA001 49 50 // class TabWin_Impl ----------------------------------------------------- 51 52 class TabWin_Impl : public Window 53 { 54 private: 55 sal_uInt16 nTabStyle; 56 57 public: 58 TabWin_Impl( Window* pParent, const ResId& rId, sal_uInt16 nStyle ) : 59 Window( pParent, rId ), 60 nTabStyle( nStyle ) {} 61 62 virtual void Paint( const Rectangle& rRect ); 63 }; 64 65 // static ---------------------------------------------------------------- 66 67 static sal_uInt16 pRanges[] = 68 { 69 SID_ATTR_TABSTOP, 70 SID_ATTR_TABSTOP_OFFSET, 71 0 72 }; 73 74 // C-Funktion ------------------------------------------------------------ 75 76 void FillUpWithDefTabs_Impl( long nDefDist, SvxTabStopItem& rTabs ) 77 { 78 if( rTabs.Count() ) 79 return; 80 { 81 SvxTabStop aSwTabStop( nDefDist, SVX_TAB_ADJUST_DEFAULT ); 82 rTabs.Insert( aSwTabStop ); 83 } 84 } 85 86 // class TabWin_Impl ----------------------------------------------------- 87 88 void TabWin_Impl::Paint( const Rectangle& ) 89 { 90 // Tabulatoren malen 91 Point aPnt; 92 Size aSize = GetOutputSizePixel(); 93 aPnt.X() = aSize.Width() / 2; 94 aPnt.Y() = aSize.Height() / 2; 95 Ruler::DrawTab( this, aPnt, nTabStyle ); 96 } 97 98 // class SvxTabulatorTabPage --------------------------------------------- 99 100 SvxTabulatorTabPage::SvxTabulatorTabPage( Window* pParent, 101 const SfxItemSet& rAttr ): 102 103 SfxTabPage( pParent, CUI_RES( RID_SVXPAGE_TABULATOR ), rAttr ), 104 105 aTabLabel ( this, CUI_RES( FL_TABPOS ) ), 106 aTabBox ( this, CUI_RES( ED_TABPOS ) ), 107 aTabLabelVert ( this, CUI_RES( FL_TABPOS_VERT ) ), 108 aTabTypeLabel ( this, CUI_RES( FL_TABTYPE ) ), 109 aLeftTab ( this, CUI_RES( BTN_TABTYPE_LEFT ) ), 110 aRightTab ( this, CUI_RES( BTN_TABTYPE_RIGHT ) ), 111 aCenterTab ( this, CUI_RES( BTN_TABTYPE_CENTER ) ), 112 aDezTab ( this, CUI_RES( BTN_TABTYPE_DECIMAL ) ), 113 pLeftWin ( new TabWin_Impl( this, CUI_RES( WIN_TABLEFT ), (sal_uInt16)(RULER_TAB_LEFT|WB_HORZ) ) ), 114 pRightWin ( new TabWin_Impl( this, CUI_RES( WIN_TABRIGHT ), (sal_uInt16)(RULER_TAB_RIGHT|WB_HORZ) ) ), 115 pCenterWin ( new TabWin_Impl( this, CUI_RES( WIN_TABCENTER ), (sal_uInt16)(RULER_TAB_CENTER|WB_HORZ) ) ), 116 pDezWin ( new TabWin_Impl( this, CUI_RES( WIN_TABDECIMAL ), (sal_uInt16)(RULER_TAB_DECIMAL|WB_HORZ) ) ), 117 aDezCharLabel ( this, CUI_RES( FT_TABTYPE_DECCHAR ) ), 118 aDezChar ( this, CUI_RES( ED_TABTYPE_DECCHAR ) ), 119 aFillLabel ( this, CUI_RES( FL_FILLCHAR ) ), 120 aNoFillChar ( this, CUI_RES( BTN_FILLCHAR_NO ) ), 121 aFillPoints ( this, CUI_RES( BTN_FILLCHAR_POINTS ) ), 122 aFillDashLine ( this, CUI_RES( BTN_FILLCHAR_DASHLINE ) ), 123 aFillSolidLine ( this, CUI_RES( BTN_FILLCHAR_UNDERSCORE ) ), 124 aFillSpecial ( this, CUI_RES( BTN_FILLCHAR_OTHER ) ), 125 aFillChar ( this, CUI_RES( ED_FILLCHAR_OTHER ) ), 126 aNewBtn ( this, CUI_RES( BTN_NEW ) ), 127 aDelAllBtn ( this, CUI_RES( BTN_DELALL ) ), 128 aDelBtn ( this, CUI_RES( BTN_DEL ) ), 129 130 aAktTab ( 0 ), 131 aNewTabs ( 0, 0, SVX_TAB_ADJUST_LEFT, GetWhich( SID_ATTR_TABSTOP ) ), 132 nDefDist ( 0 ), 133 eDefUnit( FUNIT_100TH_MM ), 134 bCheck ( sal_False ) 135 136 { 137 SvtCJKOptions aCJKOptions; 138 if(aCJKOptions.IsAsianTypographyEnabled()) 139 { 140 aLeftTab .SetText(String(CUI_RES( ST_LEFTTAB_ASIAN ))); 141 aRightTab .SetText(String(CUI_RES( ST_RIGHTTAB_ASIAN ))); 142 } 143 144 aFillChar.SetAccessibleName(String(CUI_RES( ST_FILLCHAR_OTHER ))); 145 // diese Page braucht ExchangeSupport 146 SetExchangeSupport(); 147 148 149 // Metrik einstellen 150 FieldUnit eFUnit = GetModuleFieldUnit( rAttr ); 151 SetFieldUnit( aTabBox, eFUnit ); 152 153 // Buttons initialisieren 154 aNewBtn.SetClickHdl( LINK( this,SvxTabulatorTabPage, NewHdl_Impl ) ); 155 aDelBtn.SetClickHdl( LINK( this,SvxTabulatorTabPage, DelHdl_Impl ) ); 156 aDelAllBtn.SetClickHdl( LINK( this,SvxTabulatorTabPage, DelAllHdl_Impl ) ); 157 158 Link aLink = LINK( this, SvxTabulatorTabPage, TabTypeCheckHdl_Impl ); 159 aLeftTab.SetClickHdl( aLink ); 160 aRightTab.SetClickHdl( aLink ); 161 aDezTab.SetClickHdl( aLink ); 162 aCenterTab.SetClickHdl( aLink ); 163 164 aDezChar.SetLoseFocusHdl( LINK( this, SvxTabulatorTabPage, GetDezCharHdl_Impl ) ); 165 aDezChar.SetMaxTextLen(1); 166 aDezChar.Disable(); 167 aDezCharLabel.Disable(); 168 169 aLink = LINK( this, SvxTabulatorTabPage, FillTypeCheckHdl_Impl ); 170 aNoFillChar.SetClickHdl( aLink ); 171 aFillPoints.SetClickHdl( aLink ); 172 aFillDashLine.SetClickHdl( aLink ); 173 aFillSolidLine.SetClickHdl( aLink ); 174 aFillSpecial.SetClickHdl( aLink ); 175 aFillChar.SetLoseFocusHdl( LINK( this, SvxTabulatorTabPage, GetFillCharHdl_Impl ) ); 176 aFillChar.SetMaxTextLen(1); 177 aFillChar.Disable(); 178 179 aTabBox.SetDoubleClickHdl( LINK( this, SvxTabulatorTabPage, SelectHdl_Impl ) ); 180 aTabBox.SetModifyHdl( LINK( this, SvxTabulatorTabPage, ModifyHdl_Impl ) ); 181 182 aLeftTab.SetAccessibleRelationMemberOf( &aTabTypeLabel ); 183 aRightTab.SetAccessibleRelationMemberOf( &aTabTypeLabel ); 184 aCenterTab.SetAccessibleRelationMemberOf( &aTabTypeLabel ); 185 aDezTab.SetAccessibleRelationMemberOf( &aTabTypeLabel ); 186 aDezCharLabel.SetAccessibleRelationMemberOf( &aTabTypeLabel ); 187 aDezChar.SetAccessibleRelationMemberOf( &aTabTypeLabel ); 188 189 aNoFillChar.SetAccessibleRelationMemberOf( &aFillLabel ); 190 aFillPoints.SetAccessibleRelationMemberOf( &aFillLabel ); 191 aFillDashLine.SetAccessibleRelationMemberOf( &aFillLabel ); 192 aFillSolidLine.SetAccessibleRelationMemberOf( &aFillLabel ); 193 aFillSpecial.SetAccessibleRelationMemberOf( &aFillLabel ); 194 aFillChar.SetAccessibleRelationMemberOf( &aFillLabel ); 195 196 aFillChar.SetAccessibleRelationLabeledBy(&aFillSpecial); 197 198 // das Default-Dezimalzeichen vom System holen 199 LocaleDataWrapper aLocaleWrapper( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLocale() ); 200 aAktTab.GetDecimal() = aLocaleWrapper.getNumDecimalSep().GetChar(0); 201 FreeResource(); 202 } 203 204 // ----------------------------------------------------------------------- 205 206 SvxTabulatorTabPage::~SvxTabulatorTabPage() 207 { 208 delete pLeftWin; 209 delete pRightWin; 210 delete pCenterWin; 211 delete pDezWin; 212 } 213 214 // ----------------------------------------------------------------------- 215 216 sal_uInt16* SvxTabulatorTabPage::GetRanges() 217 { 218 return pRanges; 219 } 220 221 // ----------------------------------------------------------------------- 222 223 sal_Bool SvxTabulatorTabPage::FillItemSet( SfxItemSet& rSet ) 224 { 225 sal_Bool bModified = sal_False; 226 227 // Hier die Werte aus den Controls eintueten 228 if ( aNewBtn.IsEnabled() ) 229 NewHdl_Impl( 0 ); 230 231 // call at first the LoseFocus-Handler 232 GetDezCharHdl_Impl( &aDezChar ); 233 GetFillCharHdl_Impl( &aFillChar ); 234 235 FillUpWithDefTabs_Impl( nDefDist, aNewTabs ); 236 SfxItemPool* pPool = rSet.GetPool(); 237 MapUnit eUnit = (MapUnit)pPool->GetMetric( GetWhich( SID_ATTR_TABSTOP ) ); 238 const SfxPoolItem* pOld = GetOldItem( rSet, SID_ATTR_TABSTOP ); 239 240 if ( MAP_100TH_MM != eUnit ) 241 { 242 // Wenn sich im ItemSet ein LRSpaceItem mit negativen Erstzeileneinzug 243 // befindet, muss im TabStopItem auf der Position 0 ein DefTab sein. 244 const SfxPoolItem* pLRSpace; 245 // wenn nicht im neuen Set, dann vielleicht im alten 246 if ( SFX_ITEM_SET != 247 rSet.GetItemState( GetWhich( SID_ATTR_LRSPACE ), sal_True, &pLRSpace ) ) 248 pLRSpace = GetOldItem( rSet, SID_ATTR_LRSPACE ); 249 250 if ( pLRSpace && ( (SvxLRSpaceItem*)pLRSpace )->GetTxtFirstLineOfst() < 0 ) 251 { 252 SvxTabStop aNull( 0, SVX_TAB_ADJUST_DEFAULT ); 253 aNewTabs.Insert( aNull ); 254 } 255 256 SvxTabStopItem aTmp( aNewTabs ); 257 aTmp.Remove( 0, aTmp.Count() ); 258 259 for ( sal_uInt16 i = 0; i < aNewTabs.Count(); ++i ) 260 { 261 SvxTabStop aTmpStop = aNewTabs[i]; 262 aTmpStop.GetTabPos() = 263 LogicToLogic( aTmpStop.GetTabPos(), MAP_100TH_MM, eUnit ); 264 aTmp.Insert( aTmpStop ); 265 } 266 267 if ( !pOld || !( *( (SvxTabStopItem*)pOld ) == aTmp ) ) 268 { 269 rSet.Put( aTmp ); 270 bModified = sal_True; 271 } 272 } 273 else if ( !pOld || !( *( (SvxTabStopItem*)pOld ) == aNewTabs ) ) 274 { 275 rSet.Put( aNewTabs ); 276 bModified = sal_True; 277 } 278 return bModified; 279 } 280 281 // ----------------------------------------------------------------------- 282 283 SfxTabPage* SvxTabulatorTabPage::Create( Window* pParent, 284 const SfxItemSet& rSet) 285 { 286 return ( new SvxTabulatorTabPage( pParent, rSet ) ); 287 } 288 289 // ----------------------------------------------------------------------- 290 291 void SvxTabulatorTabPage::Reset( const SfxItemSet& rSet ) 292 { 293 SfxItemPool* pPool = rSet.GetPool(); 294 MapUnit eUnit = (MapUnit)pPool->GetMetric( GetWhich( SID_ATTR_TABSTOP ) ); 295 296 // Aktuelle Tabs 297 const SfxPoolItem* pItem = GetItem( rSet, SID_ATTR_TABSTOP ); 298 299 if ( pItem ) 300 { 301 if ( MAP_100TH_MM != eUnit ) 302 { 303 SvxTabStopItem aTmp( *( (const SvxTabStopItem*)pItem ) ); 304 aNewTabs.Remove( 0, aNewTabs.Count() ); 305 306 for ( sal_uInt16 i = 0; i < aTmp.Count(); ++i ) 307 { 308 SvxTabStop aTmpStop = aTmp[i]; 309 aTmpStop.GetTabPos() = 310 LogicToLogic( aTmpStop.GetTabPos(), eUnit, MAP_100TH_MM ); 311 aNewTabs.Insert( aTmpStop ); 312 } 313 } 314 else 315 aNewTabs = *( (const SvxTabStopItem*)pItem ); 316 } 317 else 318 aNewTabs.Remove( 0, aNewTabs.Count() ); 319 320 // Default-Tab - Abstand 321 nDefDist = SVX_TAB_DEFDIST; 322 pItem = GetItem( rSet, SID_ATTR_TABSTOP_DEFAULTS ); 323 324 if ( pItem ) 325 nDefDist = LogicToLogic( 326 (long)((const SfxUInt16Item*)pItem)->GetValue(), eUnit, MAP_100TH_MM ); 327 328 // Aktuell selektierte Tab-Pos 329 sal_uInt16 nTabPos = 0; 330 pItem = GetItem( rSet, SID_ATTR_TABSTOP_POS ); 331 332 if ( pItem ) 333 nTabPos = ( (const SfxUInt16Item*)pItem )->GetValue(); 334 335 InitTabPos_Impl( nTabPos ); 336 } 337 338 // ----------------------------------------------------------------------- 339 340 void SvxTabulatorTabPage::DisableControls( const sal_uInt16 nFlag ) 341 { 342 if ( ( TABTYPE_LEFT & nFlag ) == TABTYPE_LEFT ) 343 { 344 aLeftTab.Disable(); 345 pLeftWin->Disable(); 346 } 347 if ( ( TABTYPE_RIGHT & nFlag ) == TABTYPE_RIGHT ) 348 { 349 aRightTab.Disable(); 350 pRightWin->Disable(); 351 } 352 if ( ( TABTYPE_CENTER & nFlag ) == TABTYPE_CENTER ) 353 { 354 aCenterTab.Disable(); 355 pCenterWin->Disable(); 356 } 357 if ( ( TABTYPE_DEZIMAL & nFlag ) == TABTYPE_DEZIMAL ) 358 { 359 aDezTab.Disable(); 360 pDezWin->Disable(); 361 aDezCharLabel.Disable(); 362 aDezChar.Disable(); 363 } 364 if ( ( TABTYPE_ALL & nFlag ) == TABTYPE_ALL ) 365 aTabTypeLabel.Disable(); 366 if ( ( TABFILL_NONE & nFlag ) == TABFILL_NONE ) 367 aNoFillChar.Disable(); 368 if ( ( TABFILL_POINT & nFlag ) == TABFILL_POINT ) 369 aFillPoints.Disable(); 370 if ( ( TABFILL_DASHLINE & nFlag ) == TABFILL_DASHLINE ) 371 aFillDashLine.Disable(); 372 if ( ( TABFILL_SOLIDLINE & nFlag ) == TABFILL_SOLIDLINE ) 373 aFillSolidLine.Disable(); 374 if ( ( TABFILL_SPECIAL & nFlag ) == TABFILL_SPECIAL ) 375 { 376 aFillSpecial.Disable(); 377 aFillChar.Disable(); 378 } 379 if ( ( TABFILL_ALL & nFlag ) == TABFILL_ALL ) 380 aFillLabel.Disable(); 381 } 382 383 // ----------------------------------------------------------------------- 384 385 int SvxTabulatorTabPage::DeactivatePage( SfxItemSet* _pSet ) 386 { 387 if ( _pSet ) 388 FillItemSet( *_pSet ); 389 return LEAVE_PAGE; 390 } 391 392 // ----------------------------------------------------------------------- 393 394 void SvxTabulatorTabPage::InitTabPos_Impl( sal_uInt16 nTabPos ) 395 { 396 aTabBox.Clear(); 397 398 long nOffset = 0; 399 const SfxPoolItem* pItem = 0; 400 if ( GetItemSet().GetItemState( SID_ATTR_TABSTOP_OFFSET, sal_True, &pItem ) 401 == SFX_ITEM_SET ) 402 { 403 nOffset = ( (const SfxInt32Item*)pItem )->GetValue(); 404 MapUnit eUnit = (MapUnit)GetItemSet().GetPool()->GetMetric( GetWhich( SID_ATTR_TABSTOP ) ); 405 nOffset = OutputDevice::LogicToLogic( nOffset, eUnit, MAP_100TH_MM ); 406 } 407 408 // Aktuelle TabPos korrigieren und Defaults-Tabs 409 for ( sal_uInt16 i = 0; i < aNewTabs.Count(); i++ ) 410 { 411 if ( aNewTabs[i].GetAdjustment() != SVX_TAB_ADJUST_DEFAULT ) 412 { 413 aTabBox.InsertValue( aTabBox.Normalize( 414 aNewTabs[i].GetTabPos() + nOffset ), eDefUnit ); 415 } 416 else 417 aNewTabs.Remove( i-- ); 418 } 419 420 // aktuellen Tabulator auswaehlen 421 const sal_uInt16 nSize = aNewTabs.Count(); 422 423 if ( nTabPos >= nSize ) 424 nTabPos = 0; 425 426 // alle RadioButtons erstmal ausschalten 427 aLeftTab.Check( sal_True ); 428 aNoFillChar.Check( sal_True ); 429 430 if( aTabBox.GetEntryCount() > 0 ) 431 { 432 aTabBox.SetText( aTabBox.GetEntry( nTabPos ) ); 433 aAktTab = aNewTabs[nTabPos]; 434 435 SetFillAndTabType_Impl(); 436 aNewBtn.Disable(); 437 aDelBtn.Enable(); 438 } 439 else 440 { // kein Eintrag dann ist 0 der Default-Wert 441 aTabBox.SetValue( 0, eDefUnit ); 442 443 aNewBtn.Enable(); 444 aDelBtn.Disable(); 445 } 446 } 447 448 // ----------------------------------------------------------------------- 449 450 void SvxTabulatorTabPage::SetFillAndTabType_Impl() 451 { 452 RadioButton* pTypeBtn = 0; 453 RadioButton* pFillBtn = 0; 454 455 aDezChar.Disable(); 456 aDezCharLabel.Disable(); 457 458 if ( aAktTab.GetAdjustment() == SVX_TAB_ADJUST_LEFT ) 459 pTypeBtn = &aLeftTab; 460 else if ( aAktTab.GetAdjustment() == SVX_TAB_ADJUST_RIGHT ) 461 pTypeBtn = &aRightTab; 462 else if ( aAktTab.GetAdjustment() == SVX_TAB_ADJUST_DECIMAL ) 463 { 464 pTypeBtn = &aDezTab; 465 aDezChar.Enable(); 466 aDezCharLabel.Enable(); 467 aDezChar.SetText( String( (sal_Unicode)aAktTab.GetDecimal() ) ); 468 } 469 else if ( aAktTab.GetAdjustment() == SVX_TAB_ADJUST_CENTER ) 470 pTypeBtn = &aCenterTab; 471 472 if ( pTypeBtn ) 473 pTypeBtn->Check(); 474 475 aFillChar.Disable(); 476 aFillChar.SetText( String() ); 477 478 if ( aAktTab.GetFill() == ' ' ) 479 pFillBtn = &aNoFillChar; 480 else if ( aAktTab.GetFill() == '-' ) 481 pFillBtn = &aFillDashLine; 482 else if ( aAktTab.GetFill() == '_' ) 483 pFillBtn = &aFillSolidLine; 484 else if ( aAktTab.GetFill() == '.' ) 485 pFillBtn = &aFillPoints; 486 else 487 { 488 pFillBtn = &aFillSpecial; 489 aFillChar.Enable(); 490 aFillChar.SetText( String( (sal_Unicode)aAktTab.GetFill() ) ); 491 } 492 pFillBtn->Check(); 493 } 494 495 // ----------------------------------------------------------------------- 496 497 IMPL_LINK( SvxTabulatorTabPage, NewHdl_Impl, Button *, pBtn ) 498 { 499 // Einen neuen Hinzufuegen und Selectieren 500 // Wert aus der Anzeige holen 501 long nVal = static_cast<long>(aTabBox.Denormalize( aTabBox.GetValue( eDefUnit ) )); 502 503 // Wenn der pBtn == 0 && der Value == 0 dann keinen Tab Erzeugen 504 // weil ueber OK erzeugt 505 if ( nVal == 0 && pBtn == 0 ) 506 return 0; 507 508 long nOffset = 0; 509 const SfxPoolItem* pItem = 0; 510 511 if ( GetItemSet().GetItemState( SID_ATTR_TABSTOP_OFFSET, sal_True, &pItem ) == 512 SFX_ITEM_SET ) 513 { 514 nOffset = ( (const SfxInt32Item*)pItem )->GetValue(); 515 MapUnit eUnit = (MapUnit)GetItemSet().GetPool()->GetMetric( GetWhich( SID_ATTR_TABSTOP ) ); 516 nOffset = OutputDevice::LogicToLogic( nOffset, eUnit, MAP_100TH_MM ); 517 } 518 const long nReal = nVal - nOffset; 519 sal_uInt16 nSize = aTabBox.GetEntryCount(); 520 521 sal_uInt16 i; 522 for( i = 0; i < nSize; i++ ) 523 { 524 if ( nReal < aNewTabs[i].GetTabPos() ) 525 break; 526 } 527 528 // ListBox-Eintrag vornehmen 529 aTabBox.InsertValue( aTabBox.Normalize( nVal ), eDefUnit, i ); 530 aAktTab.GetTabPos() = nReal; 531 SvxTabAdjust eAdj = SVX_TAB_ADJUST_LEFT; 532 533 if ( aRightTab.IsChecked() ) 534 eAdj = SVX_TAB_ADJUST_RIGHT; 535 else if ( aCenterTab.IsChecked() ) 536 eAdj = SVX_TAB_ADJUST_CENTER; 537 else if ( aDezTab.IsChecked() ) 538 eAdj = SVX_TAB_ADJUST_DECIMAL; 539 540 aAktTab.GetAdjustment() = eAdj; 541 aNewTabs.Insert( aAktTab ); 542 543 aNewBtn.Disable(); 544 aDelBtn.Enable(); 545 aTabBox.GrabFocus(); 546 547 // falls kein RadioButton geclickt wurde, 548 // muss trotzdem geputtet werden 549 bCheck |= sal_True; 550 // set the selection into the position Edit 551 aTabBox.SetSelection(Selection(0, aTabBox.GetText().Len())); 552 return 0; 553 } 554 555 // ----------------------------------------------------------------------- 556 557 IMPL_LINK( SvxTabulatorTabPage, DelHdl_Impl, Button *, EMPTYARG ) 558 { 559 sal_uInt16 nPos = aTabBox.GetValuePos( aTabBox.GetValue() ); 560 561 if ( nPos == COMBOBOX_ENTRY_NOTFOUND ) 562 return 0; 563 564 if ( aTabBox.GetEntryCount() == 1 ) 565 { 566 DelAllHdl_Impl( 0 ); 567 return 0; 568 } 569 570 // Tab loeschen 571 aTabBox.RemoveEntry( nPos ); 572 aNewTabs.Remove( nPos ); 573 574 // aAktTab neu setzen 575 const sal_uInt16 nSize = aNewTabs.Count(); 576 577 if ( nSize > 0 ) 578 { 579 // Pos korrigieren 580 nPos = ( ( nSize - 1 ) >= nPos) ? nPos : nPos - 1; 581 aTabBox.SetValue( aTabBox.GetValue( nPos ) ); 582 aAktTab = aNewTabs[nPos]; 583 } 584 585 // Falls keine Tabs Enable Disable Controls 586 if ( aTabBox.GetEntryCount() == 0 ) 587 { 588 aDelBtn.Disable(); 589 aNewBtn.Enable(); 590 aTabBox.GrabFocus(); 591 } 592 593 // falls kein RadioButton geclickt wurde, 594 // muss trotzdem geputtet werden 595 bCheck |= sal_True; 596 return 0; 597 } 598 599 // ----------------------------------------------------------------------- 600 601 IMPL_LINK( SvxTabulatorTabPage, DelAllHdl_Impl, Button *, EMPTYARG ) 602 { 603 if ( aNewTabs.Count() ) 604 { 605 aNewTabs = SvxTabStopItem( 0 ); 606 InitTabPos_Impl(); 607 608 // damit in FillItemSet() geputtet wird 609 bCheck |= sal_True; 610 } 611 return 0; 612 } 613 614 // ----------------------------------------------------------------------- 615 616 IMPL_LINK( SvxTabulatorTabPage, TabTypeCheckHdl_Impl, RadioButton *, pBox ) 617 { 618 bCheck |= sal_True; 619 SvxTabAdjust eAdj; 620 aDezChar.Disable(); 621 aDezCharLabel.Disable(); 622 aDezChar.SetText( String() ); 623 624 if ( pBox == &aLeftTab ) 625 eAdj = SVX_TAB_ADJUST_LEFT; 626 else if ( pBox == &aRightTab ) 627 eAdj = SVX_TAB_ADJUST_RIGHT; 628 else if ( pBox == &aCenterTab ) 629 eAdj = SVX_TAB_ADJUST_CENTER; 630 else 631 { 632 eAdj = SVX_TAB_ADJUST_DECIMAL; 633 aDezChar.Enable(); 634 aDezCharLabel.Enable(); 635 aDezChar.SetText( String( (sal_Unicode)aAktTab.GetDecimal() ) ); 636 } 637 638 aAktTab.GetAdjustment() = eAdj; 639 sal_uInt16 nPos = aTabBox.GetValuePos( aTabBox.GetValue( eDefUnit ), eDefUnit ); 640 641 if ( nPos != COMBOBOX_ENTRY_NOTFOUND ) 642 { 643 aNewTabs.Remove( nPos ); 644 aNewTabs.Insert( aAktTab ); 645 } 646 return 0; 647 } 648 649 // ----------------------------------------------------------------------- 650 651 IMPL_LINK( SvxTabulatorTabPage, FillTypeCheckHdl_Impl, RadioButton *, pBox ) 652 { 653 bCheck |= sal_True; 654 sal_uInt8 cFill = ' '; 655 aFillChar.SetText( String() ); 656 aFillChar.Disable(); 657 658 if( pBox == &aFillSpecial ) 659 aFillChar.Enable(); 660 else if ( pBox == &aNoFillChar ) 661 cFill = ' '; 662 else if ( pBox == &aFillSolidLine ) 663 cFill = '_'; 664 else if ( pBox == &aFillPoints ) 665 cFill = '.'; 666 else if ( pBox == &aFillDashLine ) 667 cFill = '-'; 668 669 aAktTab.GetFill() = cFill; 670 sal_uInt16 nPos = aTabBox.GetValuePos( aTabBox.GetValue( eDefUnit ), eDefUnit ); 671 672 if ( nPos != COMBOBOX_ENTRY_NOTFOUND ) 673 { 674 aNewTabs.Remove( nPos ); 675 aNewTabs.Insert( aAktTab ); 676 } 677 return 0; 678 } 679 680 // ----------------------------------------------------------------------- 681 682 IMPL_LINK( SvxTabulatorTabPage, GetFillCharHdl_Impl, Edit *, pEdit ) 683 { 684 String aChar( pEdit->GetText() ); 685 686 if ( aChar.Len() > 0 ) 687 aAktTab.GetFill() = aChar.GetChar( 0 ); 688 689 const sal_uInt16 nPos = aTabBox.GetValuePos( aTabBox.GetValue( eDefUnit ), eDefUnit); 690 if ( nPos != COMBOBOX_ENTRY_NOTFOUND ) 691 { 692 aNewTabs.Remove( nPos ); 693 aNewTabs.Insert( aAktTab ); 694 } 695 return 0; 696 } 697 698 // ----------------------------------------------------------------------- 699 700 IMPL_LINK( SvxTabulatorTabPage, GetDezCharHdl_Impl, Edit *, pEdit ) 701 { 702 String aChar( pEdit->GetText() ); 703 if ( aChar.Len() > 0 && ( aChar.GetChar( 0 ) >= ' ')) 704 aAktTab.GetDecimal() = aChar.GetChar( 0 ); 705 706 sal_uInt16 nPos = aTabBox.GetValuePos( aTabBox.GetValue( eDefUnit ), eDefUnit ); 707 if ( nPos != COMBOBOX_ENTRY_NOTFOUND ) 708 { 709 aNewTabs.Remove( nPos ); 710 aNewTabs.Insert( aAktTab ); 711 } 712 return 0; 713 } 714 715 // ----------------------------------------------------------------------- 716 717 IMPL_LINK( SvxTabulatorTabPage, SelectHdl_Impl, MetricBox *, EMPTYARG ) 718 { 719 sal_uInt16 nPos = aTabBox.GetValuePos( aTabBox.GetValue( eDefUnit ), eDefUnit ); 720 if ( nPos != COMBOBOX_ENTRY_NOTFOUND ) 721 { 722 aAktTab = aNewTabs[nPos]; 723 aNewBtn.Disable(); 724 SetFillAndTabType_Impl(); 725 } 726 return 0; 727 } 728 729 // ----------------------------------------------------------------------- 730 731 IMPL_LINK( SvxTabulatorTabPage, ModifyHdl_Impl, MetricBox *, EMPTYARG ) 732 { 733 sal_uInt16 nPos = aTabBox.GetValuePos( aTabBox.GetValue( eDefUnit ), eDefUnit ); 734 if ( nPos != COMBOBOX_ENTRY_NOTFOUND ) 735 { 736 aAktTab = aNewTabs[nPos]; 737 SetFillAndTabType_Impl(); 738 739 aAktTab.GetTabPos() = 740 static_cast<long>(aTabBox.Denormalize( aTabBox.GetValue( eDefUnit ) )); 741 742 aNewBtn.Disable(); 743 aDelBtn.Enable(); 744 return 0; 745 } 746 aNewBtn.Enable(); 747 aDelBtn.Disable(); 748 return 0; 749 } 750 //add CHINA001 Begin 751 void SvxTabulatorTabPage::PageCreated(SfxAllItemSet aSet) 752 { 753 SFX_ITEMSET_ARG (&aSet,pControlItem,SfxUInt16Item,SID_SVXTABULATORTABPAGE_CONTROLFLAGS,sal_False); 754 if (pControlItem) 755 DisableControls(pControlItem->GetValue()); 756 } 757 //end of CHINA001 758