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 #include <hintids.hxx>
30 #include <tools/shl.hxx>
31 #ifndef _MENU_HXX //autogen
32 #include <vcl/menu.hxx>
33 #endif
34 #ifndef _MSGBOX_HXX //autogen
35 #include <vcl/msgbox.hxx>
36 #endif
37 #include <sfx2/tabdlg.hxx>
38 #include <editeng/brshitem.hxx>
39 #include <unotools/configmgr.hxx>
40 #include <SwStyleNameMapper.hxx>
41
42 #ifndef _NUM_HXX //autogen
43 #define USE_NUMTABPAGES
44 #include <num.hxx>
45 #endif
46 #ifndef _VIEW_HXX
47 #include <view.hxx>
48 #endif
49 #ifndef _DOCSH_HXX
50 #include <docsh.hxx>
51 #endif
52 #include <uitool.hxx>
53 #include <errhdl.hxx>
54 #include <wrtsh.hxx>
55 #include <swmodule.hxx>
56 #include <fmtcol.hxx>
57 #include <outline.hxx>
58 #include <uinums.hxx>
59 #include <poolfmt.hxx>
60 #include <shellres.hxx>
61 #include <svl/style.hxx>
62 #include <charfmt.hxx>
63 #include <docstyle.hxx>
64 #include <viewopt.hxx>
65 #include <svtools/ctrlbox.hxx>
66 #ifndef _HELPID_H
67 #include <helpid.h>
68 #endif
69 #ifndef _GLOBALS_HRC
70 #include <globals.hrc> // fuer Vorlagenname 'keins'
71 #endif
72 #ifndef _MISC_HRC
73 #include <misc.hrc>
74 #endif
75 #ifndef _OUTLINE_HRC
76 #include <outline.hrc>
77 #endif
78 #include <paratr.hxx>
79
80 #include <unomid.h>
81
82 #include <IDocumentOutlineNodes.hxx>
83 // --> OD 2008-04-14 #outlinelevel#
84 #include <app.hrc>
85 // <--
86
87 #ifndef _COM_SUN_STAR_ACCESSIBILITY_ACCESSIBLEROLE_HPP_
88 #include <com/sun/star/accessibility/AccessibleRole.hpp>
89 #endif
90
91 using namespace ::com::sun::star;
92
93 /* -----------------------------31.01.01 10:23--------------------------------
94
95 ---------------------------------------------------------------------------*/
96
97 DBG_NAME(outlinehdl)
98
99 /*---------------------------------------------------------------------
100
101 ---------------------------------------------------------------------*/
102
103 class SwNumNamesDlg: public ModalDialog
104 {
105 FixedLine aFormFL;
106 Edit aFormEdit;
107 ListBox aFormBox;
108 OKButton aOKBtn;
109 CancelButton aCancelBtn;
110 HelpButton aHelpBtn;
111
112 DECL_LINK( ModifyHdl, Edit * );
113 DECL_LINK( SelectHdl, ListBox * );
114 DECL_LINK( DoubleClickHdl, ListBox * );
115
116 public:
117 SwNumNamesDlg(Window *pParent);
118 ~SwNumNamesDlg();
119 void SetUserNames(const String *pList[]);
GetName() const120 String GetName() const { return aFormEdit.GetText(); }
GetCurEntryPos() const121 sal_uInt16 GetCurEntryPos() const { return aFormBox.GetSelectEntryPos(); }
122 };
123
124 /*------------------------------------------------------------------------
125 Beschreibung: selektierten Eintrag merken
126 ------------------------------------------------------------------------*/
127
128
IMPL_LINK_INLINE_START(SwNumNamesDlg,SelectHdl,ListBox *,pBox)129 IMPL_LINK_INLINE_START( SwNumNamesDlg, SelectHdl, ListBox *, pBox )
130 {
131 aFormEdit.SetText(pBox->GetSelectEntry());
132 aFormEdit.SetSelection(Selection(0, SELECTION_MAX));
133 return 0;
134 }
IMPL_LINK_INLINE_END(SwNumNamesDlg,SelectHdl,ListBox *,pBox)135 IMPL_LINK_INLINE_END( SwNumNamesDlg, SelectHdl, ListBox *, pBox )
136
137 /*------------------------------------------------------------------------
138 Beschreibung: Setzen der vom Benutzer vergebenen Namen
139 Parameter: Liste der vom Benutzer vergebenen Namen;
140 nicht vom Benutzer benannte Positionen sind 0.
141 ------------------------------------------------------------------------*/
142
143
144 void SwNumNamesDlg::SetUserNames(const String *pList[])
145 {
146 sal_uInt16 nSelect = 0;
147 for(sal_uInt16 i = 0; i < SwBaseNumRules::nMaxRules; ++i)
148 {
149 if(pList[i])
150 {
151 aFormBox.RemoveEntry(i);
152 aFormBox.InsertEntry(*pList[i], i);
153 if(i == nSelect && nSelect < SwBaseNumRules::nMaxRules)
154 nSelect++;
155 }
156 }
157 aFormBox.SelectEntryPos(nSelect);
158 SelectHdl(&aFormBox);
159 }
160 /*------------------------------------------------------------------------
161 Beschreibung: OK-Button freischalten, wenn Text im Edit steht.
162 ------------------------------------------------------------------------*/
163
164
IMPL_LINK_INLINE_START(SwNumNamesDlg,ModifyHdl,Edit *,pBox)165 IMPL_LINK_INLINE_START( SwNumNamesDlg, ModifyHdl, Edit *, pBox )
166 {
167 aOKBtn.Enable(0 != pBox->GetText().Len());
168 return 0;
169 }
IMPL_LINK_INLINE_END(SwNumNamesDlg,ModifyHdl,Edit *,pBox)170 IMPL_LINK_INLINE_END( SwNumNamesDlg, ModifyHdl, Edit *, pBox )
171 /*------------------------------------------------------------------------
172 Beschreibung: DoubleClickHdl
173 ------------------------------------------------------------------------*/
174
175
176 IMPL_LINK_INLINE_START( SwNumNamesDlg, DoubleClickHdl, ListBox *, EMPTYARG )
177 {
178 EndDialog(RET_OK);
179 return 0;
180 }
IMPL_LINK_INLINE_END(SwNumNamesDlg,DoubleClickHdl,ListBox *,EMPTYARG)181 IMPL_LINK_INLINE_END( SwNumNamesDlg, DoubleClickHdl, ListBox *, EMPTYARG )
182
183 /*--------------------------------------------------
184
185 --------------------------------------------------*/
186
187 SwNumNamesDlg::SwNumNamesDlg(Window *pParent)
188 : ModalDialog(pParent, SW_RES(DLG_NUM_NAMES)),
189 aFormFL(this, SW_RES(FL_FORM)),
190 aFormEdit(this, SW_RES(ED_FORM)),
191 aFormBox(this, SW_RES(LB_FORM)),
192 aOKBtn(this, SW_RES(BT_OK)),
193 aCancelBtn(this, SW_RES(BT_CANCEL)),
194 aHelpBtn(this, SW_RES(BT_HELP))
195 {
196 FreeResource();
197 aFormEdit.SetModifyHdl(LINK(this, SwNumNamesDlg, ModifyHdl));
198 aFormBox.SetSelectHdl(LINK(this, SwNumNamesDlg, SelectHdl));
199 aFormBox.SetDoubleClickHdl(LINK(this, SwNumNamesDlg, DoubleClickHdl));
200 SelectHdl(&aFormBox);
201 }
202
203 /*--------------------------------------------------
204
205 --------------------------------------------------*/
206
~SwNumNamesDlg()207 __EXPORT SwNumNamesDlg::~SwNumNamesDlg() {}
208
209
210 /* -----------------08.07.98 08:46-------------------
211 *
212 * --------------------------------------------------*/
lcl_BitToLevel(sal_uInt16 nActLevel)213 sal_uInt16 lcl_BitToLevel(sal_uInt16 nActLevel)
214 {
215 sal_uInt16 nTmp = nActLevel;
216 sal_uInt16 nTmpLevel = 0;
217 while( 0 != (nTmp >>= 1) )
218 nTmpLevel++;
219 return nTmpLevel;
220 }
221
222 /* -----------------07.07.98 14:13-------------------
223 *
224 * --------------------------------------------------*/
225 sal_uInt16 SwOutlineTabDialog::nNumLevel = 1;
SwOutlineTabDialog(Window * pParent,const SfxItemSet * pSwItemSet,SwWrtShell & rSh)226 SwOutlineTabDialog::SwOutlineTabDialog(Window* pParent,
227 const SfxItemSet* pSwItemSet,
228 SwWrtShell &rSh) :
229 //der UserString wird danach richtig gesetzt
230 SfxTabDialog(pParent, SW_RES(DLG_TAB_OUTLINE), pSwItemSet, sal_False, &aEmptyStr),
231 aNullStr(C2S("____")),
232 aFormMenu(SW_RES(MN_FORM)),
233 rWrtSh(rSh),
234 pChapterNumRules(SW_MOD()->GetChapterNumRules()),
235 bModified(rWrtSh.IsModified())
236 {
237 // --> OD 2008-04-14 #outlinelevel#
238 SetText( SW_RES( STR_OUTLINE_NUMBERING ) );
239 // <--
240 PushButton* pUserButton = GetUserButton();
241 pUserButton->SetText(SW_RES(ST_FORM));
242 pUserButton->SetHelpId(HID_OUTLINE_FORM);
243 pUserButton->SetClickHdl(LINK(this, SwOutlineTabDialog, FormHdl));
244 pUserButton->SetAccessibleRole( com::sun::star::accessibility::AccessibleRole::BUTTON_MENU );
245
246 FreeResource();
247 pNumRule = new SwNumRule( *rSh.GetOutlineNumRule() );
248 GetCancelButton().SetClickHdl(LINK(this, SwOutlineTabDialog, CancelHdl));
249
250 AddTabPage(TP_NUM_POSITION , &SwNumPositionTabPage::Create, 0);
251 AddTabPage(TP_OUTLINE_NUM , &SwOutlineSettingsTabPage::Create, 0);
252
253 String sHeadline;
254 sal_uInt16 i;
255
256 for( i = 0; i < MAXLEVEL; ++i )
257 {
258 // wurde die Vorlage noch nicht angelegt, dann ist sie noch an dieserPosition
259 if( !rWrtSh.GetParaStyle( sHeadline =
260 SwStyleNameMapper::GetUIName( static_cast< sal_uInt16 >(RES_POOLCOLL_HEADLINE1 + i),
261 sHeadline )) )
262 aCollNames[i] = sHeadline;
263 }
264
265 // Erfragen der Gliederungsebenen der Textvorlagen
266 const sal_uInt16 nCount = rWrtSh.GetTxtFmtCollCount();
267 for(i = 0; i < nCount; ++i )
268 {
269 SwTxtFmtColl &rTxtColl = rWrtSh.GetTxtFmtColl(i);
270 if(!rTxtColl.IsDefault())
271 {
272 //sal_uInt8 nOutLevel = rTxtColl.GetOutlineLevel(); //<-#outline level, removed out by zhaojianwei
273 //if(nOutLevel != NO_NUMBERING)
274 //->added by zhaojianwei
275 if(rTxtColl.IsAssignedToListLevelOfOutlineStyle())
276 {
277 int nOutLevel = rTxtColl.GetAssignedOutlineStyleLevel();
278 aCollNames[ nOutLevel ] = rTxtColl.GetName();
279 }
280 //<-end
281 }
282 }
283 }
284
285 /* -----------------07.07.98 14:13-------------------
286 *
287 * --------------------------------------------------*/
~SwOutlineTabDialog()288 SwOutlineTabDialog::~SwOutlineTabDialog()
289 {
290 delete pNumRule;
291 }
292
293 /* -----------------07.07.98 14:13-------------------
294 *
295 * --------------------------------------------------*/
PageCreated(sal_uInt16 nPageId,SfxTabPage & rPage)296 void SwOutlineTabDialog::PageCreated(sal_uInt16 nPageId, SfxTabPage& rPage)
297 {
298 switch ( nPageId )
299 {
300 case TP_NUM_POSITION:
301 ((SwNumPositionTabPage&)rPage).SetWrtShell(&rWrtSh);
302 ((SwNumPositionTabPage&)rPage).SetOutlineTabDialog(this);
303 break;
304 case TP_OUTLINE_NUM:
305 ((SwOutlineSettingsTabPage&)rPage).SetWrtShell(&rWrtSh);
306 break;
307 }
308 }
309 /* -----------------07.07.98 14:19-------------------
310 *
311 * --------------------------------------------------*/
IMPL_LINK(SwOutlineTabDialog,CancelHdl,Button *,EMPTYARG)312 IMPL_LINK( SwOutlineTabDialog, CancelHdl, Button *, EMPTYARG )
313 {
314 if (!bModified)
315 rWrtSh.ResetModified();
316 EndDialog(RET_CANCEL);
317 return 0;
318 }
319 /* -----------------08.07.98 12:14-------------------
320 *
321 * --------------------------------------------------*/
IMPL_LINK(SwOutlineTabDialog,FormHdl,Button *,pBtn)322 IMPL_LINK( SwOutlineTabDialog, FormHdl, Button *, pBtn )
323 {
324 //PopupMenu auffuellen
325 for( sal_uInt16 i = 0; i < SwChapterNumRules::nMaxRules; ++i )
326 {
327 const SwNumRulesWithName *pRules = pChapterNumRules->GetRules(i);
328 if( pRules )
329 aFormMenu.SetItemText(i + MN_FORMBASE, pRules->GetName());
330 }
331 aFormMenu.SetSelectHdl(LINK(this, SwOutlineTabDialog, MenuSelectHdl));
332 aFormMenu.Execute(pBtn, Rectangle(Point(0,0), pBtn->GetSizePixel()), POPUPMENU_EXECUTE_DOWN);
333 return 0;
334 }
335
336 /* -----------------08.07.98 12:14-------------------
337 *
338 * --------------------------------------------------*/
IMPL_LINK(SwOutlineTabDialog,MenuSelectHdl,Menu *,pMenu)339 IMPL_LINK( SwOutlineTabDialog, MenuSelectHdl, Menu *, pMenu )
340 {
341 sal_uInt8 nLevelNo = 0;
342 switch(pMenu->GetCurItemId())
343 {
344 case MN_FORM1: nLevelNo = 1; break;
345 case MN_FORM2: nLevelNo = 2; break;
346 case MN_FORM3: nLevelNo = 3; break;
347 case MN_FORM4: nLevelNo = 4; break;
348 case MN_FORM5: nLevelNo = 5; break;
349 case MN_FORM6: nLevelNo = 6; break;
350 case MN_FORM7: nLevelNo = 7; break;
351 case MN_FORM8: nLevelNo = 8; break;
352 case MN_FORM9: nLevelNo = 9; break;
353
354 case MN_SAVE:
355 {
356 SwNumNamesDlg *pDlg = new SwNumNamesDlg(this);
357 const String *aStrArr[SwChapterNumRules::nMaxRules];
358 for(sal_uInt16 i = 0; i < SwChapterNumRules::nMaxRules; ++i)
359 {
360 const SwNumRulesWithName *pRules = pChapterNumRules->GetRules(i);
361 if(pRules)
362 aStrArr[i] = &pRules->GetName();
363 else
364 aStrArr[i] = 0;
365 }
366 pDlg->SetUserNames(aStrArr);
367 if(RET_OK == pDlg->Execute())
368 {
369 const String aName(pDlg->GetName());
370 pChapterNumRules->ApplyNumRules( SwNumRulesWithName(
371 *pNumRule, aName ), pDlg->GetCurEntryPos() );
372 pMenu->SetItemText(
373 pDlg->GetCurEntryPos() + MN_FORMBASE, aName);
374 }
375 delete pDlg;
376 return 0;
377
378 }
379
380 }
381 if( nLevelNo-- )
382 {
383 const SwNumRulesWithName *pRules = pChapterNumRules->GetRules( nLevelNo );
384 if( pRules )
385 {
386 pRules->MakeNumRule( rWrtSh, *pNumRule );
387 pNumRule->SetRuleType( OUTLINE_RULE );
388 }
389 else
390 *pNumRule = *rWrtSh.GetOutlineNumRule();
391 }
392
393 sal_uInt16 nPageId = GetCurPageId();
394 SfxTabPage* pPage = GetTabPage( nPageId );
395 pPage->Reset(*GetOutputItemSet());
396
397 return 0;
398 }
399 /* -----------------07.07.98 14:19-------------------
400 *
401 * --------------------------------------------------*/
GetLevel(const String & rFmtName) const402 sal_uInt16 SwOutlineTabDialog::GetLevel(const String &rFmtName) const
403 {
404 for(sal_uInt16 i = 0; i < MAXLEVEL; ++i)
405 {
406 if(aCollNames[i] == rFmtName)
407 return i;
408 }
409 return MAXLEVEL;//NO_NUMBERING; //#outline level,zhaojianwei
410
411 }
412 /* -----------------07.07.98 16:30-------------------
413 *
414 * --------------------------------------------------*/
Ok()415 short SwOutlineTabDialog::Ok()
416 {
417 SfxTabDialog::Ok();
418 // bei allen erzeugten Vorlagen die Ebenen setzen, muss
419 // geschehen, um evtl. aufgehobene Zuordnungen
420 // auch wieder zu loeschen
421
422 // --> OD 2006-12-11 #130443#
423 // encapsulate changes into a action to avoid effects on the current cursor
424 // position during the changes.
425 rWrtSh.StartAction();
426 // <--
427
428 const SwNumRule * pOutlineRule = rWrtSh.GetOutlineNumRule();
429
430 sal_uInt16 i, nCount = rWrtSh.GetTxtFmtCollCount();
431 for( i = 0; i < nCount; ++i )
432 {
433 SwTxtFmtColl &rTxtColl = rWrtSh.GetTxtFmtColl(i);
434 if( !rTxtColl.IsDefault() )
435 {
436 //rTxtColl.SetOutlineLevel( (sal_uInt8)GetLevel(rTxtColl.GetName()));//#outline level,removed by zhaojianwei
437
438 const SfxPoolItem & rItem =
439 rTxtColl.GetFmtAttr(RES_PARATR_NUMRULE, sal_False);
440
441 //if ((sal_uInt8)GetLevel(rTxtColl.GetName()) == NO_NUMBERING) //#outline level,removed by zhaojianwei
442 //{
443 // if (static_cast<const SwNumRuleItem &>(rItem).GetValue() ==
444 // pOutlineRule->GetName())
445 // {
446 // rTxtColl.ResetFmtAttr(RES_PARATR_NUMRULE);
447 // }
448 //}
449 //else
450 //{
451 // if (static_cast<const SwNumRuleItem &>(rItem).GetValue() !=
452 // pOutlineRule->GetName())
453 // {
454 // SwNumRuleItem aItem(pOutlineRule->GetName());
455 // rTxtColl.SetFmtAttr(aItem);
456 // }
457 //}
458 if ((sal_uInt8)GetLevel(rTxtColl.GetName()) == MAXLEVEL) //add by zhaojianwei
459 {
460 if(rTxtColl.IsAssignedToListLevelOfOutlineStyle())
461 {
462 rTxtColl.DeleteAssignmentToListLevelOfOutlineStyle();
463 }
464 if (static_cast<const SwNumRuleItem &>(rItem).GetValue() ==
465 pOutlineRule->GetName())
466 {
467 rTxtColl.ResetFmtAttr(RES_PARATR_NUMRULE);
468 }
469 }
470 else
471 {
472 rTxtColl.AssignToListLevelOfOutlineStyle(GetLevel(rTxtColl.GetName()));
473
474 if (static_cast<const SwNumRuleItem &>(rItem).GetValue() !=
475 pOutlineRule->GetName())
476 {
477 SwNumRuleItem aItem(pOutlineRule->GetName());
478 rTxtColl.SetFmtAttr(aItem);
479 }
480 } //<-end,zhaojianwei
481 }
482 }
483
484 for(i = 0; i < MAXLEVEL; ++i )
485 {
486 String sHeadline;
487 ::SwStyleNameMapper::FillUIName( static_cast< sal_uInt16 >(RES_POOLCOLL_HEADLINE1 + i),
488 sHeadline );
489 SwTxtFmtColl* pColl = rWrtSh.FindTxtFmtCollByName( sHeadline );
490 if( !pColl )
491 {
492 //if( !aCollNames[i].Len() ) //#outline level,removed by zhaojianwei
493 //{
494 // SwTxtFmtColl* pTxtColl = rWrtSh.GetTxtCollFromPool(
495 // static_cast< sal_uInt16 >(RES_POOLCOLL_HEADLINE1 + i) );
496 // pTxtColl->SetOutlineLevel( NO_NUMBERING );
497 // pTxtColl->ResetFmtAttr(RES_PARATR_NUMRULE);
498 //}
499 //else if(aCollNames[i] != sHeadline)
500 //{
501 // SwTxtFmtColl* pTxtColl = rWrtSh.GetParaStyle(
502 // aCollNames[i], SwWrtShell::GETSTYLE_CREATESOME);
503 // if(pTxtColl)
504 // {
505 // pTxtColl->SetOutlineLevel( static_cast< sal_uInt8 >(i) );
506
507 // SwNumRuleItem aItem(pOutlineRule->GetName());
508 // pTxtColl->SetFmtAttr(aItem);
509 // }
510 //}
511 if(aCollNames[i] != sHeadline)//->added by zhaojianwei
512 {
513 SwTxtFmtColl* pTxtColl = rWrtSh.GetTxtCollFromPool(
514 static_cast< sal_uInt16 >(RES_POOLCOLL_HEADLINE1 + i) );
515 pTxtColl->DeleteAssignmentToListLevelOfOutlineStyle();
516 pTxtColl->ResetFmtAttr(RES_PARATR_NUMRULE);
517
518 if( aCollNames[i].Len() )
519 {
520 pTxtColl = rWrtSh.GetParaStyle(
521 aCollNames[i], SwWrtShell::GETSTYLE_CREATESOME);
522 if(pTxtColl)
523 {
524 pTxtColl->AssignToListLevelOfOutlineStyle(i);
525 SwNumRuleItem aItem(pOutlineRule->GetName());
526 pTxtColl->SetFmtAttr(aItem);
527 }
528 }
529 }//<--end,zhaojianwei
530 }
531 }
532
533 rWrtSh.SetOutlineNumRule( *pNumRule);
534
535 // --> OD 2006-12-11 #130443#
536 rWrtSh.EndAction();
537 // <--
538
539 return RET_OK;
540 }
541
542 /* -----------------07.07.98 14:19-------------------
543 *
544 * --------------------------------------------------*/
SwOutlineSettingsTabPage(Window * pParent,const SfxItemSet & rSet)545 SwOutlineSettingsTabPage::SwOutlineSettingsTabPage(Window* pParent, const SfxItemSet& rSet) :
546 SfxTabPage(pParent, SW_RES(TP_OUTLINE_NUM), rSet),
547 aLevelFL( this, SW_RES(FL_LEVEL )),
548 aLevelLB( this, SW_RES(LB_LEVEL )),
549 aNumberFL(this, SW_RES(FL_NUMBER)),
550 aCollLbl(this, SW_RES(FT_COLL)),
551 aCollBox(this, SW_RES(LB_COLL)),
552 aNumberLbl(this, SW_RES(FT_NUMBER)),
553 aNumberBox(this, SW_RES(LB_NUMBER), INSERT_NUM_TYPE_NO_NUMBERING|INSERT_NUM_EXTENDED_TYPES),
554 aCharFmtFT(this, SW_RES(FT_CHARFMT)),
555 aCharFmtLB(this, SW_RES(LB_CHARFMT)),
556 aAllLevelFT( this, SW_RES(FT_ALL_LEVEL)),
557 aAllLevelNF( this, SW_RES(NF_ALL_LEVEL)),
558 aDelim(this, SW_RES(FT_DELIM)),
559 aPrefixFT(this, SW_RES(FT_PREFIX)),
560 aPrefixED(this, SW_RES(ED_PREFIX)),
561 aSuffixFT(this, SW_RES(FT_SUFFIX)),
562 aSuffixED(this, SW_RES(ED_SUFFIX)),
563 aStartLbl(this, SW_RES(FT_START)),
564 aStartEdit(this, SW_RES(ED_START)),
565 aPreviewWIN( this, SW_RES(WIN_PREVIEW )),
566
567 aNoFmtName(SW_RES(ST_NO_COLL)),
568 pSh(0),
569 pCollNames(0),
570 nActLevel(1)
571 {
572 FreeResource();
573 SetExchangeSupport();
574
575 aCollBox.InsertEntry(aNoFmtName);
576 aLevelLB.SetSelectHdl(LINK(this, SwOutlineSettingsTabPage, LevelHdl));
577 aAllLevelNF.SetModifyHdl(LINK(this, SwOutlineSettingsTabPage, ToggleComplete));
578 aCollBox.SetSelectHdl(LINK(this, SwOutlineSettingsTabPage, CollSelect));
579 aCollBox.SetGetFocusHdl(LINK(this, SwOutlineSettingsTabPage, CollSelectGetFocus));
580 aNumberBox.SetSelectHdl(LINK(this, SwOutlineSettingsTabPage, NumberSelect));
581 aPrefixED.SetModifyHdl(LINK(this, SwOutlineSettingsTabPage, DelimModify));
582 aSuffixED.SetModifyHdl(LINK(this, SwOutlineSettingsTabPage, DelimModify));
583 aStartEdit.SetModifyHdl(LINK(this, SwOutlineSettingsTabPage, StartModified));
584 aCharFmtLB.SetSelectHdl(LINK(this, SwOutlineSettingsTabPage, CharFmtHdl));
585
586 }
587 /* -----------------07.07.98 14:19-------------------
588 *
589 * --------------------------------------------------*/
Update()590 void SwOutlineSettingsTabPage::Update()
591 {
592 // falls eine Vorlage fuer diese Ebene bereits selektiert wurde,
593 // diese in der ListBox auswaehlean
594 aCollBox.Enable(USHRT_MAX != nActLevel);
595 if(USHRT_MAX == nActLevel)
596 {
597 sal_Bool bSamePrefix = sal_True;
598 sal_Bool bSameSuffix = sal_True;
599 sal_Bool bSameType = sal_True;
600 sal_Bool bSameComplete = sal_True;
601 sal_Bool bSameStart = sal_True;
602 sal_Bool bSameCharFmt = sal_True;
603
604 const SwNumFmt* aNumFmtArr[MAXLEVEL];
605 const SwCharFmt* pFirstFmt = 0;
606
607 for(sal_uInt16 i = 0; i < MAXLEVEL; i++)
608 {
609
610 aNumFmtArr[ i ] = &pNumRule->Get(i);
611 if(i == 0)
612 pFirstFmt = aNumFmtArr[i]->GetCharFmt();
613 else
614 {
615 bSameType &= aNumFmtArr[i]->GetNumberingType() == aNumFmtArr[0]->GetNumberingType();
616 bSameStart &= aNumFmtArr[i]->GetStart() == aNumFmtArr[0]->GetStart();
617 bSamePrefix &= aNumFmtArr[i]->GetPrefix() == aNumFmtArr[0]->GetPrefix();
618 bSameSuffix &= aNumFmtArr[i]->GetSuffix() == aNumFmtArr[0]->GetSuffix();
619 bSameComplete &= aNumFmtArr[i]->GetIncludeUpperLevels() == aNumFmtArr[0]->GetIncludeUpperLevels();
620 const SwCharFmt* pFmt = aNumFmtArr[i]->GetCharFmt();
621 bSameCharFmt &= (!pFirstFmt && !pFmt)
622 || (pFirstFmt && pFmt && pFmt->GetName() == pFirstFmt->GetName());
623 }
624 }
625 CheckForStartValue_Impl(aNumFmtArr[0]->GetNumberingType());
626 if(bSameType)
627 aNumberBox.SelectNumberingType( aNumFmtArr[0]->GetNumberingType() );
628 else
629 aNumberBox.SetNoSelection();
630 if(bSameStart)
631 aStartEdit.SetValue(aNumFmtArr[0]->GetStart());
632 else
633 aStartEdit.SetText(aEmptyStr);
634 if(bSamePrefix)
635 aPrefixED.SetText(aNumFmtArr[0]->GetPrefix());
636 else
637 aPrefixED.SetText(aEmptyStr);
638 if(bSameSuffix)
639 aSuffixED.SetText(aNumFmtArr[0]->GetSuffix());
640 else
641 aSuffixED.SetText(aEmptyStr);
642
643 if(bSameCharFmt)
644 {
645 if(pFirstFmt)
646 aCharFmtLB.SelectEntry(pFirstFmt->GetName());
647 else
648 aCharFmtLB.SelectEntry( ViewShell::GetShellRes()->aStrNone );
649 }
650 else
651 aCharFmtLB.SetNoSelection();
652
653 aAllLevelFT.Enable(sal_True);
654 aAllLevelNF.Enable(sal_True);
655 aAllLevelNF.SetMax(MAXLEVEL);
656 if(bSameComplete)
657 {
658 aAllLevelNF.SetValue(aNumFmtArr[0]->GetIncludeUpperLevels());
659 }
660 else
661 {
662 aAllLevelNF.SetText(aEmptyStr);
663 }
664 }
665 else
666 {
667 sal_uInt16 nTmpLevel = lcl_BitToLevel(nActLevel);
668 String aColl(pCollNames[nTmpLevel]);
669 if(aColl.Len())
670 aCollBox.SelectEntry(aColl);
671 else
672 aCollBox.SelectEntry(aNoFmtName);
673 const SwNumFmt &rFmt = pNumRule->Get(nTmpLevel);
674
675 aNumberBox.SelectNumberingType( rFmt.GetNumberingType() );
676 aPrefixED.SetText(rFmt.GetPrefix());
677 aSuffixED.SetText(rFmt.GetSuffix());
678 const SwCharFmt* pFmt = rFmt.GetCharFmt();
679 if(pFmt)
680 aCharFmtLB.SelectEntry(pFmt->GetName());
681 else
682 aCharFmtLB.SelectEntry( ViewShell::GetShellRes()->aStrNone );
683
684 if(nTmpLevel)
685 {
686 aAllLevelFT.Enable(sal_True);
687 aAllLevelNF.Enable(sal_True);
688 aAllLevelNF.SetMax(nTmpLevel + 1);
689 aAllLevelNF.SetValue(rFmt.GetIncludeUpperLevels());
690 }
691 else
692 {
693 aAllLevelNF.SetText(aEmptyStr);
694 aAllLevelNF.Enable(sal_False);
695 aAllLevelFT.Enable(sal_False);
696 }
697 CheckForStartValue_Impl(rFmt.GetNumberingType());
698 aStartEdit.SetValue( rFmt.GetStart() );
699 }
700 SetModified();
701 }
702
703 /* -----------------07.07.98 14:19-------------------
704 *
705 * --------------------------------------------------*/
IMPL_LINK(SwOutlineSettingsTabPage,LevelHdl,ListBox *,pBox)706 IMPL_LINK( SwOutlineSettingsTabPage, LevelHdl, ListBox *, pBox )
707 {
708 nActLevel = 0;
709 if(pBox->IsEntryPosSelected( MAXLEVEL ))
710 {
711 nActLevel = 0xFFFF;
712 }
713 else
714 {
715 sal_uInt16 nMask = 1;
716 for( sal_uInt16 i = 0; i < MAXLEVEL; i++ )
717 {
718 if(pBox->IsEntryPosSelected( i ))
719 nActLevel |= nMask;
720 nMask <<= 1;
721 }
722 }
723 Update();
724 return 0;
725 }
726 /* -----------------07.07.98 14:19-------------------
727 *
728 * --------------------------------------------------*/
IMPL_LINK(SwOutlineSettingsTabPage,ToggleComplete,NumericField *,pFld)729 IMPL_LINK( SwOutlineSettingsTabPage, ToggleComplete, NumericField *, pFld )
730 {
731 sal_uInt16 nMask = 1;
732 for(sal_uInt16 i = 0; i < MAXLEVEL; i++)
733 {
734 if(nActLevel & nMask)
735 {
736 SwNumFmt aNumFmt(pNumRule->Get(i));
737 aNumFmt.SetIncludeUpperLevels( Min( (sal_uInt8)pFld->GetValue(),
738 (sal_uInt8)(i + 1)) );
739 pNumRule->Set(i, aNumFmt);
740 }
741 nMask <<= 1;
742 }
743 SetModified();
744 return 0;
745 }
746 /* -----------------07.07.98 14:19-------------------
747 *
748 * --------------------------------------------------*/
IMPL_LINK(SwOutlineSettingsTabPage,CollSelect,ListBox *,pBox)749 IMPL_LINK( SwOutlineSettingsTabPage, CollSelect, ListBox *, pBox )
750 {
751 sal_uInt8 i;
752
753 const String aCollName(pBox->GetSelectEntry());
754 //0xFFFF darf hier nicht sein (disable)
755 sal_uInt16 nTmpLevel = lcl_BitToLevel(nActLevel);
756 String sOldName( pCollNames[nTmpLevel] );
757
758 for( i = 0; i < MAXLEVEL; ++i)
759 pCollNames[i] = aSaveCollNames[i];
760
761 if(aCollName == aNoFmtName)
762 pCollNames[nTmpLevel] = aEmptyStr;
763 else
764 {
765 pCollNames[nTmpLevel] = aCollName;
766 // wird die Vorlage bereits verwendet ?
767 for( i = 0; i < MAXLEVEL; ++i)
768 if(i != nTmpLevel && pCollNames[i] == aCollName )
769 pCollNames[i] = aEmptyStr;
770 }
771
772 // search the oldname and put it into the current entries
773 if( sOldName.Len() )
774 for( i = 0; i < MAXLEVEL; ++i)
775 if( aSaveCollNames[ i ] == sOldName && i != nTmpLevel &&
776 !pCollNames[ i ].Len() )
777 {
778 sal_uInt8 n;
779 for( n = 0; n < MAXLEVEL; ++n )
780 if( pCollNames[ n ] == sOldName )
781 break;
782
783 if( MAXLEVEL == n )
784 // it was a outline leveld name and the current entries is zero.
785 pCollNames[ i ] = sOldName;
786 }
787
788 SetModified();
789 return 0;
790 }
791
IMPL_LINK(SwOutlineSettingsTabPage,CollSelectGetFocus,ListBox *,EMPTYARG)792 IMPL_LINK( SwOutlineSettingsTabPage, CollSelectGetFocus, ListBox *, EMPTYARG )
793 {
794 for( sal_uInt8 i = 0; i < MAXLEVEL; ++i)
795 aSaveCollNames[i] = pCollNames[i];
796 return 0;
797 }
798
799 /* -----------------07.07.98 14:19-------------------
800 *
801 * --------------------------------------------------*/
IMPL_LINK(SwOutlineSettingsTabPage,NumberSelect,SwNumberingTypeListBox *,pBox)802 IMPL_LINK( SwOutlineSettingsTabPage, NumberSelect, SwNumberingTypeListBox *, pBox )
803 {
804 sal_uInt16 nMask = 1;
805 sal_Int16 nNumberType = pBox->GetSelectedNumberingType();//(sal_Int16)(sal_uLong)pBox->GetEntryData(pBox->GetSelectEntryPos());
806 for(sal_uInt16 i = 0; i < MAXLEVEL; i++)
807 {
808 if(nActLevel & nMask)
809 {
810 SwNumFmt aNumFmt(pNumRule->Get(i));
811 aNumFmt.SetNumberingType(nNumberType);
812 pNumRule->Set(i, aNumFmt);
813 CheckForStartValue_Impl(nNumberType);
814 }
815 nMask <<= 1;
816 }
817 SetModified();
818 return 0;
819 }
820 /* -----------------07.07.98 14:19-------------------
821 *
822 * --------------------------------------------------*/
IMPL_LINK(SwOutlineSettingsTabPage,DelimModify,Edit *,EMPTYARG)823 IMPL_LINK( SwOutlineSettingsTabPage, DelimModify, Edit *, EMPTYARG )
824 {
825 sal_uInt16 nMask = 1;
826 for(sal_uInt16 i = 0; i < MAXLEVEL; i++)
827 {
828 if(nActLevel & nMask)
829 {
830 SwNumFmt aNumFmt(pNumRule->Get(i));
831 aNumFmt.SetPrefix( aPrefixED.GetText() );
832 aNumFmt.SetSuffix( aSuffixED.GetText() );
833 pNumRule->Set(i, aNumFmt);
834 }
835 nMask <<= 1;
836 }
837 SetModified();
838 return 0;
839 }
840 /* -----------------07.07.98 14:19-------------------
841 *
842 * --------------------------------------------------*/
IMPL_LINK(SwOutlineSettingsTabPage,StartModified,NumericField *,pFld)843 IMPL_LINK( SwOutlineSettingsTabPage, StartModified, NumericField *, pFld )
844 {
845 sal_uInt16 nMask = 1;
846 for(sal_uInt16 i = 0; i < MAXLEVEL; i++)
847 {
848 if(nActLevel & nMask)
849 {
850 SwNumFmt aNumFmt(pNumRule->Get(i));
851 aNumFmt.SetStart( (sal_uInt16)pFld->GetValue() );
852 pNumRule->Set(i, aNumFmt);
853 }
854 nMask <<= 1;
855 }
856 SetModified();
857 return 0;
858 }
859 /* -----------------21.09.98 12:21-------------------
860 *
861 * --------------------------------------------------*/
IMPL_LINK(SwOutlineSettingsTabPage,CharFmtHdl,ListBox *,EMPTYARG)862 IMPL_LINK( SwOutlineSettingsTabPage, CharFmtHdl, ListBox *, EMPTYARG )
863 {
864 // bAutomaticCharStyles = sal_False;
865 String sEntry = aCharFmtLB.GetSelectEntry();
866 sal_uInt16 nMask = 1;
867 sal_Bool bFormatNone = sEntry == ViewShell::GetShellRes()->aStrNone;
868 SwCharFmt* pFmt = 0;
869 if(!bFormatNone)
870 {
871 sal_uInt16 nChCount = pSh->GetCharFmtCount();
872 for(sal_uInt16 i = 0; i < nChCount; i++)
873 {
874 SwCharFmt& rChFmt = pSh->GetCharFmt(i);
875 if(rChFmt.GetName() == sEntry)
876 {
877 pFmt = &rChFmt;
878 break;
879 }
880 }
881 if(!pFmt)
882 {
883 SfxStyleSheetBasePool* pPool = pSh->GetView().GetDocShell()->GetStyleSheetPool();
884 SfxStyleSheetBase* pBase;
885 pBase = pPool->Find(sEntry, SFX_STYLE_FAMILY_CHAR);
886 if(!pBase)
887 pBase = &pPool->Make(sEntry, SFX_STYLE_FAMILY_PAGE);
888 pFmt = ((SwDocStyleSheet*)pBase)->GetCharFmt();
889
890 }
891 }
892
893 for(sal_uInt16 i = 0; i < MAXLEVEL; i++)
894 {
895 if(nActLevel & nMask)
896 {
897 SwNumFmt aNumFmt(pNumRule->Get(i));
898 if(bFormatNone)
899 aNumFmt.SetCharFmt(0);
900 else
901 aNumFmt.SetCharFmt(pFmt);
902 pNumRule->Set(i, aNumFmt);
903 }
904 nMask <<= 1;
905 }
906 return RET_OK;
907 }
908 /* -----------------07.07.98 14:19-------------------
909 *
910 * --------------------------------------------------*/
~SwOutlineSettingsTabPage()911 SwOutlineSettingsTabPage::~SwOutlineSettingsTabPage()
912 {
913 }
914 /* -----------------07.07.98 16:27-------------------
915 *
916 * --------------------------------------------------*/
SetWrtShell(SwWrtShell * pShell)917 void SwOutlineSettingsTabPage::SetWrtShell(SwWrtShell* pShell)
918 {
919 pSh = pShell;
920 // Erfragen der NumRules dieses Dokumentes
921 pNumRule = ((SwOutlineTabDialog*)GetTabDialog())->GetNumRule();
922 pCollNames = ((SwOutlineTabDialog*)GetTabDialog())->GetCollNames();
923
924 //pNumRule = new SwNumRule( *rSh.GetOutlineNumRule() );
925
926 aPreviewWIN.SetNumRule(pNumRule);
927 aPreviewWIN.SetOutlineNames(pCollNames);
928 // Startwert setzen - nActLevel muss hier 1 sein
929 sal_uInt16 nTmpLevel = lcl_BitToLevel(nActLevel);
930 const SwNumFmt& rNumFmt = pNumRule->Get( nTmpLevel );
931 aStartEdit.SetValue( rNumFmt.GetStart() );
932
933 // Poolformate fuer Ueberschriften anlegen
934 String sStr;
935 sal_uInt16 i;
936 for( i = 0; i < MAXLEVEL; ++i )
937 {
938 aCollBox.InsertEntry( SwStyleNameMapper::GetUIName(
939 static_cast< sal_uInt16 >(RES_POOLCOLL_HEADLINE1 + i), aEmptyStr ));
940 aLevelLB.InsertEntry( String::CreateFromInt32(i + 1) );
941 }
942 sStr.AssignAscii( RTL_CONSTASCII_STRINGPARAM( "1 - " ));
943 sStr += String::CreateFromInt32(MAXLEVEL);
944 aLevelLB.InsertEntry( sStr );
945
946 // Erfragen der Gliederungsebenen der Textvorlagen
947 const sal_uInt16 nCount = pSh->GetTxtFmtCollCount();
948 for( i = 0; i < nCount; ++i )
949 {
950 SwTxtFmtColl &rTxtColl = pSh->GetTxtFmtColl(i);
951 if(!rTxtColl.IsDefault())
952 {
953 sStr = rTxtColl.GetName();
954 if(LISTBOX_ENTRY_NOTFOUND == aCollBox.GetEntryPos( sStr ))
955 aCollBox.InsertEntry( sStr );
956 }
957 }
958
959 aNumberBox.SelectNumberingType(rNumFmt.GetNumberingType());
960 sal_uInt16 nOutlinePos = pSh->GetOutlinePos(MAXLEVEL);
961 sal_uInt16 nTmp = 0;
962 if(nOutlinePos != USHRT_MAX)
963 {
964 nTmp = static_cast<sal_uInt16>(pSh->getIDocumentOutlineNodesAccess()->getOutlineLevel(nOutlinePos));
965 }
966 aLevelLB.SelectEntryPos(nTmp-1);//nTmp);//#outline level,zhaojianwei
967
968 // Zeichenvorlagen sammeln
969 aCharFmtLB.Clear();
970 aCharFmtLB.InsertEntry( ViewShell::GetShellRes()->aStrNone );
971
972 // Zeichenvorlagen
973 ::FillCharStyleListBox(aCharFmtLB,
974 pSh->GetView().GetDocShell());
975 Update();
976 }
977 /* -----------------07.07.98 14:19-------------------
978 *
979 * --------------------------------------------------*/
ActivatePage(const SfxItemSet &)980 void SwOutlineSettingsTabPage::ActivatePage(const SfxItemSet& )
981 {
982 nActLevel = SwOutlineTabDialog::GetActNumLevel();
983 if(nActLevel != USHRT_MAX)
984 aLevelLB.SelectEntryPos(lcl_BitToLevel(nActLevel));
985 else
986 aLevelLB.SelectEntryPos(MAXLEVEL);
987 LevelHdl(&aLevelLB);
988 }
989 /* -----------------07.07.98 14:19-------------------
990 *
991 * --------------------------------------------------*/
DeactivatePage(SfxItemSet *)992 int SwOutlineSettingsTabPage::DeactivatePage(SfxItemSet*)
993 {
994 SwOutlineTabDialog::SetActNumLevel(nActLevel);
995 return LEAVE_PAGE;
996 }
997 /* -----------------07.07.98 14:19-------------------
998 *
999 * --------------------------------------------------*/
FillItemSet(SfxItemSet &)1000 sal_Bool SwOutlineSettingsTabPage::FillItemSet( SfxItemSet& )
1001 {
1002 return sal_True;
1003 }
1004 /* -----------------07.07.98 14:19-------------------
1005 *
1006 * --------------------------------------------------*/
Reset(const SfxItemSet & rSet)1007 void SwOutlineSettingsTabPage::Reset( const SfxItemSet& rSet )
1008 {
1009 ActivatePage(rSet);
1010 }
1011 /* -----------------07.07.98 14:19-------------------
1012 *
1013 * --------------------------------------------------*/
Create(Window * pParent,const SfxItemSet & rAttrSet)1014 SfxTabPage* SwOutlineSettingsTabPage::Create( Window* pParent,
1015 const SfxItemSet& rAttrSet)
1016 {
1017 return new SwOutlineSettingsTabPage(pParent, rAttrSet);
1018 }
1019 /* -----------------07.11.2002 15:13-----------------
1020 *
1021 * --------------------------------------------------*/
CheckForStartValue_Impl(sal_uInt16 nNumberingType)1022 void SwOutlineSettingsTabPage::CheckForStartValue_Impl(sal_uInt16 nNumberingType)
1023 {
1024 sal_Bool bIsNull = aStartEdit.GetValue() == 0;
1025 sal_Bool bNoZeroAllowed = nNumberingType < SVX_NUM_ARABIC ||
1026 SVX_NUM_CHARS_UPPER_LETTER_N == nNumberingType ||
1027 SVX_NUM_CHARS_LOWER_LETTER_N == nNumberingType;
1028 aStartEdit.SetMin(bNoZeroAllowed ? 1 : 0);
1029 if(bIsNull && bNoZeroAllowed)
1030 aStartEdit.GetModifyHdl().Call(&aStartEdit);
1031 }
1032 /*-----------------09.12.97 11:54-------------------
1033
1034 --------------------------------------------------*/
lcl_DrawBullet(VirtualDevice * pVDev,const SwNumFmt & rFmt,sal_uInt16 nXStart,sal_uInt16 nYStart,const Size & rSize)1035 sal_uInt16 lcl_DrawBullet(VirtualDevice* pVDev,
1036 const SwNumFmt& rFmt, sal_uInt16 nXStart,
1037 sal_uInt16 nYStart, const Size& rSize)
1038 {
1039 Font aTmpFont(pVDev->GetFont());
1040
1041 Font aFont(*rFmt.GetBulletFont());
1042 aFont.SetSize(rSize);
1043 aFont.SetTransparent(sal_True);
1044 pVDev->SetFont( aFont );
1045 String aText(rFmt.GetBulletChar());
1046 pVDev->DrawText( Point(nXStart, nYStart), aText );
1047 sal_uInt16 nRet = (sal_uInt16)pVDev->GetTextWidth(aText);
1048
1049 pVDev->SetFont(aTmpFont);
1050 return nRet;
1051 }
1052 /*-----------------09.12.97 11:49-------------------
1053
1054 --------------------------------------------------*/
lcl_DrawGraphic(VirtualDevice * pVDev,const SwNumFmt & rFmt,sal_uInt16 nXStart,sal_uInt16 nYStart,sal_uInt16 nDivision)1055 sal_uInt16 lcl_DrawGraphic(VirtualDevice* pVDev, const SwNumFmt &rFmt, sal_uInt16 nXStart,
1056 sal_uInt16 nYStart, sal_uInt16 nDivision)
1057 {
1058 const SvxBrushItem* pBrushItem = rFmt.GetBrush();
1059 sal_uInt16 nRet = 0;
1060 if(pBrushItem)
1061 {
1062 const Graphic* pGrf = pBrushItem->GetGraphic();
1063 if(pGrf)
1064 {
1065 Size aGSize( rFmt.GetGraphicSize());
1066 aGSize.Width() /= nDivision;
1067 nRet = (sal_uInt16)aGSize.Width();
1068 aGSize.Height() /= nDivision;
1069 pGrf->Draw( pVDev, Point(nXStart,nYStart),
1070 pVDev->PixelToLogic( aGSize ) );
1071 }
1072 }
1073 return nRet;
1074
1075 }
1076 /*-----------------02.12.97 10:34-------------------
1077 Vorschau der Numerierung painten
1078 --------------------------------------------------*/
Paint(const Rectangle &)1079 void NumberingPreview::Paint( const Rectangle& /*rRect*/ )
1080 {
1081 Size aSize(PixelToLogic(GetOutputSizePixel()));
1082 Rectangle aRect(Point(0,0), aSize);
1083
1084 VirtualDevice* pVDev = new VirtualDevice(*this);
1085 pVDev->SetMapMode(GetMapMode());
1086 pVDev->SetOutputSize( aSize );
1087
1088 // #101524# OJ
1089 pVDev->SetFillColor( GetSettings().GetStyleSettings().GetWindowColor() );
1090 pVDev->SetLineColor( GetSettings().GetStyleSettings().GetButtonTextColor() );
1091 pVDev->DrawRect(aRect);
1092
1093 if(pActNum)
1094 {
1095 sal_uInt16 nWidthRelation;
1096 if(nPageWidth)
1097 {
1098 nWidthRelation = sal_uInt16 (nPageWidth / aSize.Width());
1099 if(bPosition)
1100 nWidthRelation = nWidthRelation * 2 / 3;
1101 else
1102 nWidthRelation = nWidthRelation / 4;
1103 }
1104 else
1105 nWidthRelation = 30; // Kapiteldialog
1106
1107 //Hoehe pro Ebene
1108 sal_uInt16 nXStep = sal_uInt16(aSize.Width() / (3 * MAXLEVEL));
1109 if(MAXLEVEL < 10)
1110 nXStep /= 2;
1111 sal_uInt16 nYStart = 4;
1112 sal_uInt16 nYStep = sal_uInt16((aSize.Height() - 6)/ MAXLEVEL);
1113 aStdFont = OutputDevice::GetDefaultFont(
1114 DEFAULTFONT_UI_SANS, (LanguageType)GetAppLanguage(),
1115 DEFAULTFONT_FLAGS_ONLYONE, this );
1116 // #101524# OJ
1117 aStdFont.SetColor( SwViewOption::GetFontColor() );
1118
1119 //
1120 sal_uInt16 nFontHeight = nYStep * 6 / 10;
1121 if(bPosition)
1122 nFontHeight = nYStep * 15 / 10;
1123 aStdFont.SetSize(Size( 0, nFontHeight ));
1124
1125 sal_uInt16 nPreNum = pActNum->Get(0).GetStart();
1126
1127 if(bPosition)
1128 {
1129 sal_uInt16 nLineHeight = nFontHeight * 8 / 7;
1130 sal_uInt8 nStart = 0;
1131 while( !(nActLevel & (1<<nStart)) )
1132 {
1133 nStart++;
1134 }
1135 if(nStart) // damit moeglichs Vorgaenger und Nachfolger gezeigt werden
1136 nStart--;
1137
1138 SwNumberTree::tNumberVector aNumVector;
1139 sal_uInt8 nEnd = Min( (sal_uInt8)(nStart + 3), MAXLEVEL );
1140 for( sal_uInt8 nLevel = nStart; nLevel < nEnd; ++nLevel )
1141 {
1142 const SwNumFmt &rFmt = pActNum->Get(nLevel);
1143 aNumVector.push_back(rFmt.GetStart());
1144
1145 // --> OD 2008-02-01 #newlistlevelattrs#
1146 sal_uInt16 nXStart( 0 );
1147 short nTextOffset( 0 );
1148 sal_uInt16 nNumberXPos( 0 );
1149 if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
1150 {
1151 nXStart = rFmt.GetAbsLSpace() / nWidthRelation;
1152 nTextOffset = rFmt.GetCharTextDistance() / nWidthRelation;
1153 nNumberXPos = nXStart;
1154 sal_uInt16 nFirstLineOffset = (-rFmt.GetFirstLineOffset()) / nWidthRelation;
1155
1156 if(nFirstLineOffset <= nNumberXPos)
1157 nNumberXPos = nNumberXPos - nFirstLineOffset;
1158 else
1159 nNumberXPos = 0;
1160 }
1161 else if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT )
1162 {
1163 const long nTmpNumberXPos( ( rFmt.GetIndentAt() +
1164 rFmt.GetFirstLineIndent() ) /
1165 nWidthRelation );
1166 if ( nTmpNumberXPos < 0 )
1167 {
1168 nNumberXPos = 0;
1169 }
1170 else
1171 {
1172 nNumberXPos = static_cast<sal_uInt16>(nTmpNumberXPos);
1173 }
1174 }
1175 // <--
1176
1177 sal_uInt16 nBulletWidth = 0;
1178 if( SVX_NUM_BITMAP == rFmt.GetNumberingType() )
1179 {
1180 nBulletWidth = lcl_DrawGraphic(pVDev, rFmt,
1181 nNumberXPos,
1182 nYStart, nWidthRelation);
1183 }
1184 else if( SVX_NUM_CHAR_SPECIAL == rFmt.GetNumberingType() )
1185 {
1186 nBulletWidth = lcl_DrawBullet(pVDev, rFmt, nNumberXPos, nYStart, aStdFont.GetSize());
1187 }
1188 else
1189 {
1190 pVDev->SetFont(aStdFont);
1191 if(pActNum->IsContinusNum())
1192 aNumVector[nLevel] = nPreNum;
1193 // --> OD 2005-11-17 #128041#
1194 String aText(pActNum->MakeNumString( aNumVector ));
1195 // <--
1196 pVDev->DrawText( Point(nNumberXPos, nYStart), aText );
1197 nBulletWidth = (sal_uInt16)pVDev->GetTextWidth(aText);
1198 nPreNum++;
1199 }
1200 // --> OD 2008-02-01 #newlistlevelattrs#
1201 if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT &&
1202 rFmt.GetLabelFollowedBy() == SvxNumberFormat::SPACE )
1203 {
1204 pVDev->SetFont(aStdFont);
1205 String aText(' ');
1206 pVDev->DrawText( Point(nNumberXPos, nYStart), aText );
1207 nBulletWidth = nBulletWidth + (sal_uInt16)pVDev->GetTextWidth(aText);
1208 }
1209 // <--
1210
1211 // --> OD 2008-02-01 #newlistlevelattrs#
1212 sal_uInt16 nTextXPos( 0 );
1213 if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
1214 {
1215 nTextXPos = nXStart;
1216 if(nTextOffset < 0)
1217 nTextXPos = nTextXPos + nTextOffset;
1218 if(nNumberXPos + nBulletWidth + nTextOffset > nTextXPos )
1219 nTextXPos = nNumberXPos + nBulletWidth + nTextOffset;
1220 }
1221 else if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT )
1222 {
1223 switch ( rFmt.GetLabelFollowedBy() )
1224 {
1225 case SvxNumberFormat::LISTTAB:
1226 {
1227 nTextXPos = static_cast<sal_uInt16>(
1228 rFmt.GetListtabPos() / nWidthRelation );
1229 if ( nTextXPos < nNumberXPos + nBulletWidth )
1230 {
1231 nTextXPos = nNumberXPos + nBulletWidth;
1232 }
1233 }
1234 break;
1235 case SvxNumberFormat::SPACE:
1236 case SvxNumberFormat::NOTHING:
1237 {
1238 nTextXPos = nNumberXPos + nBulletWidth;
1239 }
1240 break;
1241 }
1242
1243 nXStart = static_cast<sal_uInt16>( rFmt.GetIndentAt() / nWidthRelation );
1244 }
1245 // <--
1246
1247
1248 Rectangle aRect1(Point(nTextXPos, nYStart + nFontHeight / 2), Size(aSize.Width() / 2, 2));
1249 pVDev->SetFillColor( GetSettings().GetStyleSettings().GetWindowColor() ); // Color( COL_BLACK ) );
1250 pVDev->DrawRect( aRect1 );
1251
1252 Rectangle aRect2(Point(nXStart, nYStart + nLineHeight + nFontHeight / 2 ), Size(aSize.Width() / 2, 2));
1253 pVDev->DrawRect( aRect2 );
1254 nYStart += 2 * nLineHeight;
1255 }
1256 }
1257 else
1258 {
1259 SwNumberTree::tNumberVector aNumVector;
1260 sal_uInt16 nLineHeight = nFontHeight * 3 / 2;
1261 for( sal_uInt8 nLevel = 0; nLevel < MAXLEVEL;
1262 ++nLevel, nYStart = nYStart + nYStep )
1263 {
1264 const SwNumFmt &rFmt = pActNum->Get(nLevel);
1265 aNumVector.push_back(rFmt.GetStart());
1266 // --> OD 2008-02-01 #newlistlevelattrs#
1267 sal_uInt16 nXStart( 0 );
1268 if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
1269 {
1270 nXStart = rFmt.GetAbsLSpace() / nWidthRelation;
1271 }
1272 else if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT )
1273 {
1274 const long nTmpXStart( ( rFmt.GetIndentAt() +
1275 rFmt.GetFirstLineIndent() ) /
1276 nWidthRelation );
1277 if ( nTmpXStart < 0 )
1278 {
1279 nXStart = 0;
1280 }
1281 else
1282 {
1283 nXStart = static_cast<sal_uInt16>(nTmpXStart);
1284 }
1285 }
1286 nXStart /= 2;
1287 nXStart += 2;
1288 // <--
1289 sal_uInt16 nTextOffset = 2 * nXStep;
1290 if( SVX_NUM_BITMAP == rFmt.GetNumberingType() )
1291 {
1292 lcl_DrawGraphic(pVDev, rFmt, nXStart, nYStart, nWidthRelation);
1293 nTextOffset = nLineHeight + nXStep;
1294 }
1295 else if( SVX_NUM_CHAR_SPECIAL == rFmt.GetNumberingType() )
1296 {
1297 nTextOffset = lcl_DrawBullet(pVDev, rFmt, nXStart, nYStart, aStdFont.GetSize());
1298 nTextOffset = nTextOffset + nXStep;
1299 }
1300 else
1301 {
1302 pVDev->SetFont(aStdFont);
1303 if(pActNum->IsContinusNum())
1304 aNumVector[nLevel] = nPreNum;
1305 // --> OD 2005-11-17 #128041#
1306 String aText(pActNum->MakeNumString( aNumVector ));
1307 // <--
1308 pVDev->DrawText( Point(nXStart, nYStart), aText );
1309 nTextOffset = (sal_uInt16)pVDev->GetTextWidth(aText);
1310 nTextOffset = nTextOffset + nXStep;
1311 nPreNum++;
1312 }
1313 pVDev->SetFont(aStdFont);
1314
1315 // Changed as per BugID 79541 Branding/Configuration
1316 uno::Any MyAny = ::utl::ConfigManager::GetConfigManager()->
1317 GetDirectConfigProperty( ::utl::ConfigManager::PRODUCTNAME );
1318 ::rtl::OUString aProductName;
1319
1320 MyAny >>= aProductName;
1321 String sMsg(C2S("%PRODUCTNAME"));
1322 sMsg.SearchAndReplaceAscii( "%PRODUCTNAME" , aProductName );
1323
1324 if(pOutlineNames)
1325 sMsg = pOutlineNames[nLevel];
1326 pVDev->DrawText( Point(nXStart + nTextOffset, nYStart), sMsg );
1327 }
1328 }
1329 }
1330 DrawOutDev( Point(0,0), aSize,
1331 Point(0,0), aSize,
1332 *pVDev );
1333 delete pVDev;
1334
1335 }
1336
1337 /*-----------------02.12.97 10:34-------------------
1338
1339 --------------------------------------------------*/
~NumberingPreview()1340 NumberingPreview::~NumberingPreview()
1341 {
1342 }
1343
1344
1345