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_sw.hxx" 26 #ifdef SW_DLLIMPLEMENTATION 27 #undef SW_DLLIMPLEMENTATION 28 #endif 29 30 31 #include <tools/shl.hxx> 32 #include <swtypes.hxx> 33 #include <helpid.h> 34 #include <uiitems.hxx> 35 #include <modcfg.hxx> 36 #include "swmodule.hxx" 37 #include "usrpref.hxx" 38 #include "wrtsh.hxx" 39 #include "linkenum.hxx" 40 #include <uitool.hxx> 41 #include <view.hxx> 42 43 #include "globals.hrc" 44 #include "cmdid.h" 45 46 #include "optload.hrc" 47 #include "optload.hxx" 48 #include <svx/dlgutil.hxx> 49 #include <svx/htmlmode.hxx> 50 #include <fldmgr.hxx> 51 #include <poolfmt.hxx> 52 #include <expfld.hxx> 53 #include <caption.hxx> 54 #include <com/sun/star/document/PrinterIndependentLayout.hpp> 55 56 #include <svtools/insdlg.hxx> 57 #include <sot/clsids.hxx> 58 #include <unotools/configmgr.hxx> 59 #include <docsh.hxx> 60 #include <config.hrc> 61 #include <SwStyleNameMapper.hxx> 62 #include <numrule.hxx> 63 #include <SwNodeNum.hxx> 64 65 #include <doc.hxx> 66 #include <svl/cjkoptions.hxx> 67 68 using namespace ::com::sun::star; 69 70 /* -----------------22.10.98 15:12------------------- 71 * 72 * --------------------------------------------------*/ 73 SwLoadOptPage::SwLoadOptPage( Window* pParent, const SfxItemSet& rSet ) : 74 75 SfxTabPage( pParent, SW_RES( TP_OPTLOAD_PAGE ), rSet ), 76 77 aUpdateFL ( this, SW_RES( FL_UPDATE ) ), 78 aLinkFT ( this, SW_RES( FT_LINK ) ), 79 aAlwaysRB ( this, SW_RES( RB_ALWAYS ) ), 80 aRequestRB ( this, SW_RES( RB_REQUEST ) ), 81 aNeverRB ( this, SW_RES( RB_NEVER ) ), 82 83 aFieldFT ( this, SW_RES( FT_FIELD ) ), 84 aAutoUpdateFields ( this, SW_RES( CB_AUTO_UPDATE_FIELDS ) ), 85 aAutoUpdateCharts ( this, SW_RES( CB_AUTO_UPDATE_CHARTS ) ), 86 87 aSettingsFL ( this, SW_RES( FL_SETTINGS ) ), 88 aMetricFT ( this, SW_RES( FT_METRIC ) ), 89 aMetricLB ( this, SW_RES( LB_METRIC ) ), 90 aTabFT ( this, SW_RES( FT_TAB ) ), 91 aTabMF ( this, SW_RES( MF_TAB ) ), 92 aUseSquaredPageMode ( this, SW_RES( CB_USE_SQUARE_PAGE_MODE ) ), 93 94 pWrtShell ( NULL ), 95 bHTMLMode ( sal_False ), 96 nLastTab ( 0 ), 97 nOldLinkMode( MANUAL ) 98 99 { 100 FreeResource(); 101 102 SvxStringArray aMetricArr( SW_RES( STR_ARR_METRIC ) ); 103 for ( sal_uInt16 i = 0; i < aMetricArr.Count(); ++i ) 104 { 105 String sMetric = aMetricArr.GetStringByPos( i ); 106 FieldUnit eFUnit = (FieldUnit)aMetricArr.GetValue( i ); 107 108 switch ( eFUnit ) 109 { 110 case FUNIT_MM: 111 case FUNIT_CM: 112 case FUNIT_POINT: 113 case FUNIT_PICA: 114 case FUNIT_INCH: 115 { 116 // nur diese Metriken benutzen 117 sal_uInt16 nPos = aMetricLB.InsertEntry( sMetric ); 118 aMetricLB.SetEntryData( nPos, (void*)(long)eFUnit ); 119 } 120 default:; //prevent warning 121 } 122 } 123 aMetricLB.SetSelectHdl(LINK(this, SwLoadOptPage, MetricHdl)); 124 125 const SfxPoolItem* pItem; 126 if(SFX_ITEM_SET == rSet.GetItemState(SID_HTML_MODE, sal_False, &pItem ) 127 && ((SfxUInt16Item*)pItem)->GetValue() & HTMLMODE_ON) 128 { 129 aTabFT.Hide(); 130 aTabMF.Hide(); 131 } 132 133 SvtCJKOptions aCJKOptions; 134 if(!aCJKOptions.IsAsianTypographyEnabled()) 135 aUseSquaredPageMode.Hide(); 136 } 137 138 /*-----------------18.01.97 12.43------------------- 139 140 --------------------------------------------------*/ 141 142 SwLoadOptPage::~SwLoadOptPage() 143 { 144 } 145 146 /*-----------------18.01.97 12.43------------------- 147 148 --------------------------------------------------*/ 149 150 SfxTabPage* __EXPORT SwLoadOptPage::Create( Window* pParent, 151 const SfxItemSet& rAttrSet ) 152 { 153 return new SwLoadOptPage(pParent, rAttrSet ); 154 } 155 156 /*-----------------18.01.97 12.42------------------- 157 158 --------------------------------------------------*/ 159 160 sal_Bool __EXPORT SwLoadOptPage::FillItemSet( SfxItemSet& rSet ) 161 { 162 sal_Bool bRet = sal_False; 163 SwModule* pMod = SW_MOD(); 164 165 sal_uInt16 nNewLinkMode = AUTOMATIC; 166 if (aNeverRB.IsChecked()) 167 nNewLinkMode = NEVER; 168 else if (aRequestRB.IsChecked()) 169 nNewLinkMode = MANUAL; 170 171 SwFldUpdateFlags eFldFlags = aAutoUpdateFields.IsChecked() ? 172 aAutoUpdateCharts.IsChecked() ? AUTOUPD_FIELD_AND_CHARTS : AUTOUPD_FIELD_ONLY : AUTOUPD_OFF; 173 174 if(aAutoUpdateFields.IsChecked() != aAutoUpdateFields.GetSavedValue() || 175 aAutoUpdateCharts.IsChecked() != aAutoUpdateCharts.GetSavedValue()) 176 { 177 pMod->ApplyFldUpdateFlags(eFldFlags); 178 if(pWrtShell) 179 { 180 pWrtShell->SetFldUpdateFlags(eFldFlags); 181 pWrtShell->SetModified(); 182 } 183 } 184 185 if (nNewLinkMode != nOldLinkMode) 186 { 187 pMod->ApplyLinkMode(nNewLinkMode); 188 if (pWrtShell) 189 { 190 pWrtShell->SetLinkUpdMode( nNewLinkMode ); 191 pWrtShell->SetModified(); 192 } 193 194 bRet = sal_True; 195 } 196 197 const sal_uInt16 nMPos = aMetricLB.GetSelectEntryPos(); 198 if ( nMPos != aMetricLB.GetSavedValue() ) 199 { 200 // Doppel-Cast fuer VA3.0 201 sal_uInt16 nFieldUnit = (sal_uInt16)(long)aMetricLB.GetEntryData( nMPos ); 202 rSet.Put( SfxUInt16Item( SID_ATTR_METRIC, (sal_uInt16)nFieldUnit ) ); 203 bRet = sal_True; 204 } 205 206 if(aTabMF.IsVisible() && aTabMF.GetText() != aTabMF.GetSavedValue()) 207 { 208 rSet.Put(SfxUInt16Item(SID_ATTR_DEFTABSTOP, 209 (sal_uInt16)aTabMF.Denormalize(aTabMF.GetValue(FUNIT_TWIP)))); 210 bRet = sal_True; 211 } 212 213 sal_Bool bIsSquaredPageModeFlag = aUseSquaredPageMode.IsChecked(); 214 if ( bIsSquaredPageModeFlag != aUseSquaredPageMode.GetSavedValue() ) 215 { 216 pMod->ApplyDefaultPageMode( bIsSquaredPageModeFlag ); 217 if ( pWrtShell ) 218 { 219 SwDoc* pDoc = pWrtShell->GetDoc(); 220 pDoc->SetDefaultPageMode( bIsSquaredPageModeFlag ); 221 pWrtShell->SetModified(); 222 } 223 bRet = sal_True; 224 } 225 226 return bRet; 227 } 228 /*-----------------18.01.97 12.42------------------- 229 230 --------------------------------------------------*/ 231 void __EXPORT SwLoadOptPage::Reset( const SfxItemSet& rSet) 232 { 233 const SwMasterUsrPref* pUsrPref = SW_MOD()->GetUsrPref(sal_False); 234 const SfxPoolItem* pItem; 235 236 if(SFX_ITEM_SET == rSet.GetItemState(FN_PARAM_WRTSHELL, sal_False, &pItem)) 237 pWrtShell = (SwWrtShell*)((const SwPtrItem*)pItem)->GetValue(); 238 239 SwFldUpdateFlags eFldFlags = AUTOUPD_GLOBALSETTING; 240 nOldLinkMode = GLOBALSETTING; 241 if (pWrtShell) 242 { 243 eFldFlags = pWrtShell->GetFldUpdateFlags(sal_True); 244 nOldLinkMode = pWrtShell->GetLinkUpdMode(sal_True); 245 } 246 if(GLOBALSETTING == nOldLinkMode) 247 nOldLinkMode = pUsrPref->GetUpdateLinkMode(); 248 if(AUTOUPD_GLOBALSETTING == eFldFlags) 249 eFldFlags = pUsrPref->GetFldUpdateFlags(); 250 251 aAutoUpdateFields.Check(eFldFlags != AUTOUPD_OFF); 252 aAutoUpdateCharts.Check(eFldFlags == AUTOUPD_FIELD_AND_CHARTS); 253 254 switch (nOldLinkMode) 255 { 256 case NEVER: aNeverRB.Check(); break; 257 case MANUAL: aRequestRB.Check(); break; 258 case AUTOMATIC: aAlwaysRB.Check(); break; 259 } 260 261 aAutoUpdateFields.SaveValue(); 262 aAutoUpdateCharts.SaveValue(); 263 aMetricLB.SetNoSelection(); 264 if ( rSet.GetItemState( SID_ATTR_METRIC ) >= SFX_ITEM_AVAILABLE ) 265 { 266 const SfxUInt16Item& rItem = (SfxUInt16Item&)rSet.Get( SID_ATTR_METRIC ); 267 FieldUnit eFieldUnit = (FieldUnit)rItem.GetValue(); 268 269 for ( sal_uInt16 i = 0; i < aMetricLB.GetEntryCount(); ++i ) 270 { 271 if ( (int)(sal_IntPtr)aMetricLB.GetEntryData( i ) == (int)eFieldUnit ) 272 { 273 aMetricLB.SelectEntryPos( i ); 274 break; 275 } 276 } 277 ::SetFieldUnit(aTabMF, eFieldUnit); 278 } 279 aMetricLB.SaveValue(); 280 if(SFX_ITEM_SET == rSet.GetItemState(SID_ATTR_DEFTABSTOP, sal_False, &pItem)) 281 { 282 nLastTab = ((SfxUInt16Item*)pItem)->GetValue(); 283 aTabMF.SetValue(aTabMF.Normalize(nLastTab), FUNIT_TWIP); 284 } 285 aTabMF.SaveValue(); 286 287 if(SFX_ITEM_SET == rSet.GetItemState(SID_HTML_MODE, sal_False, &pItem)) 288 { 289 bHTMLMode = 0 != (((const SfxUInt16Item*)pItem)->GetValue() & HTMLMODE_ON); 290 } 291 292 //default page mode loading 293 if(pWrtShell) 294 { 295 sal_Bool bSquaredPageMode = pWrtShell->GetDoc()->IsSquaredPageMode(); 296 aUseSquaredPageMode.Check( bSquaredPageMode ); 297 aUseSquaredPageMode.SaveValue(); 298 } 299 } 300 /*-----------------13.01.97 14.44------------------- 301 Metric des Deftabstops umschalten 302 --------------------------------------------------*/ 303 304 IMPL_LINK(SwLoadOptPage, MetricHdl, ListBox*, EMPTYARG) 305 { 306 const sal_uInt16 nMPos = aMetricLB.GetSelectEntryPos(); 307 if(nMPos != USHRT_MAX) 308 { 309 // Doppel-Cast fuer VA3.0 310 FieldUnit eFieldUnit = (FieldUnit)(long)aMetricLB.GetEntryData( nMPos ); 311 sal_Bool bModified = aTabMF.IsModified(); 312 long nVal = bModified ? 313 sal::static_int_cast<sal_Int32, sal_Int64 >( aTabMF.Denormalize( aTabMF.GetValue( FUNIT_TWIP ) )) : 314 nLastTab; 315 ::SetFieldUnit( aTabMF, eFieldUnit ); 316 aTabMF.SetValue( aTabMF.Normalize( nVal ), FUNIT_TWIP ); 317 if(!bModified) 318 aTabMF.ClearModifyFlag(); 319 } 320 321 return 0; 322 } 323 /*********************************************************************/ 324 /* */ 325 /*********************************************************************/ 326 327 IMPL_LINK(SwLoadOptPage, CaptionHdl, PushButton*, EMPTYARG) 328 { 329 SwCaptionOptDlg aDlg(this, GetItemSet()); 330 aDlg.Execute(); 331 332 return 0; 333 } 334 335 /*-------------------------------------------------------------------- 336 Beschreibung: 337 --------------------------------------------------------------------*/ 338 339 SwCaptionOptDlg::SwCaptionOptDlg(Window* pParent, const SfxItemSet& rSet) : 340 SfxSingleTabDialog(pParent, rSet, 0) 341 { 342 // TabPage erzeugen 343 SetTabPage((SwCaptionOptPage*) SwCaptionOptPage::Create(this, rSet)); 344 } 345 346 /*-------------------------------------------------------------------- 347 Beschreibung: 348 --------------------------------------------------------------------*/ 349 350 SwCaptionOptDlg::~SwCaptionOptDlg() 351 { 352 } 353 354 /* -----------------22.10.98 15:12------------------- 355 * 356 * --------------------------------------------------*/ 357 358 SwCaptionPreview::SwCaptionPreview( Window* pParent, const ResId& rResId ) 359 : Window( pParent, rResId ) 360 { 361 maDrawPos = Point( 4, 6 ); 362 363 Wallpaper aBack( GetSettings().GetStyleSettings().GetWindowColor() ); 364 SetBackground( aBack ); 365 SetFillColor( aBack.GetColor() ); 366 SetLineColor( aBack.GetColor() ); 367 SetBorderStyle( WINDOW_BORDER_MONO ); 368 Font aFont(GetFont()); 369 aFont.SetHeight(aFont.GetHeight() * 120 / 100 ); 370 SetFont(aFont); 371 } 372 373 void SwCaptionPreview::SetPreviewText( const String& rText ) 374 { 375 if( rText != maText ) 376 { 377 maText = rText; 378 Invalidate(); 379 } 380 } 381 382 void SwCaptionPreview::Paint( const Rectangle& rRect ) 383 { 384 Window::Paint( rRect ); 385 386 DrawRect( Rectangle( Point( 0, 0 ), GetSizePixel() ) ); 387 DrawText( Point( 4, 6 ), maText ); 388 } 389 390 391 SwCaptionOptPage::SwCaptionOptPage( Window* pParent, const SfxItemSet& rSet ) 392 : SfxTabPage(pParent, SW_RES(TP_OPTCAPTION_PAGE), rSet), 393 aCheckFT (this, SW_RES(FT_OBJECTS )), 394 aCheckLB (this, SW_RES(CLB_OBJECTS )), 395 aFtCaptionOrder(this, SW_RES( FT_ORDER )), 396 aLbCaptionOrder(this, SW_RES( LB_ORDER )), 397 aPreview (this, SW_RES(WIN_PREVIEW )), 398 aSettingsGroupFL(this, SW_RES(FL_SETTINGS_2 )), 399 aCategoryText (this, SW_RES(TXT_CATEGORY )), 400 aCategoryBox (this, SW_RES(BOX_CATEGORY )), 401 aFormatText (this, SW_RES(TXT_FORMAT )), 402 aFormatBox (this, SW_RES(BOX_FORMAT )), 403 aNumberingSeparatorFT(this, SW_RES(FT_NUM_SEP )), 404 aNumberingSeparatorED(this, SW_RES(ED_NUM_SEP )), 405 aTextText (this, SW_RES(TXT_TEXT )), 406 aTextEdit (this, SW_RES(EDT_TEXT )), 407 aPosText (this, SW_RES(TXT_POS )), 408 aPosBox (this, SW_RES(BOX_POS )), 409 aNumCaptFL (this, SW_RES(FL_NUMCAPT )), 410 aFtLevel (this, SW_RES(FT_LEVEL )), 411 aLbLevel (this, SW_RES(LB_LEVEL )), 412 aFtDelim (this, SW_RES(FT_SEPARATOR )), 413 aEdDelim (this, SW_RES(ED_SEPARATOR )), 414 aCategoryFL (this, SW_RES(FL_CATEGORY )), 415 aCharStyleFT (this, SW_RES(FT_CHARSTYLE )), 416 aCharStyleLB (this, SW_RES(LB_CHARSTYLE )), 417 aApplyBorderCB (this, SW_RES(CB_APPLYBORDER)), 418 419 sSWTable (SW_RES(STR_TABLE )), 420 sSWFrame (SW_RES(STR_FRAME )), 421 sSWGraphic (SW_RES(STR_GRAPHIC )), 422 sOLE (SW_RES(STR_OLE )), 423 424 sBegin (SW_RESSTR(STR_BEGINNING )), 425 sEnd (SW_RESSTR(STR_END )), 426 sAbove (SW_RESSTR(STR_ABOVE )), 427 sBelow (SW_RESSTR(STR_CP_BELOW )), 428 sNone (SW_RESSTR( STR_CATEGORY_NONE )), 429 430 pMgr (new SwFldMgr()), 431 bHTMLMode(sal_False) 432 { 433 Wallpaper aBack( GetSettings().GetStyleSettings().GetWindowColor() ); 434 aPreview.SetBackground( aBack ); 435 436 SwStyleNameMapper::FillUIName( RES_POOLCOLL_LABEL_ABB, sIllustration ); 437 SwStyleNameMapper::FillUIName( RES_POOLCOLL_LABEL_TABLE, sTable ); 438 SwStyleNameMapper::FillUIName( RES_POOLCOLL_LABEL_FRAME, sText ); 439 SwStyleNameMapper::FillUIName( RES_POOLCOLL_LABEL_DRAWING, sDrawing ); 440 441 sal_uInt16 i, nCount; 442 SwWrtShell *pSh = ::GetActiveWrtShell(); 443 444 // aFormatBox 445 sal_uInt16 nSelFmt = SVX_NUM_ARABIC; 446 if (pSh) 447 { 448 nCount = pMgr->GetFldTypeCount(); 449 SwFieldType* pFldType; 450 for ( i = nCount; i; ) 451 if( ( pFldType = pMgr->GetFldType(USHRT_MAX, --i))->GetName() == 452 aCategoryBox.GetText() ) 453 { 454 nSelFmt = (sal_uInt16)((SwSetExpFieldType*)pFldType)->GetSeqFormat(); 455 break; 456 } 457 458 ::FillCharStyleListBox( aCharStyleLB, pSh->GetView().GetDocShell(), sal_True, sal_True ); 459 } 460 461 462 nCount = pMgr->GetFormatCount(TYP_SEQFLD, sal_False); 463 for ( i = 0; i < nCount; ++i ) 464 { 465 aFormatBox.InsertEntry( pMgr->GetFormatStr(TYP_SEQFLD, i) ); 466 sal_uInt16 nFmtId = pMgr->GetFormatId(TYP_SEQFLD, i); 467 aFormatBox.SetEntryData( i, reinterpret_cast<void*>(nFmtId) ); 468 if( nFmtId == nSelFmt ) 469 aFormatBox.SelectEntryPos( i ); 470 } 471 472 for (i = 0; i < MAXLEVEL; i++) 473 aLbLevel.InsertEntry(String::CreateFromInt32(i + 1)); 474 475 sal_Unicode nLvl = MAXLEVEL; 476 String sDelim( String::CreateFromAscii( ": " ) ); 477 478 if (pSh) 479 { 480 SwSetExpFieldType* pFldType = (SwSetExpFieldType*)pMgr->GetFldType( 481 RES_SETEXPFLD, aCategoryBox.GetText() ); 482 if( pFldType ) 483 { 484 sDelim = pFldType->GetDelimiter(); 485 nLvl = pFldType->GetOutlineLvl(); 486 } 487 } 488 489 aLbLevel.SelectEntryPos( nLvl < MAXLEVEL ? nLvl + 1 : 0 ); 490 aEdDelim.SetText( sDelim ); 491 492 aCheckLB.SetHelpId(HID_OPTCAPTION_CLB); 493 494 FreeResource(); 495 496 Link aLk = LINK( this, SwCaptionOptPage, ModifyHdl ); 497 aCategoryBox.SetModifyHdl( aLk ); 498 aNumberingSeparatorED.SetModifyHdl( aLk ); 499 aTextEdit .SetModifyHdl( aLk ); 500 501 aLk = LINK(this, SwCaptionOptPage, SelectHdl); 502 aCategoryBox.SetSelectHdl( aLk ); 503 aFormatBox .SetSelectHdl( aLk ); 504 505 aLbCaptionOrder.SetSelectHdl( LINK(this, SwCaptionOptPage, OrderHdl)); 506 507 aCheckLB.SetSelectHdl( LINK(this, SwCaptionOptPage, ShowEntryHdl) ); 508 aCheckLB.SetCheckButtonHdl( LINK(this, SwCaptionOptPage, ShowEntryHdl) ); 509 aCheckLB.SetDeselectHdl( LINK(this, SwCaptionOptPage, SaveEntryHdl) ); 510 } 511 512 /*-----------------18.01.97 12.43------------------- 513 514 --------------------------------------------------*/ 515 516 SwCaptionOptPage::~SwCaptionOptPage() 517 { 518 DelUserData(); 519 delete pMgr; 520 } 521 522 /*-----------------18.01.97 12.43------------------- 523 524 --------------------------------------------------*/ 525 526 SfxTabPage* SwCaptionOptPage::Create( Window* pParent, 527 const SfxItemSet& rAttrSet ) 528 { 529 return new SwCaptionOptPage(pParent, rAttrSet ); 530 } 531 532 /*-----------------18.01.97 12.42------------------- 533 534 --------------------------------------------------*/ 535 536 sal_Bool SwCaptionOptPage::FillItemSet( SfxItemSet& ) 537 { 538 sal_Bool bRet = sal_False; 539 SwModuleOptions* pModOpt = SW_MOD()->GetModuleConfig(); 540 541 SaveEntry(aCheckLB.FirstSelected()); // Aktuellen Eintrag uebernehmen 542 543 SvLBoxEntry* pEntry = aCheckLB.First(); 544 545 while (pEntry) 546 { 547 InsCaptionOpt* pData = (InsCaptionOpt*)pEntry->GetUserData(); 548 bRet |= pModOpt->SetCapOption(bHTMLMode, pData); 549 pEntry = aCheckLB.Next(pEntry); 550 } 551 552 sal_uInt16 nCheckCount = aCheckLB.GetCheckedEntryCount(); 553 pModOpt->SetInsWithCaption( bHTMLMode, nCheckCount > 0 ); 554 555 sal_Int32 nPos = aLbCaptionOrder.GetSelectEntryPos(); 556 pModOpt->SetCaptionOrderNumberingFirst(nPos == 1 ? sal_True : sal_False ); 557 558 return bRet; 559 } 560 561 /*-----------------18.01.97 12.42------------------- 562 563 --------------------------------------------------*/ 564 565 void SwCaptionOptPage::Reset( const SfxItemSet& rSet) 566 { 567 const SfxPoolItem* pItem; 568 if(SFX_ITEM_SET == rSet.GetItemState(SID_HTML_MODE, sal_False, &pItem)) 569 { 570 bHTMLMode = 0 != (((const SfxUInt16Item*)pItem)->GetValue() & HTMLMODE_ON); 571 } 572 573 DelUserData(); 574 aCheckLB.GetModel()->Clear(); // remove all entries 575 576 // Writer objects 577 sal_uInt16 nPos = 0; 578 aCheckLB.InsertEntry(sSWTable); 579 SetOptions(nPos++, TABLE_CAP); 580 aCheckLB.InsertEntry(sSWFrame); 581 SetOptions(nPos++, FRAME_CAP); 582 aCheckLB.InsertEntry(sSWGraphic); 583 SetOptions(nPos++, GRAPHIC_CAP); 584 585 // get Productname and -version 586 String sComplete, sWithoutVersion; 587 ::rtl::OUString sTemp; 588 uno::Any aAny = 589 ::utl::ConfigManager::GetDirectConfigProperty( ::utl::ConfigManager::PRODUCTNAME ); 590 if ( aAny >>= sTemp ) 591 { 592 sComplete = sTemp; 593 sWithoutVersion = sTemp; 594 aAny = ::utl::ConfigManager::GetDirectConfigProperty( ::utl::ConfigManager::PRODUCTVERSION ); 595 if ( !( aAny >>= sTemp ) ) 596 { 597 DBG_ERRORFILE( "Couldn't get PRODUCTVERSION variable" ); 598 } 599 else 600 { 601 sComplete += ' '; 602 sComplete += String( sTemp ); 603 } 604 } 605 else 606 { 607 DBG_ERRORFILE( "Couldn't get PRODUCTNAME variable" ); 608 } 609 610 SvObjectServerList aObjS; 611 aObjS.FillInsertObjects(); 612 aObjS.Remove( SvGlobalName( SO3_SW_CLASSID ) ); // remove Writer-ID 613 614 for ( sal_uLong i = 0; i < aObjS.Count(); ++i ) 615 { 616 const SvGlobalName &rOleId = aObjS[i].GetClassName(); 617 const String* pClassName = &aObjS[i].GetHumanName(); 618 if ( rOleId == SvGlobalName( SO3_OUT_CLASSID ) ) 619 pClassName = &sOLE; 620 String sClass( *pClassName ); 621 // don't show product version 622 sClass.SearchAndReplace( sComplete, sWithoutVersion ); 623 aCheckLB.InsertEntry( sClass ); 624 SetOptions( nPos++, OLE_CAP, &rOleId ); 625 } 626 aLbCaptionOrder.SelectEntryPos( 627 SW_MOD()->GetModuleConfig()->IsCaptionOrderNumberingFirst() ? 1 : 0); 628 ModifyHdl(); 629 } 630 631 /*-----------------18.01.97 12.42------------------- 632 633 --------------------------------------------------*/ 634 635 void SwCaptionOptPage::SetOptions(const sal_uInt16 nPos, 636 const SwCapObjType eObjType, const SvGlobalName *pOleId) 637 { 638 SwModuleOptions* pModOpt = SW_MOD()->GetModuleConfig(); 639 const InsCaptionOpt* pOpt = pModOpt->GetCapOption(bHTMLMode, eObjType, pOleId); 640 641 if (pOpt) 642 { 643 aCheckLB.SetEntryData(nPos, new InsCaptionOpt(*pOpt)); 644 aCheckLB.CheckEntryPos(nPos, pOpt->UseCaption()); 645 } 646 else 647 aCheckLB.SetEntryData(nPos, new InsCaptionOpt(eObjType, pOleId)); 648 } 649 650 /*-----------------18.01.97 12.42------------------- 651 652 --------------------------------------------------*/ 653 654 void SwCaptionOptPage::DelUserData() 655 { 656 SvLBoxEntry* pEntry = aCheckLB.First(); 657 658 while (pEntry) 659 { 660 delete (InsCaptionOpt*)pEntry->GetUserData(); 661 pEntry->SetUserData(0); 662 pEntry = aCheckLB.Next(pEntry); 663 } 664 } 665 666 /* -----------------26.10.98 11:06------------------- 667 * 668 * --------------------------------------------------*/ 669 670 IMPL_LINK( SwCaptionOptPage, ShowEntryHdl, SvxCheckListBox *, EMPTYARG ) 671 { 672 SvLBoxEntry* pSelEntry = aCheckLB.FirstSelected(); 673 674 if (pSelEntry) 675 { 676 sal_Bool bChecked = aCheckLB.IsChecked((sal_uInt16)aCheckLB.GetModel()->GetAbsPos(pSelEntry)); 677 678 aSettingsGroupFL.Enable( bChecked ); 679 aCategoryText.Enable( bChecked ); 680 aCategoryBox.Enable( bChecked ); 681 aFormatText.Enable( bChecked ); 682 aFormatBox.Enable( bChecked ); 683 sal_Bool bNumSep = bChecked && aLbCaptionOrder.GetSelectEntryPos() == 1; 684 aNumberingSeparatorED.Enable( bNumSep ); 685 aNumberingSeparatorFT.Enable( bNumSep ); 686 aTextText.Enable( bChecked ); 687 aTextEdit.Enable( bChecked ); 688 aPosText.Enable( bChecked ); 689 aPosBox.Enable( bChecked ); 690 aNumCaptFL.Enable( bChecked ); 691 aFtLevel.Enable( bChecked ); 692 aLbLevel.Enable( bChecked ); 693 aFtDelim.Enable( bChecked ); 694 aEdDelim.Enable( bChecked ); 695 aCategoryFL.Enable( bChecked ); 696 aCharStyleFT.Enable( bChecked ); 697 aCharStyleLB.Enable( bChecked ); 698 aApplyBorderCB.Enable( bChecked ); 699 aPreview.Enable( bChecked ); 700 701 SwWrtShell *pSh = ::GetActiveWrtShell(); 702 703 InsCaptionOpt* pOpt = (InsCaptionOpt*)pSelEntry->GetUserData(); 704 705 aCategoryBox.Clear(); 706 aCategoryBox.InsertEntry( sNone ); 707 if (pSh) 708 { 709 sal_uInt16 nCount = pMgr->GetFldTypeCount(); 710 711 for (sal_uInt16 i = 0; i < nCount; i++) 712 { 713 SwFieldType *pType = pMgr->GetFldType( USHRT_MAX, i ); 714 if( pType->Which() == RES_SETEXPFLD && 715 ((SwSetExpFieldType *) pType)->GetType() & nsSwGetSetExpType::GSE_SEQ ) 716 aCategoryBox.InsertEntry(SwBoxEntry(pType->GetName())); 717 } 718 } 719 else 720 { 721 aCategoryBox.InsertEntry(SwBoxEntry(sIllustration)); 722 aCategoryBox.InsertEntry(SwBoxEntry(sTable)); 723 aCategoryBox.InsertEntry(SwBoxEntry(sText)); 724 aCategoryBox.InsertEntry(SwBoxEntry(sDrawing)); 725 } 726 727 if(pOpt->GetCategory().Len()) 728 aCategoryBox.SetText(pOpt->GetCategory()); 729 else 730 aCategoryBox.SetText( sNone ); 731 if (pOpt->GetCategory().Len() && 732 aCategoryBox.GetEntryPos(pOpt->GetCategory()) == COMBOBOX_ENTRY_NOTFOUND) 733 aCategoryBox.InsertEntry(pOpt->GetCategory()); 734 if (!aCategoryBox.GetText().Len()) 735 { 736 sal_uInt16 nPos = 0; 737 switch(pOpt->GetObjType()) 738 { 739 case OLE_CAP: 740 case GRAPHIC_CAP: nPos = 1; break; 741 case TABLE_CAP: nPos = 2; break; 742 case FRAME_CAP: nPos = 3; break; 743 } 744 aCategoryBox.SetText(aCategoryBox.GetEntry(nPos).GetName()); 745 } 746 747 for (sal_uInt16 i = 0; i < aFormatBox.GetEntryCount(); i++) 748 { 749 if (pOpt->GetNumType() == (sal_uInt16)(sal_uLong)aFormatBox.GetEntryData(i)) 750 { 751 aFormatBox.SelectEntryPos(i); 752 break; 753 } 754 } 755 aTextEdit.SetText(pOpt->GetCaption()); 756 757 aPosBox.Clear(); 758 switch (pOpt->GetObjType()) 759 { 760 case GRAPHIC_CAP: 761 case TABLE_CAP: 762 case OLE_CAP: 763 aPosBox.InsertEntry(sAbove); 764 aPosBox.InsertEntry(sBelow); 765 break; 766 case FRAME_CAP: 767 aPosBox.InsertEntry(sBegin); 768 aPosBox.InsertEntry(sEnd); 769 break; 770 } 771 aPosBox.SelectEntryPos(pOpt->GetPos()); 772 aPosBox.Enable( pOpt->GetObjType() != GRAPHIC_CAP && 773 pOpt->GetObjType() != OLE_CAP && 774 aPosText.IsEnabled() ); 775 aPosBox.SelectEntryPos(pOpt->GetPos()); 776 777 sal_uInt16 nLevelPos = ( pOpt->GetLevel() < MAXLEVEL ) ? pOpt->GetLevel() + 1 : 0; 778 aLbLevel.SelectEntryPos( nLevelPos ); 779 aEdDelim.SetText(pOpt->GetSeparator()); 780 aNumberingSeparatorED.SetText( pOpt->GetNumSeparator() ); 781 if(pOpt->GetCharacterStyle().Len()) 782 aCharStyleLB.SelectEntry( pOpt->GetCharacterStyle() ); 783 else 784 aCharStyleLB.SelectEntryPos( 0 ); 785 aApplyBorderCB.Enable( aCategoryBox.IsEnabled() && 786 pOpt->GetObjType() != TABLE_CAP && pOpt->GetObjType() != FRAME_CAP ); 787 aApplyBorderCB.Check( pOpt->CopyAttributes() ); 788 } 789 790 ModifyHdl(); 791 792 return 0; 793 } 794 795 /* -----------------26.10.98 11:06------------------- 796 * 797 * --------------------------------------------------*/ 798 799 IMPL_LINK( SwCaptionOptPage, SaveEntryHdl, SvxCheckListBox *, EMPTYARG ) 800 { 801 SvLBoxEntry* pEntry = aCheckLB.GetHdlEntry(); 802 803 if (pEntry) // Alles speichern 804 SaveEntry(pEntry); 805 806 return 0; 807 } 808 809 /* -----------------05.11.98 16:23------------------- 810 * 811 * --------------------------------------------------*/ 812 813 void SwCaptionOptPage::SaveEntry(SvLBoxEntry* pEntry) 814 { 815 if (pEntry) 816 { 817 InsCaptionOpt* pOpt = (InsCaptionOpt*)pEntry->GetUserData(); 818 819 pOpt->UseCaption() = aCheckLB.IsChecked((sal_uInt16)aCheckLB.GetModel()->GetAbsPos(pEntry)); 820 String aName( aCategoryBox.GetText() ); 821 if(aName == sNone) 822 pOpt->SetCategory(aEmptyStr); 823 else 824 { 825 aName.EraseLeadingChars (' '); 826 aName.EraseTrailingChars(' '); 827 pOpt->SetCategory(aName); 828 } 829 pOpt->SetNumType((sal_uInt16)(sal_uLong)aFormatBox.GetEntryData(aFormatBox.GetSelectEntryPos())); 830 pOpt->SetCaption(aTextEdit.IsEnabled() ? aTextEdit.GetText() : aEmptyStr ); 831 pOpt->SetPos(aPosBox.GetSelectEntryPos()); 832 sal_uInt16 nPos = aLbLevel.GetSelectEntryPos(); 833 sal_uInt16 nLevel = ( nPos > 0 && nPos != LISTBOX_ENTRY_NOTFOUND ) ? nPos - 1 : MAXLEVEL; 834 pOpt->SetLevel(nLevel); 835 pOpt->SetSeparator(aEdDelim.GetText()); 836 pOpt->SetNumSeparator( aNumberingSeparatorED.GetText()); 837 if(!aCharStyleLB.GetSelectEntryPos()) 838 pOpt->SetCharacterStyle(aEmptyStr); 839 else 840 pOpt->SetCharacterStyle(aCharStyleLB.GetSelectEntry()); 841 pOpt->CopyAttributes() = aApplyBorderCB.IsChecked(); 842 } 843 } 844 845 /* -----------------26.10.98 11:06------------------- 846 * 847 * --------------------------------------------------*/ 848 849 IMPL_LINK( SwCaptionOptPage, ModifyHdl, Edit *, EMPTYARG ) 850 { 851 String sFldTypeName = aCategoryBox.GetText(); 852 /* 853 SwFieldType* pType = sFldTypeName.Len() ? pMgr->GetFldType(RES_SETEXPFLD, sFldTypeName) : 0; 854 855 ((SfxSingleTabDialog*)GetParent())->GetOKButton()->Enable( (!pType || ((SwSetExpFieldType*)pType)->GetType() == GSE_SEQ) 856 && sFldTypeName.Len() != 0 ); 857 */ 858 SfxSingleTabDialog *pDlg = (SfxSingleTabDialog *)GetParent(); 859 PushButton *pBtn = pDlg->GetOKButton(); 860 if (pBtn) 861 pBtn->Enable(sFldTypeName.Len() != 0); 862 sal_Bool bEnable = aCategoryBox.IsEnabled() && sFldTypeName != sNone; 863 864 aFormatText.Enable(bEnable); 865 aFormatBox.Enable(bEnable); 866 aTextText.Enable(bEnable); 867 aTextEdit.Enable(bEnable); 868 869 DrawSample(); 870 return 0; 871 } 872 873 /* -----------------26.10.98 10:58------------------- 874 * 875 * --------------------------------------------------*/ 876 877 IMPL_LINK_INLINE_START( SwCaptionOptPage, SelectHdl, ListBox *, EMPTYARG ) 878 { 879 DrawSample(); 880 return 0; 881 } 882 IMPL_LINK_INLINE_END( SwCaptionOptPage, SelectHdl, ListBox *, EMPTYARG ) 883 /*-- 02.11.2007 10:00:36--------------------------------------------------- 884 885 -----------------------------------------------------------------------*/ 886 IMPL_LINK( SwCaptionOptPage, OrderHdl, ListBox*, pBox ) 887 { 888 DrawSample(); 889 sal_Int32 nPos = pBox->GetSelectEntryPos(); 890 aNumberingSeparatorFT.Enable( nPos == 1 ); 891 aNumberingSeparatorED.Enable( nPos == 1 ); 892 return 0; 893 } 894 /* -----------------26.10.98 10:58------------------- 895 * 896 * --------------------------------------------------*/ 897 898 void SwCaptionOptPage::DrawSample() 899 { 900 String aStr; 901 902 if( aCategoryBox.GetText() != sNone) 903 { 904 //#i61007# order of captions 905 bool bOrderNumberingFirst = aLbCaptionOrder.GetSelectEntryPos() == 1; 906 // Nummer 907 sal_uInt16 nNumFmt = (sal_uInt16)(sal_uLong)aFormatBox.GetEntryData( 908 aFormatBox.GetSelectEntryPos() ); 909 if( SVX_NUM_NUMBER_NONE != nNumFmt ) 910 { 911 //#i61007# order of captions 912 if( !bOrderNumberingFirst ) 913 { 914 // Kategorie 915 aStr += aCategoryBox.GetText(); 916 aStr += ' '; 917 } 918 919 SwWrtShell *pSh = ::GetActiveWrtShell(); 920 String sFldTypeName( aCategoryBox.GetText() ); 921 if (pSh) 922 { 923 SwSetExpFieldType* pFldType = (SwSetExpFieldType*)pMgr->GetFldType( 924 RES_SETEXPFLD, sFldTypeName ); 925 if( pFldType && pFldType->GetOutlineLvl() < MAXLEVEL ) 926 { 927 sal_uInt8 nLvl = pFldType->GetOutlineLvl(); 928 SwNumberTree::tNumberVector aNumVector; 929 for( sal_uInt8 i = 0; i <= nLvl; ++i ) 930 aNumVector.push_back(1); 931 932 String sNumber( pSh->GetOutlineNumRule()->MakeNumString( 933 aNumVector, sal_False )); 934 if( sNumber.Len() ) 935 (aStr += sNumber) += pFldType->GetDelimiter(); 936 } 937 } 938 939 switch( nNumFmt ) 940 { 941 case SVX_NUM_CHARS_UPPER_LETTER: aStr += 'A'; break; 942 case SVX_NUM_CHARS_UPPER_LETTER_N: aStr += 'A'; break; 943 case SVX_NUM_CHARS_LOWER_LETTER: aStr += 'a'; break; 944 case SVX_NUM_CHARS_LOWER_LETTER_N: aStr += 'a'; break; 945 case SVX_NUM_ROMAN_UPPER: aStr += 'I'; break; 946 case SVX_NUM_ROMAN_LOWER: aStr += 'i'; break; 947 //case ARABIC: 948 default: aStr += '1'; break; 949 } 950 } 951 //#i61007# order of captions 952 if( bOrderNumberingFirst ) 953 { 954 aStr += aNumberingSeparatorED.GetText(); 955 aStr += aCategoryBox.GetText(); 956 } 957 aStr += aTextEdit.GetText(); 958 } 959 aPreview.SetPreviewText( aStr ); 960 } 961 962 /*------------------------------------------------------------------------ 963 Beschreibung: ComboBox ohne Spaces 964 ------------------------------------------------------------------------*/ 965 966 void CaptionComboBox::KeyInput(const KeyEvent& rEvt) 967 { 968 if( rEvt.GetKeyCode().GetCode() != KEY_SPACE ) 969 SwComboBox::KeyInput(rEvt); 970 } 971 972 973 974