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