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 * --------------------------------------------------*/
SwLoadOptPage(Window * pParent,const SfxItemSet & rSet)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
~SwLoadOptPage()142 SwLoadOptPage::~SwLoadOptPage()
143 {
144 }
145
146 /*-----------------18.01.97 12.43-------------------
147
148 --------------------------------------------------*/
149
Create(Window * pParent,const SfxItemSet & rAttrSet)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
FillItemSet(SfxItemSet & rSet)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 --------------------------------------------------*/
Reset(const SfxItemSet & rSet)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
IMPL_LINK(SwLoadOptPage,MetricHdl,ListBox *,EMPTYARG)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
IMPL_LINK(SwLoadOptPage,CaptionHdl,PushButton *,EMPTYARG)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
SwCaptionOptDlg(Window * pParent,const SfxItemSet & rSet)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
~SwCaptionOptDlg()350 SwCaptionOptDlg::~SwCaptionOptDlg()
351 {
352 }
353
354 /* -----------------22.10.98 15:12-------------------
355 *
356 * --------------------------------------------------*/
357
SwCaptionPreview(Window * pParent,const ResId & rResId)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
SetPreviewText(const String & rText)373 void SwCaptionPreview::SetPreviewText( const String& rText )
374 {
375 if( rText != maText )
376 {
377 maText = rText;
378 Invalidate();
379 }
380 }
381
Paint(const Rectangle & rRect)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
SwCaptionOptPage(Window * pParent,const SfxItemSet & rSet)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
~SwCaptionOptPage()516 SwCaptionOptPage::~SwCaptionOptPage()
517 {
518 DelUserData();
519 delete pMgr;
520 }
521
522 /*-----------------18.01.97 12.43-------------------
523
524 --------------------------------------------------*/
525
Create(Window * pParent,const SfxItemSet & rAttrSet)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
FillItemSet(SfxItemSet &)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
Reset(const SfxItemSet & rSet)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
SetOptions(const sal_uInt16 nPos,const SwCapObjType eObjType,const SvGlobalName * pOleId)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
DelUserData()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
IMPL_LINK(SwCaptionOptPage,ShowEntryHdl,SvxCheckListBox *,EMPTYARG)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
IMPL_LINK(SwCaptionOptPage,SaveEntryHdl,SvxCheckListBox *,EMPTYARG)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
SaveEntry(SvLBoxEntry * pEntry)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
IMPL_LINK(SwCaptionOptPage,ModifyHdl,Edit *,EMPTYARG)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
IMPL_LINK_INLINE_START(SwCaptionOptPage,SelectHdl,ListBox *,EMPTYARG)877 IMPL_LINK_INLINE_START( SwCaptionOptPage, SelectHdl, ListBox *, EMPTYARG )
878 {
879 DrawSample();
880 return 0;
881 }
IMPL_LINK_INLINE_END(SwCaptionOptPage,SelectHdl,ListBox *,EMPTYARG)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
DrawSample()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
KeyInput(const KeyEvent & rEvt)966 void CaptionComboBox::KeyInput(const KeyEvent& rEvt)
967 {
968 if( rEvt.GetKeyCode().GetCode() != KEY_SPACE )
969 SwComboBox::KeyInput(rEvt);
970 }
971
972
973
974