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 <svl/eitem.hxx>
21 : #include <svl/intitem.hxx>
22 : #include <sfx2/objsh.hxx>
23 : #include <vcl/builder.hxx>
24 : #include <vcl/svapp.hxx>
25 : #include <vcl/settings.hxx>
26 : #include <unotools/localedatawrapper.hxx>
27 : #include <i18nlangtag/lang.h>
28 : #include <svx/dialogs.hrc>
29 : #include <svtools/colorcfg.hxx>
30 :
31 : #include <cuires.hrc>
32 :
33 : #include <svx/numinf.hxx>
34 :
35 : #include "numfmt.hxx"
36 : #include <svx/numfmtsh.hxx>
37 : #include <dialmgr.hxx>
38 : #include <sfx2/request.hxx>
39 : #include <sfx2/app.hxx>
40 : #include <sfx2/basedlgs.hxx>
41 : #include "svx/flagsdef.hxx"
42 : #include <vector>
43 : #include <com/sun/star/lang/XServiceInfo.hpp>
44 : #include <boost/scoped_array.hpp>
45 :
46 : using ::com::sun::star::uno::Reference;
47 : using ::com::sun::star::lang::XServiceInfo;
48 : using ::com::sun::star::uno::UNO_QUERY;
49 :
50 : #define NUMKEY_UNDEFINED SAL_MAX_UINT32
51 :
52 : // static ----------------------------------------------------------------
53 :
54 : static sal_uInt16 pRanges[] =
55 : {
56 : SID_ATTR_NUMBERFORMAT_VALUE,
57 : SID_ATTR_NUMBERFORMAT_INFO,
58 : SID_ATTR_NUMBERFORMAT_NOLANGUAGE,
59 : SID_ATTR_NUMBERFORMAT_NOLANGUAGE,
60 : SID_ATTR_NUMBERFORMAT_ONE_AREA,
61 : SID_ATTR_NUMBERFORMAT_ONE_AREA,
62 : SID_ATTR_NUMBERFORMAT_SOURCE,
63 : SID_ATTR_NUMBERFORMAT_SOURCE,
64 : 0
65 : };
66 :
67 : /*************************************************************************
68 : #* Method: SvxNumberPreview
69 : #*------------------------------------------------------------------------
70 : #*
71 : #* Class: SvxNumberPreview
72 : #* Function: Constructor of the class SvxNumberPreview
73 : #* Input: Window, Resource-ID
74 : #* Output: ---
75 : #*
76 : #************************************************************************/
77 :
78 0 : SvxNumberPreview::SvxNumberPreview(Window* pParent, WinBits nStyle)
79 : : Window(pParent, nStyle)
80 : , mnPos(-1)
81 0 : , mnChar(0x0)
82 : {
83 0 : Font aFont( GetFont() );
84 0 : aFont.SetTransparent( true );
85 0 : aFont.SetColor( Application::GetSettings().GetStyleSettings().GetFieldColor() );
86 0 : SetFont( aFont );
87 0 : InitSettings( sal_True, sal_True );
88 0 : SetBorderStyle( WINDOW_BORDER_MONO );
89 0 : }
90 :
91 0 : extern "C" SAL_DLLPUBLIC_EXPORT Window* SAL_CALL makeSvxNumberPreview(Window *pParent, VclBuilder::stringmap &)
92 : {
93 0 : return new SvxNumberPreview(pParent);
94 : }
95 :
96 : /*************************************************************************
97 : #* Method: NotifyChange
98 : #*------------------------------------------------------------------------
99 : #*
100 : #* Class: SvxNumberPreview
101 : #* Function: Function for changing the preview string
102 : #* Input: String, color
103 : #* Output: ---
104 : #*
105 : #************************************************************************/
106 :
107 0 : void SvxNumberPreview::NotifyChange( const OUString& rPrevStr,
108 : const Color* pColor )
109 : {
110 : // detect and strip out '*' related placeholders
111 0 : aPrevStr = rPrevStr;
112 0 : mnPos = aPrevStr.indexOf( 0x1B );
113 0 : if ( mnPos != -1 )
114 : {
115 0 : mnChar = aPrevStr[ mnPos + 1 ];
116 : // delete placeholder and char to repeat
117 0 : aPrevStr = aPrevStr.replaceAt( mnPos, 2, "" );
118 : }
119 0 : svtools::ColorConfig aColorConfig;
120 0 : Color aWindowTextColor( aColorConfig.GetColorValue( svtools::FONTCOLOR ).nColor );
121 0 : aPrevCol = pColor ? *pColor : aWindowTextColor;
122 0 : Invalidate();
123 0 : Update();
124 0 : }
125 :
126 : /*************************************************************************
127 : #* Method: Paint
128 : #*------------------------------------------------------------------------
129 : #*
130 : #* Class: SvxNumberPreview
131 : #* Function: Function for repainting the window.
132 : #* Input: ---
133 : #* Output: ---
134 : #*
135 : #************************************************************************/
136 :
137 0 : void SvxNumberPreview::Paint( const Rectangle& )
138 : {
139 0 : Font aDrawFont = GetFont();
140 0 : Size aSzWnd = GetOutputSizePixel();
141 0 : OUString aTmpStr( aPrevStr );
142 0 : long nLeadSpace = (aSzWnd.Width() - GetTextWidth( aTmpStr )) /2;
143 :
144 0 : aDrawFont.SetColor( aPrevCol );
145 0 : SetFont( aDrawFont );
146 :
147 0 : if ( mnPos != -1 )
148 : {
149 0 : long nCharWidth = GetTextWidth( OUString( mnChar ) );
150 :
151 0 : int nNumCharsToInsert = 0;
152 0 : if (nCharWidth > 0) nNumCharsToInsert = nLeadSpace / nCharWidth;
153 :
154 0 : if ( nNumCharsToInsert > 0)
155 : {
156 0 : for ( int i = 0; i < nNumCharsToInsert; ++i )
157 0 : aTmpStr = aTmpStr.replaceAt( mnPos, 0, OUString(mnChar) );
158 : }
159 : }
160 0 : Point aPosText = Point( ( mnPos != -1 ) ? 0 : nLeadSpace,
161 0 : (aSzWnd.Height() - GetTextHeight())/2 );
162 0 : DrawText( aPosText, aTmpStr );
163 0 : }
164 :
165 :
166 :
167 0 : void SvxNumberPreview::InitSettings( sal_Bool bForeground, sal_Bool bBackground )
168 : {
169 0 : const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
170 :
171 0 : if ( bForeground )
172 : {
173 0 : svtools::ColorConfig aColorConfig;
174 0 : Color aTextColor( aColorConfig.GetColorValue( svtools::FONTCOLOR ).nColor );
175 :
176 0 : if ( IsControlForeground() )
177 0 : aTextColor = GetControlForeground();
178 0 : SetTextColor( aTextColor );
179 : }
180 :
181 0 : if ( bBackground )
182 : {
183 0 : if ( IsControlBackground() )
184 0 : SetBackground( GetControlBackground() );
185 : else
186 0 : SetBackground( rStyleSettings.GetWindowColor() );
187 : }
188 0 : Invalidate();
189 0 : }
190 :
191 :
192 :
193 0 : void SvxNumberPreview::StateChanged( StateChangedType nType )
194 : {
195 0 : if ( nType == STATE_CHANGE_CONTROLFOREGROUND )
196 0 : InitSettings( sal_True, sal_False );
197 0 : else if ( nType == STATE_CHANGE_CONTROLBACKGROUND )
198 0 : InitSettings( sal_False, sal_True );
199 :
200 0 : Window::StateChanged( nType );
201 0 : }
202 :
203 :
204 :
205 0 : void SvxNumberPreview::DataChanged( const DataChangedEvent& rDCEvt )
206 : {
207 0 : Window::DataChanged( rDCEvt );
208 :
209 0 : if ( ( rDCEvt.GetType() == DATACHANGED_SETTINGS ) && ( rDCEvt.GetFlags() & SETTINGS_STYLE ) )
210 0 : InitSettings( sal_True, sal_True );
211 0 : }
212 :
213 : // class SvxNumberFormatTabPage ------------------------------------------
214 :
215 : #define REMOVE_DONTKNOW() \
216 : if ( !m_pFtLanguage->IsEnabled() ) \
217 : { \
218 : m_pFtLanguage->Enable(); \
219 : m_pLbLanguage->Enable(); \
220 : m_pLbLanguage->SelectLanguage( pNumFmtShell->GetCurLanguage() ); \
221 : }
222 :
223 : #define HDL(hdl) LINK( this, SvxNumberFormatTabPage, hdl )
224 :
225 0 : SvxNumberFormatTabPage::SvxNumberFormatTabPage(Window* pParent,
226 : const SfxItemSet& rCoreAttrs)
227 : : SfxTabPage(pParent, "NumberingFormatPage",
228 : "cui/ui/numberingformatpage.ui", rCoreAttrs)
229 : , pNumItem(NULL)
230 : , pNumFmtShell(NULL)
231 : , nInitFormat(ULONG_MAX)
232 0 : , sAutomaticEntry(CUI_RES(RID_SVXSTR_AUTO_ENTRY))
233 0 : , pLastActivWindow(NULL)
234 : {
235 0 : get(m_pFtCategory, "categoryft");
236 0 : get(m_pLbCategory, "categorylb");
237 0 : get(m_pFtFormat, "formatft");
238 0 : get(m_pLbCurrency, "currencylb");
239 0 : get(m_pLbFormat, "formatlb");
240 0 : long nWidth = approximate_char_width() * 26;
241 0 : m_pLbFormat->set_width_request(nWidth);
242 0 : m_pLbCurrency->set_width_request(nWidth);
243 0 : get(m_pFtLanguage, "languageft");
244 0 : get(m_pLbLanguage, "languagelb");
245 0 : get(m_pCbSourceFormat, "sourceformat");
246 0 : get(m_pWndPreview, "preview");
247 0 : get(m_pFtOptions, "optionsft");
248 0 : get(m_pFtDecimals, "decimalsft");
249 0 : get(m_pEdDecimals, "decimalsed");
250 0 : get(m_pBtnNegRed, "negnumred");
251 0 : get(m_pFtLeadZeroes, "leadzerosft");
252 0 : get(m_pEdLeadZeroes, "leadzerosed");
253 0 : get(m_pBtnThousand, "thousands");
254 0 : get(m_pFormatCodeFrame, "formatcode");
255 0 : get(m_pEdFormat, "formated");
256 0 : get(m_pIbAdd, "add");
257 0 : get(m_pIbInfo, "edit");
258 0 : get(m_pIbRemove, "delete");
259 0 : get(m_pFtComment, "commentft");
260 0 : get(m_pEdComment, "commented");
261 :
262 0 : m_pLbCategory->SetDropDownLineCount(8);
263 0 : m_pWndPreview->set_height_request(GetTextHeight()*3);
264 :
265 0 : Init_Impl();
266 0 : SetExchangeSupport(); // this page needs ExchangeSupport
267 0 : nFixedCategory=-1;
268 0 : }
269 :
270 0 : SvxNumberFormatTabPage::~SvxNumberFormatTabPage()
271 : {
272 0 : delete pNumFmtShell;
273 0 : delete pNumItem;
274 0 : }
275 :
276 0 : void SvxNumberFormatTabPage::Init_Impl()
277 : {
278 0 : bNumItemFlag=sal_True;
279 0 : bOneAreaFlag=sal_False;
280 :
281 0 : m_pIbAdd->Enable(false );
282 0 : m_pIbRemove->Enable(false );
283 0 : m_pIbInfo->Enable(false );
284 :
285 0 : m_pEdComment->SetText(m_pLbCategory->GetEntry(1)); // string for user defined
286 :
287 0 : m_pEdComment->Hide();
288 :
289 0 : m_pCbSourceFormat->Check( false );
290 0 : m_pCbSourceFormat->Disable();
291 0 : m_pCbSourceFormat->Hide();
292 :
293 0 : Link aLink = LINK( this, SvxNumberFormatTabPage, SelFormatHdl_Impl );
294 :
295 0 : m_pLbCategory->SetSelectHdl( aLink );
296 0 : m_pLbFormat->SetSelectHdl( aLink );
297 0 : m_pLbLanguage->SetSelectHdl( aLink );
298 0 : m_pLbCurrency->SetSelectHdl( aLink );
299 0 : m_pCbSourceFormat->SetClickHdl( aLink );
300 :
301 0 : aLink = LINK( this, SvxNumberFormatTabPage, OptHdl_Impl );
302 :
303 0 : m_pEdDecimals->SetModifyHdl( aLink );
304 0 : m_pEdLeadZeroes->SetModifyHdl( aLink );
305 0 : m_pBtnNegRed->SetClickHdl( aLink );
306 0 : m_pBtnThousand->SetClickHdl( aLink );
307 0 : m_pLbFormat->SetDoubleClickHdl( HDL( DoubleClickHdl_Impl ) );
308 0 : m_pEdFormat->SetModifyHdl( HDL( EditHdl_Impl ) );
309 0 : m_pIbAdd->SetClickHdl( HDL( ClickHdl_Impl ) );
310 0 : m_pIbRemove->SetClickHdl( HDL( ClickHdl_Impl ) );
311 0 : m_pIbInfo->SetClickHdl( HDL( ClickHdl_Impl ) );
312 :
313 0 : aLink = LINK( this, SvxNumberFormatTabPage, LostFocusHdl_Impl);
314 :
315 0 : m_pEdComment->SetLoseFocusHdl( aLink);
316 0 : aResetWinTimer.SetTimeoutHdl(LINK( this, SvxNumberFormatTabPage, TimeHdl_Impl));
317 0 : aResetWinTimer.SetTimeout( 10);
318 :
319 : // initialize language ListBox
320 :
321 0 : m_pLbLanguage->InsertLanguage( LANGUAGE_SYSTEM );
322 : // Don't list ambiguous locales where we won't be able to convert the
323 : // LanguageType back to an identical Language_Country name and therefore
324 : // couldn't load the i18n LocaleData. Show DebugMsg in non-PRODUCT version.
325 : ::com::sun::star::uno::Sequence< sal_uInt16 > xLang =
326 0 : LocaleDataWrapper::getInstalledLanguageTypes();
327 0 : sal_Int32 nCount = xLang.getLength();
328 0 : for ( sal_Int32 i=0; i<nCount; i++ )
329 : {
330 0 : m_pLbLanguage->InsertLanguage( xLang[i] );
331 0 : }
332 0 : }
333 :
334 : /*************************************************************************
335 : #* Method: GetRanges
336 : #*------------------------------------------------------------------------
337 : #*
338 : #* Class: SvxNumberFormatTabPage
339 : #* Function: Returns area information.
340 : #* Input: ---
341 : #* Output: area
342 : #*
343 : #************************************************************************/
344 :
345 0 : sal_uInt16* SvxNumberFormatTabPage::GetRanges()
346 : {
347 0 : return pRanges;
348 : }
349 :
350 :
351 : /*************************************************************************
352 : #* Method: Create
353 : #*------------------------------------------------------------------------
354 : #*
355 : #* Class: SvxNumberFormatTabPage
356 : #* Function: Creates a new number format page.
357 : #* Input: Window, SfxItemSet
358 : #* Output: new TabPage
359 : #*
360 : #************************************************************************/
361 :
362 0 : SfxTabPage* SvxNumberFormatTabPage::Create( Window* pParent,
363 : const SfxItemSet& rAttrSet )
364 : {
365 0 : return ( new SvxNumberFormatTabPage( pParent, rAttrSet ) );
366 : }
367 :
368 :
369 : /*************************************************************************
370 : #* Method: Reset
371 : #*------------------------------------------------------------------------
372 : #*
373 : #* Class: SvxNumberFormatTabPage
374 : #* Function: The dialog's attributes are reset
375 : #* using the Itemset.
376 : #* Input: SfxItemSet
377 : #* Output: ---
378 : #*
379 : #************************************************************************/
380 :
381 0 : void SvxNumberFormatTabPage::Reset( const SfxItemSet& rSet )
382 : {
383 0 : const SfxUInt32Item* pValFmtAttr = NULL;
384 0 : const SfxPoolItem* pItem = NULL;
385 0 : const SfxBoolItem* pAutoEntryAttr = NULL;
386 :
387 0 : sal_uInt16 nCatLbSelPos = 0;
388 0 : sal_uInt16 nFmtLbSelPos = 0;
389 0 : LanguageType eLangType = LANGUAGE_DONTKNOW;
390 0 : std::vector<OUString> aFmtEntryList;
391 0 : SvxNumberValueType eValType = SVX_VALUE_TYPE_UNDEFINED;
392 0 : double nValDouble = 0;
393 0 : OUString aValString;
394 :
395 0 : SfxItemState eState = rSet.GetItemState( GetWhich( SID_ATTR_NUMBERFORMAT_NOLANGUAGE ),true,&pItem);
396 :
397 0 : if(eState==SFX_ITEM_SET)
398 : {
399 : const SfxBoolItem* pBoolLangItem = (const SfxBoolItem*)
400 0 : GetItem( rSet, SID_ATTR_NUMBERFORMAT_NOLANGUAGE);
401 :
402 0 : if(pBoolLangItem!=NULL && pBoolLangItem->GetValue())
403 : {
404 0 : HideLanguage();
405 : }
406 : else
407 : {
408 0 : HideLanguage(sal_False);
409 : }
410 :
411 : }
412 :
413 0 : eState = rSet.GetItemState( GetWhich( SID_ATTR_NUMBERFORMAT_INFO ),true,&pItem);
414 :
415 0 : if(eState==SFX_ITEM_SET)
416 : {
417 0 : if(pNumItem==NULL)
418 : {
419 0 : bNumItemFlag=sal_True;
420 0 : pNumItem= (SvxNumberInfoItem *) pItem->Clone();
421 : }
422 : else
423 : {
424 0 : bNumItemFlag=sal_False;
425 : }
426 : }
427 : else
428 : {
429 0 : bNumItemFlag=sal_False;
430 : }
431 :
432 :
433 0 : eState = rSet.GetItemState( GetWhich( SID_ATTR_NUMBERFORMAT_ONE_AREA ));
434 :
435 0 : if(eState==SFX_ITEM_SET)
436 : {
437 : const SfxBoolItem* pBoolItem = (const SfxBoolItem*)
438 0 : GetItem( rSet, SID_ATTR_NUMBERFORMAT_ONE_AREA);
439 :
440 0 : if(pBoolItem!=NULL)
441 : {
442 0 : bOneAreaFlag= pBoolItem->GetValue();
443 : }
444 : }
445 :
446 0 : eState = rSet.GetItemState( GetWhich( SID_ATTR_NUMBERFORMAT_SOURCE ) );
447 :
448 0 : if ( eState == SFX_ITEM_SET )
449 : {
450 : const SfxBoolItem* pBoolItem = (const SfxBoolItem*)
451 0 : GetItem( rSet, SID_ATTR_NUMBERFORMAT_SOURCE );
452 0 : if ( pBoolItem )
453 0 : m_pCbSourceFormat->Check( pBoolItem->GetValue() );
454 : else
455 0 : m_pCbSourceFormat->Check( false );
456 0 : m_pCbSourceFormat->Enable();
457 0 : m_pCbSourceFormat->Show();
458 : }
459 : else
460 : {
461 0 : sal_Bool bInit = sal_False; // set to sal_True for debug test
462 0 : m_pCbSourceFormat->Check( bInit );
463 0 : m_pCbSourceFormat->Enable( bInit );
464 0 : m_pCbSourceFormat->Show( bInit );
465 : }
466 :
467 : // pNumItem must have been set from outside!
468 : DBG_ASSERT( pNumItem, "No NumberInfo, no NumberFormatter, good bye.CRASH. :-(" );
469 :
470 0 : eState = rSet.GetItemState( GetWhich( SID_ATTR_NUMBERFORMAT_VALUE ) );
471 :
472 0 : if ( SFX_ITEM_DONTCARE != eState )
473 : pValFmtAttr = (const SfxUInt32Item*)
474 0 : GetItem( rSet, SID_ATTR_NUMBERFORMAT_VALUE );
475 :
476 0 : eValType = pNumItem->GetValueType();
477 :
478 0 : switch ( eValType )
479 : {
480 : case SVX_VALUE_TYPE_STRING:
481 0 : aValString = pNumItem->GetValueString();
482 0 : break;
483 : case SVX_VALUE_TYPE_NUMBER:
484 : // #50441# string may be set in addition to the value
485 0 : aValString = pNumItem->GetValueString();
486 0 : nValDouble = pNumItem->GetValueDouble();
487 0 : break;
488 : case SVX_VALUE_TYPE_UNDEFINED:
489 : default:
490 0 : break;
491 : }
492 :
493 0 : if ( pNumFmtShell )
494 0 : delete pNumFmtShell; // delete old shell if applicable (== reset)
495 :
496 : nInitFormat = ( pValFmtAttr ) // memorize init key
497 0 : ? pValFmtAttr->GetValue() // (for FillItemSet())
498 0 : : ULONG_MAX; // == DONT_KNOW
499 :
500 :
501 0 : if ( eValType == SVX_VALUE_TYPE_STRING )
502 : pNumFmtShell =SvxNumberFormatShell::Create(
503 : pNumItem->GetNumberFormatter(),
504 : (pValFmtAttr) ? nInitFormat : 0L,
505 : eValType,
506 0 : aValString );
507 : else
508 : pNumFmtShell =SvxNumberFormatShell::Create(
509 : pNumItem->GetNumberFormatter(),
510 : (pValFmtAttr) ? nInitFormat : 0L,
511 : eValType,
512 : nValDouble,
513 0 : &aValString );
514 :
515 :
516 0 : bool bUseStarFormat = false;
517 0 : SfxObjectShell* pDocSh = SfxObjectShell::Current();
518 0 : if ( pDocSh )
519 : {
520 : // is this a calc document
521 0 : Reference< XServiceInfo > xSI( pDocSh->GetModel(), UNO_QUERY );
522 0 : if ( xSI.is() )
523 0 : bUseStarFormat = xSI->supportsService("com.sun.star.sheet.SpreadsheetDocument");
524 : }
525 0 : pNumFmtShell->SetUseStarFormat( bUseStarFormat );
526 :
527 0 : FillCurrencyBox();
528 :
529 0 : OUString aPrevString;
530 0 : Color* pDummy = NULL;
531 : pNumFmtShell->GetInitSettings( nCatLbSelPos, eLangType, nFmtLbSelPos,
532 0 : aFmtEntryList, aPrevString, pDummy );
533 :
534 0 : m_pLbCurrency->SelectEntryPos((sal_Int32)pNumFmtShell->GetCurrencySymbol());
535 :
536 0 : nFixedCategory=nCatLbSelPos;
537 0 : if(bOneAreaFlag)
538 : {
539 0 : OUString sFixedCategory = m_pLbCategory->GetEntry(nFixedCategory);
540 0 : m_pLbCategory->Clear();
541 0 : m_pLbCategory->InsertEntry(sFixedCategory);
542 0 : SetCategory(0);
543 : }
544 : else
545 : {
546 0 : SetCategory(nCatLbSelPos );
547 : }
548 0 : eState = rSet.GetItemState( GetWhich( SID_ATTR_NUMBERFORMAT_ADD_AUTO ) );
549 0 : if(SFX_ITEM_SET == eState)
550 : pAutoEntryAttr = (const SfxBoolItem*)
551 0 : GetItem( rSet, SID_ATTR_NUMBERFORMAT_ADD_AUTO );
552 : // no_NO is an alias for nb_NO and normally isn't listed, we need it for
553 : // backwards compatibility, but only if the format passed is of
554 : // LanguageType no_NO.
555 0 : if ( eLangType == LANGUAGE_NORWEGIAN )
556 : {
557 0 : m_pLbLanguage->RemoveLanguage( eLangType ); // in case we're already called
558 0 : m_pLbLanguage->InsertLanguage( eLangType );
559 : }
560 0 : m_pLbLanguage->SelectLanguage( eLangType );
561 0 : if(pAutoEntryAttr)
562 0 : AddAutomaticLanguage_Impl(eLangType, pAutoEntryAttr->GetValue());
563 0 : UpdateFormatListBox_Impl(sal_False,sal_True);
564 :
565 : //! This spoils everything because it rematches currency formats based on
566 : //! the selected m_pLbCurrency entry instead of the current format.
567 : //! Besides that everything seems to be initialized by now, so why call it?
568 : // SelFormatHdl_Impl( m_pLbCategory );
569 :
570 0 : if ( pValFmtAttr )
571 : {
572 0 : EditHdl_Impl(m_pEdFormat); // UpdateOptions_Impl() als Seiteneffekt
573 : }
574 : else // DONT_KNOW
575 : {
576 : // everything disabled except direct input or changing the category
577 0 : Obstructing();
578 : }
579 :
580 0 : if ( m_pCbSourceFormat->IsChecked() )
581 : {
582 : // everything disabled except SourceFormat checkbox
583 0 : EnableBySourceFormat_Impl();
584 0 : }
585 0 : }
586 :
587 : /*************************************************************************
588 : #* Method: Obstructing
589 : #*------------------------------------------------------------------------
590 : #*
591 : #* Class: SvxNumberFormatTabPage
592 : #* Function: Disable the controls except from changing the category
593 : #* and direct input.
594 : #* Input: ---
595 : #* Output: ---
596 : #*
597 : #************************************************************************/
598 0 : void SvxNumberFormatTabPage::Obstructing()
599 : {
600 0 : m_pLbFormat->SetNoSelection();
601 0 : m_pLbLanguage->SetNoSelection();
602 0 : m_pFtLanguage->Disable();
603 0 : m_pLbLanguage->Disable();
604 :
605 0 : m_pIbAdd->Enable(false );
606 0 : m_pIbRemove->Enable(false );
607 0 : m_pIbInfo->Enable(false );
608 :
609 0 : m_pBtnNegRed->Disable();
610 0 : m_pBtnThousand->Disable();
611 0 : m_pFtLeadZeroes->Disable();
612 0 : m_pFtDecimals->Disable();
613 0 : m_pEdLeadZeroes->Disable();
614 0 : m_pEdDecimals->Disable();
615 0 : m_pFtOptions->Disable();
616 0 : m_pEdDecimals->SetText( OUString() );
617 0 : m_pEdLeadZeroes->SetText( OUString() );
618 0 : m_pBtnNegRed->Check( false );
619 0 : m_pBtnThousand->Check( false );
620 0 : m_pWndPreview->NotifyChange( OUString() );
621 :
622 0 : m_pLbCategory->SelectEntryPos( 0 );
623 0 : m_pEdFormat->SetText( OUString() );
624 0 : m_pFtComment->SetText( OUString() );
625 0 : m_pEdComment->SetText(m_pLbCategory->GetEntry(1)); // string for user defined
626 :
627 0 : m_pEdFormat->GrabFocus();
628 0 : }
629 :
630 :
631 : /*************************************************************************
632 : #* Enable/Disable dialog parts depending on the value of the SourceFormat
633 : #* checkbox.
634 : #************************************************************************/
635 0 : void SvxNumberFormatTabPage::EnableBySourceFormat_Impl()
636 : {
637 0 : sal_Bool bEnable = !m_pCbSourceFormat->IsChecked();
638 0 : if ( !bEnable )
639 0 : m_pCbSourceFormat->GrabFocus();
640 0 : m_pFtCategory->Enable( bEnable );
641 0 : m_pLbCategory->Enable( bEnable );
642 0 : m_pFtFormat->Enable( bEnable );
643 0 : m_pLbCurrency->Enable( bEnable );
644 0 : m_pLbFormat->Enable( bEnable );
645 0 : m_pFtLanguage->Enable( bEnable );
646 0 : m_pLbLanguage->Enable( bEnable );
647 0 : m_pFtDecimals->Enable( bEnable );
648 0 : m_pEdDecimals->Enable( bEnable );
649 0 : m_pFtLeadZeroes->Enable( bEnable );
650 0 : m_pEdLeadZeroes->Enable( bEnable );
651 0 : m_pBtnNegRed->Enable( bEnable );
652 0 : m_pBtnThousand->Enable( bEnable );
653 0 : m_pFtOptions->Enable( bEnable );
654 0 : m_pFormatCodeFrame->Enable( bEnable );
655 0 : m_pLbFormat->Invalidate(); // #i43322#
656 0 : }
657 :
658 :
659 : /*************************************************************************
660 : #* Method: HideLanguage
661 : #*------------------------------------------------------------------------
662 : #*
663 : #* Class: SvxNumberFormatTabPage
664 : #* Function: Hides the language settings:
665 : #* Input: sal_Bool nFlag
666 : #* Output: ---
667 : #*
668 : #************************************************************************/
669 :
670 0 : void SvxNumberFormatTabPage::HideLanguage(sal_Bool nFlag)
671 : {
672 0 : m_pFtLanguage->Show(!nFlag);
673 0 : m_pLbLanguage->Show(!nFlag);
674 0 : }
675 :
676 : /*************************************************************************
677 : #* Method: FillItemSet
678 : #*------------------------------------------------------------------------
679 : #*
680 : #* Class: SvxNumberFormatTabPage
681 : #* Function: Adjusts the attributes in the ItemSet,
682 : #* and - if bNumItemFlag is not set - the
683 : #* numItem in the DocShell.
684 : #* Input: SfxItemSet
685 : #* Output: ---
686 : #*
687 : #************************************************************************/
688 :
689 0 : bool SvxNumberFormatTabPage::FillItemSet( SfxItemSet& rCoreAttrs )
690 : {
691 0 : sal_Bool bDataChanged = m_pFtLanguage->IsEnabled() || m_pCbSourceFormat->IsEnabled();
692 0 : if ( bDataChanged )
693 : {
694 0 : const SfxItemSet& rMyItemSet = GetItemSet();
695 0 : sal_uInt16 nWhich = GetWhich( SID_ATTR_NUMBERFORMAT_VALUE );
696 0 : SfxItemState eItemState = rMyItemSet.GetItemState( nWhich, false );
697 :
698 : // OK chosen - Is format code input entered already taken over?
699 : // If not, simulate Add. Upon syntax error ignore input and prevent Put.
700 0 : OUString aFormat = m_pEdFormat->GetText();
701 0 : sal_uInt32 nCurKey = pNumFmtShell->GetCurNumFmtKey();
702 :
703 0 : if ( m_pIbAdd->IsEnabled() || pNumFmtShell->IsTmpCurrencyFormat(aFormat) )
704 : { // #79599# It is not sufficient to just add the format code (or
705 : // delete it in case of bOneAreaFlag and resulting category change).
706 : // Upon switching tab pages we need all settings to be consistent
707 : // in case this page will be redisplayed later.
708 0 : bDataChanged = (ClickHdl_Impl(m_pIbAdd) != 0);
709 0 : nCurKey = pNumFmtShell->GetCurNumFmtKey();
710 : }
711 0 : else if(nCurKey == NUMKEY_UNDEFINED)
712 : { // something went wrong, e.g. in Writer #70281#
713 0 : pNumFmtShell->FindEntry(aFormat, &nCurKey);
714 : }
715 :
716 :
717 : // Chosen format:
718 :
719 0 : if ( bDataChanged )
720 : {
721 0 : bDataChanged = ( nInitFormat != nCurKey );
722 :
723 0 : if (bDataChanged)
724 : {
725 0 : rCoreAttrs.Put( SfxUInt32Item( nWhich, nCurKey ) );
726 : }
727 0 : else if(SFX_ITEM_DEFAULT == eItemState)
728 : {
729 0 : rCoreAttrs.ClearItem( nWhich );
730 : }
731 : }
732 :
733 :
734 : // List of changed user defined formats:
735 :
736 0 : const size_t nDelCount = pNumFmtShell->GetUpdateDataCount();
737 :
738 0 : if ( nDelCount > 0 )
739 : {
740 0 : boost::scoped_array<sal_uInt32> pDelArr(new sal_uInt32[nDelCount]);
741 :
742 0 : pNumFmtShell->GetUpdateData( pDelArr.get(), nDelCount );
743 0 : pNumItem->SetDelFormatArray( pDelArr.get(), nDelCount );
744 :
745 0 : if(bNumItemFlag==sal_True)
746 : {
747 0 : rCoreAttrs.Put( *pNumItem );
748 : }
749 : else
750 : {
751 0 : SfxObjectShell* pDocSh = SfxObjectShell::Current();
752 :
753 : DBG_ASSERT( pDocSh, "DocShell not found!" );
754 :
755 :
756 0 : if ( pDocSh )
757 0 : pDocSh->PutItem( *pNumItem );
758 0 : }
759 : }
760 :
761 :
762 : // Whether source format is to be taken or not:
763 :
764 0 : if ( m_pCbSourceFormat->IsEnabled() )
765 : {
766 0 : sal_uInt16 _nWhich = GetWhich( SID_ATTR_NUMBERFORMAT_SOURCE );
767 0 : SfxItemState _eItemState = rMyItemSet.GetItemState( _nWhich, false );
768 : const SfxBoolItem* pBoolItem = (const SfxBoolItem*)
769 0 : GetItem( rMyItemSet, SID_ATTR_NUMBERFORMAT_SOURCE );
770 0 : sal_Bool bOld = (pBoolItem ? pBoolItem->GetValue() : sal_False);
771 0 : rCoreAttrs.Put( SfxBoolItem( _nWhich, m_pCbSourceFormat->IsChecked() ) );
772 0 : if ( !bDataChanged )
773 0 : bDataChanged = (bOld != (sal_Bool) m_pCbSourceFormat->IsChecked() ||
774 0 : _eItemState != SFX_ITEM_SET);
775 : }
776 :
777 : // FillItemSet is only called on OK, here we can notify the
778 : // NumberFormatShell that all new user defined formats are valid.
779 0 : pNumFmtShell->ValidateNewEntries();
780 0 : if(m_pLbLanguage->IsVisible() &&
781 0 : LISTBOX_ENTRY_NOTFOUND != m_pLbLanguage->GetEntryPos(sAutomaticEntry))
782 : rCoreAttrs.Put(SfxBoolItem(SID_ATTR_NUMBERFORMAT_ADD_AUTO,
783 0 : m_pLbLanguage->GetSelectEntry() == sAutomaticEntry));
784 : }
785 :
786 0 : return bDataChanged;
787 : }
788 :
789 :
790 0 : int SvxNumberFormatTabPage::DeactivatePage( SfxItemSet* _pSet )
791 : {
792 0 : if ( _pSet )
793 0 : FillItemSet( *_pSet );
794 0 : return LEAVE_PAGE;
795 : }
796 :
797 0 : void SvxNumberFormatTabPage::SetInfoItem( const SvxNumberInfoItem& rItem )
798 : {
799 0 : if(pNumItem==NULL)
800 : {
801 0 : pNumItem = (SvxNumberInfoItem*)rItem.Clone();
802 : }
803 0 : }
804 :
805 0 : void SvxNumberFormatTabPage::FillFormatListBox_Impl( std::vector<OUString>& rEntries )
806 : {
807 0 : OUString aEntry;
808 0 : OUString aTmpString;
809 0 : Font aFont=m_pLbCategory->GetFont();
810 0 : size_t i = 0;
811 : short nTmpCatPos;
812 : short aPrivCat;
813 :
814 0 : m_pLbFormat->Clear();
815 0 : m_pLbFormat->SetUpdateMode( false );
816 :
817 0 : if( rEntries.empty() )
818 0 : return;
819 :
820 0 : if(bOneAreaFlag)
821 : {
822 0 : nTmpCatPos=nFixedCategory;
823 : }
824 : else
825 : {
826 0 : nTmpCatPos=m_pLbCategory->GetSelectEntryPos();
827 : }
828 :
829 0 : switch (nTmpCatPos)
830 : {
831 : case CAT_ALL:
832 : case CAT_TEXT:
833 0 : case CAT_NUMBER: i=1;
834 0 : aEntry=rEntries[0];
835 0 : if (nTmpCatPos == CAT_TEXT)
836 0 : aTmpString=aEntry;
837 : else
838 0 : aTmpString = pNumFmtShell->GetStandardName();
839 0 : aPrivCat=pNumFmtShell->GetCategory4Entry(0);
840 0 : m_pLbFormat->InsertFontEntry( aTmpString, aFont );
841 0 : break;
842 :
843 0 : default: break;
844 : }
845 :
846 0 : if(pNumFmtShell!=NULL)
847 : {
848 0 : for ( ; i < rEntries.size(); ++i )
849 : {
850 0 : aEntry = rEntries[i];
851 0 : aPrivCat=pNumFmtShell->GetCategory4Entry( static_cast<short>(i) );
852 0 : if(aPrivCat!=CAT_TEXT)
853 : {
854 0 : Color* pPreviewColor = NULL;
855 0 : OUString aPreviewString( GetExpColorString( pPreviewColor, aEntry, aPrivCat ) );
856 0 : Font aEntryFont( m_pLbFormat->GetFont() );
857 0 : m_pLbFormat->InsertFontEntry( aPreviewString, aEntryFont, pPreviewColor );
858 : }
859 : else
860 : {
861 0 : m_pLbFormat->InsertFontEntry(aEntry,aFont);
862 : }
863 : }
864 : }
865 0 : m_pLbFormat->SetUpdateMode( true );
866 0 : rEntries.clear();
867 : }
868 :
869 : /*************************************************************************
870 : #* Method: UpdateOptions_Impl
871 : #*------------------------------------------------------------------------
872 : #*
873 : #* Class: SvxNumberFormatTabPage
874 : #* Function: Adjusts the options attributes
875 : #* depending on the selected format.
876 : #* Input: Flag, whether the category has changed.
877 : #* Output: ---
878 : #*
879 : #************************************************************************/
880 :
881 0 : void SvxNumberFormatTabPage::UpdateOptions_Impl( sal_Bool bCheckCatChange /*= sal_False*/ )
882 : {
883 0 : OUString theFormat = m_pEdFormat->GetText();
884 0 : sal_Int32 nCurCategory = m_pLbCategory->GetSelectEntryPos();
885 0 : sal_uInt16 nCategory = static_cast<sal_uInt16>(nCurCategory);
886 0 : sal_uInt16 nDecimals = 0;
887 0 : sal_uInt16 nZeroes = 0;
888 0 : bool bNegRed = false;
889 0 : bool bThousand = false;
890 0 : sal_Int32 nCurrencyPos =m_pLbCurrency->GetSelectEntryPos();
891 :
892 0 : if(bOneAreaFlag)
893 0 : nCurCategory=nFixedCategory;
894 :
895 :
896 : pNumFmtShell->GetOptions( theFormat,
897 : bThousand, bNegRed,
898 : nDecimals, nZeroes,
899 0 : nCategory );
900 0 : sal_Bool bDoIt=sal_False;
901 0 : if(nCategory==CAT_CURRENCY)
902 : {
903 0 : sal_uInt16 nTstPos=pNumFmtShell->FindCurrencyFormat(theFormat);
904 0 : if(nCurrencyPos!=static_cast<sal_Int32>(nTstPos) && nTstPos!=(sal_uInt16)-1)
905 : {
906 0 : m_pLbCurrency->SelectEntryPos(nTstPos);
907 0 : pNumFmtShell->SetCurrencySymbol(nTstPos);
908 0 : bDoIt=sal_True;
909 : }
910 : }
911 :
912 :
913 :
914 0 : if ( nCategory != nCurCategory || bDoIt)
915 : {
916 0 : if ( bCheckCatChange )
917 : {
918 0 : if(bOneAreaFlag)
919 0 : SetCategory(0);
920 : else
921 0 : SetCategory(nCategory );
922 :
923 0 : UpdateFormatListBox_Impl( sal_True, sal_False );
924 : }
925 : }
926 0 : else if ( m_pLbFormat->GetEntryCount() > 0 )
927 : {
928 0 : sal_uInt32 nCurEntryKey=NUMKEY_UNDEFINED;
929 0 : if(!pNumFmtShell->FindEntry( m_pEdFormat->GetText(),&nCurEntryKey))
930 : {
931 0 : m_pLbFormat->SetNoSelection();
932 : }
933 : }
934 0 : if(bOneAreaFlag)
935 : {
936 0 : nCategory=nFixedCategory;
937 : }
938 :
939 0 : switch ( nCategory )
940 : {
941 : case CAT_NUMBER:
942 : case CAT_PERCENT:
943 : case CAT_CURRENCY:
944 0 : m_pFtOptions->Enable();
945 0 : m_pFtDecimals->Enable();
946 0 : m_pEdDecimals->Enable();
947 0 : m_pFtLeadZeroes->Enable();
948 0 : m_pEdLeadZeroes->Enable();
949 0 : m_pBtnNegRed->Enable();
950 0 : m_pBtnThousand->Enable();
951 0 : m_pEdDecimals->SetText( OUString::number( nDecimals ) );
952 0 : m_pEdLeadZeroes->SetText( OUString::number( nZeroes ) );
953 0 : m_pBtnNegRed->Check( bNegRed );
954 0 : m_pBtnThousand->Check( bThousand );
955 0 : break;
956 :
957 : case CAT_ALL:
958 : case CAT_USERDEFINED:
959 : case CAT_TEXT:
960 : case CAT_DATE:
961 : case CAT_TIME:
962 : case CAT_BOOLEAN:
963 : case CAT_SCIENTIFIC:
964 : case CAT_FRACTION:
965 : default:
966 0 : m_pFtOptions->Disable();
967 0 : m_pFtDecimals->Disable();
968 0 : m_pEdDecimals->Disable();
969 0 : m_pFtLeadZeroes->Disable();
970 0 : m_pEdLeadZeroes->Disable();
971 0 : m_pBtnNegRed->Disable();
972 0 : m_pBtnThousand->Disable();
973 0 : m_pEdDecimals->SetText( OUString::number( 0 ) );
974 0 : m_pEdLeadZeroes->SetText( OUString::number( 0 ) );
975 0 : m_pBtnNegRed->Check( false );
976 0 : m_pBtnThousand->Check( false );
977 0 : }
978 0 : }
979 :
980 :
981 : /*************************************************************************
982 : #* Method: UpdateFormatListBox_Impl
983 : #*------------------------------------------------------------------------
984 : #*
985 : #* Class: SvxNumberFormatTabPage
986 : #* Function: Updates the format lisbox and additionally the
987 : #* string in the editbox is changed depending on
988 : #* the bUpdateEdit flag.
989 : #* Input: Flags for category and editbox.
990 : #* Output: ---
991 : #*
992 : #************************************************************************/
993 :
994 0 : void SvxNumberFormatTabPage::UpdateFormatListBox_Impl
995 : (
996 : sal_uInt16 bCat, // Category or country/language ListBox?
997 : sal_Bool bUpdateEdit
998 : )
999 : {
1000 0 : std::vector<OUString> aEntryList;
1001 0 : short nFmtLbSelPos = 0;
1002 : short nTmpCatPos;
1003 :
1004 0 : if(bOneAreaFlag)
1005 : {
1006 0 : nTmpCatPos=nFixedCategory;
1007 : }
1008 : else
1009 : {
1010 0 : nTmpCatPos=m_pLbCategory->GetSelectEntryPos();
1011 : }
1012 :
1013 :
1014 0 : if ( bCat )
1015 : {
1016 0 : if(nTmpCatPos!=CAT_CURRENCY)
1017 0 : m_pLbCurrency->Hide();
1018 : else
1019 0 : m_pLbCurrency->Show();
1020 :
1021 0 : pNumFmtShell->CategoryChanged( nTmpCatPos,nFmtLbSelPos, aEntryList );
1022 : }
1023 : else
1024 0 : pNumFmtShell->LanguageChanged( m_pLbLanguage->GetSelectLanguage(),
1025 0 : nFmtLbSelPos,aEntryList );
1026 :
1027 0 : REMOVE_DONTKNOW() // possibly UI-Enable
1028 :
1029 :
1030 0 : if ( (!aEntryList.empty()) && (nFmtLbSelPos != SELPOS_NONE) )
1031 : {
1032 0 : if(bUpdateEdit)
1033 : {
1034 0 : OUString aFormat=aEntryList[nFmtLbSelPos];
1035 0 : m_pEdFormat->SetText(aFormat);
1036 0 : m_pFtComment->SetText(pNumFmtShell->GetComment4Entry(nFmtLbSelPos));
1037 : }
1038 :
1039 0 : if(!bOneAreaFlag || !bCat)
1040 : {
1041 0 : FillFormatListBox_Impl( aEntryList );
1042 0 : m_pLbFormat->SelectEntryPos( nFmtLbSelPos );
1043 :
1044 0 : m_pFtComment->SetText(pNumFmtShell->GetComment4Entry(nFmtLbSelPos));
1045 0 : if(pNumFmtShell->GetUserDefined4Entry(nFmtLbSelPos))
1046 : {
1047 0 : if(pNumFmtShell->GetComment4Entry(nFmtLbSelPos).isEmpty())
1048 : {
1049 0 : m_pFtComment->SetText(m_pLbCategory->GetEntry(1));
1050 : }
1051 : }
1052 0 : ChangePreviewText( (sal_uInt16)nFmtLbSelPos );
1053 : }
1054 :
1055 : }
1056 : else
1057 : {
1058 0 : FillFormatListBox_Impl( aEntryList );
1059 0 : if(nFmtLbSelPos != SELPOS_NONE)
1060 : {
1061 0 : m_pLbFormat->SelectEntryPos( (sal_uInt16)nFmtLbSelPos );
1062 :
1063 0 : m_pFtComment->SetText(pNumFmtShell->GetComment4Entry(nFmtLbSelPos));
1064 0 : if(pNumFmtShell->GetUserDefined4Entry(nFmtLbSelPos))
1065 : {
1066 0 : if(pNumFmtShell->GetComment4Entry(nFmtLbSelPos).isEmpty())
1067 : {
1068 0 : m_pFtComment->SetText(m_pLbCategory->GetEntry(1));
1069 : }
1070 : }
1071 : }
1072 : else
1073 : {
1074 0 : m_pLbFormat->SetNoSelection();
1075 : }
1076 :
1077 0 : if ( bUpdateEdit )
1078 : {
1079 0 : m_pEdFormat->SetText( OUString() );
1080 0 : m_pWndPreview->NotifyChange( OUString() );
1081 : }
1082 : }
1083 :
1084 0 : aEntryList.clear();
1085 0 : }
1086 :
1087 :
1088 : /*************************************************************************
1089 : #* Handle: DoubleClickHdl_Impl
1090 : #*------------------------------------------------------------------------
1091 : #*
1092 : #* Class: SvxNumberFormatTabPage
1093 : #* Function: On a double click in the format lisbox the
1094 : #* value is adopted and the OK button pushed.
1095 : #* Input: Pointer on the Listbox
1096 : #* Output: ---
1097 : #*
1098 : #************************************************************************/
1099 :
1100 0 : IMPL_LINK( SvxNumberFormatTabPage, DoubleClickHdl_Impl, SvxFontListBox*, pLb )
1101 : {
1102 0 : if (pLb == m_pLbFormat)
1103 : {
1104 0 : SelFormatHdl_Impl( pLb );
1105 :
1106 0 : if ( fnOkHdl.IsSet() )
1107 : { // temporary solution, should be offered by SfxTabPage
1108 0 : fnOkHdl.Call( NULL );
1109 : }
1110 : else
1111 : {
1112 0 : SfxSingleTabDialog* pParent = dynamic_cast< SfxSingleTabDialog* >( GetParentDialog() );
1113 0 : OKButton* pOKButton = pParent ? pParent->GetOKButton() : NULL;
1114 0 : if ( pOKButton )
1115 0 : pOKButton->Click();
1116 : }
1117 : }
1118 0 : return 0;
1119 : }
1120 :
1121 :
1122 : /*************************************************************************
1123 : #* Method: SelFormatHdl_Impl
1124 : #*------------------------------------------------------------------------
1125 : #*
1126 : #* Class: SvxNumberFormatTabPage
1127 : #* Function: Is called when the language, the category or the format
1128 : #* is changed. Accordingly the settings are adjusted.
1129 : #* Input: Pointer on the Listbox
1130 : #* Output: ---
1131 : #*
1132 : #************************************************************************/
1133 :
1134 0 : IMPL_LINK( SvxNumberFormatTabPage, SelFormatHdl_Impl, void *, pLb )
1135 : {
1136 0 : if (pLb == m_pCbSourceFormat)
1137 : {
1138 0 : EnableBySourceFormat_Impl(); // enable/disable everything else
1139 0 : if ( m_pCbSourceFormat->IsChecked() )
1140 0 : return 0; // just disabled everything else
1141 :
1142 : // Reinit options enable/disable for current selection.
1143 :
1144 : // Current category may be UserDefined with no format entries defined.
1145 : // And yes, m_pLbFormat is a SvxFontListBox with sal_uLong list positions,
1146 : // implementation returns a TREELIST_ENTRY_NOTFOUND if empty,
1147 : // comparison with sal_Int32 LISTBOX_ENTRY_NOTFOUND wouldn't match.
1148 0 : if ( m_pLbFormat->GetSelectEntryPos() == TREELIST_ENTRY_NOTFOUND )
1149 0 : pLb = m_pLbCategory; // continue with the current category selected
1150 : else
1151 0 : pLb = m_pLbFormat; // continue with the current format selected
1152 : }
1153 :
1154 : sal_Int32 nTmpCatPos;
1155 :
1156 0 : if(bOneAreaFlag)
1157 : {
1158 0 : nTmpCatPos=nFixedCategory;
1159 : }
1160 : else
1161 : {
1162 0 : nTmpCatPos=m_pLbCategory->GetSelectEntryPos();
1163 : }
1164 :
1165 0 : if (nTmpCatPos==CAT_CURRENCY && pLb == m_pLbCurrency )
1166 : {
1167 0 : sal_Int32 nCurrencyPos = m_pLbCurrency->GetSelectEntryPos();
1168 0 : pNumFmtShell->SetCurrencySymbol(static_cast<sal_uInt32>(nCurrencyPos));
1169 : }
1170 :
1171 :
1172 : // Format-ListBox ----------------------------------------------------
1173 0 : if (pLb == m_pLbFormat)
1174 : {
1175 0 : sal_uLong nSelPos = m_pLbFormat->GetSelectEntryPos();
1176 0 : OUString aFormat = m_pLbFormat->GetSelectEntry();
1177 0 : OUString aComment;
1178 :
1179 0 : short nFmtLbSelPos = static_cast<short>(nSelPos);
1180 :
1181 0 : aFormat=pNumFmtShell->GetFormat4Entry(nFmtLbSelPos);
1182 0 : aComment=pNumFmtShell->GetComment4Entry(nFmtLbSelPos);
1183 0 : if(pNumFmtShell->GetUserDefined4Entry(nFmtLbSelPos))
1184 : {
1185 0 : if(aComment.isEmpty())
1186 : {
1187 0 : aComment = m_pLbCategory->GetEntry(1);
1188 : }
1189 : }
1190 :
1191 0 : if ( !aFormat.isEmpty() )
1192 : {
1193 0 : if(!m_pEdFormat->HasFocus()) m_pEdFormat->SetText( aFormat );
1194 0 : m_pFtComment->SetText(aComment);
1195 0 : ChangePreviewText( static_cast<sal_uInt16>(nSelPos) );
1196 : }
1197 :
1198 0 : REMOVE_DONTKNOW() // possibly UI-Enable
1199 :
1200 0 : if ( pNumFmtShell->FindEntry( aFormat) )
1201 : {
1202 0 : m_pIbAdd->Enable(false );
1203 0 : sal_Bool bIsUserDef=pNumFmtShell->IsUserDefined( aFormat );
1204 0 : m_pIbRemove->Enable(bIsUserDef);
1205 0 : m_pIbInfo->Enable(bIsUserDef);
1206 :
1207 : }
1208 : else
1209 : {
1210 0 : m_pIbAdd->Enable(true );
1211 0 : m_pIbInfo->Enable(true );
1212 0 : m_pIbRemove->Enable(false );
1213 0 : m_pFtComment->SetText(m_pEdComment->GetText());
1214 :
1215 : }
1216 0 : UpdateOptions_Impl( sal_False );
1217 :
1218 0 : return 0;
1219 : }
1220 :
1221 :
1222 : // category-ListBox -------------------------------------------------
1223 0 : if (pLb == m_pLbCategory || pLb == m_pLbCurrency)
1224 : {
1225 0 : UpdateFormatListBox_Impl( sal_True, sal_True );
1226 0 : EditHdl_Impl( NULL );
1227 0 : UpdateOptions_Impl( sal_False );
1228 :
1229 0 : return 0;
1230 : }
1231 :
1232 :
1233 : // language/country-ListBox ----------------------------------------------
1234 0 : if (pLb == m_pLbLanguage)
1235 : {
1236 0 : UpdateFormatListBox_Impl( sal_False, sal_True );
1237 0 : EditHdl_Impl(m_pEdFormat);
1238 :
1239 0 : return 0;
1240 : }
1241 0 : return 0;
1242 : }
1243 :
1244 :
1245 : /*************************************************************************
1246 : #* Method: ClickHdl_Impl, PushButton* pIB
1247 : #*------------------------------------------------------------------------
1248 : #*
1249 : #* Class: SvxNumberFormatTabPage
1250 : #* Function: Called when the add or delete button is pushed,
1251 : #* adjusts the number format list.
1252 : #* Input: Toolbox- Button
1253 : #* Output: ---
1254 : #*
1255 : #************************************************************************/
1256 :
1257 0 : IMPL_LINK( SvxNumberFormatTabPage, ClickHdl_Impl, PushButton*, pIB)
1258 : {
1259 0 : sal_Bool bAdded = sal_False;
1260 0 : sal_Bool bDeleted = sal_False;
1261 0 : sal_uLong nReturn = 0;
1262 0 : const sal_uLong nReturnChanged = 0x1; // THE boolean return value
1263 0 : const sal_uLong nReturnAdded = 0x2; // temp: format added
1264 0 : const sal_uLong nReturnOneArea = 0x4; // temp: one area but category changed => ignored
1265 :
1266 0 : if (pIB == m_pIbAdd)
1267 : { // Also called from FillItemSet() if a temporary currency format has
1268 : // to be added, not only if the Add button is enabled.
1269 0 : OUString aFormat = m_pEdFormat->GetText();
1270 0 : std::vector<OUString> aEntryList;
1271 0 : std::vector<OUString> a2EntryList;
1272 0 : sal_uInt16 nCatLbSelPos = 0;
1273 0 : short nFmtLbSelPos = SELPOS_NONE;
1274 0 : sal_Int32 nErrPos=0;
1275 :
1276 0 : pNumFmtShell->SetCurCurrencyEntry(NULL);
1277 : bAdded = pNumFmtShell->AddFormat( aFormat, nErrPos,
1278 : nCatLbSelPos, nFmtLbSelPos,
1279 0 : aEntryList);
1280 0 : if ( bAdded )
1281 0 : nReturn |= nReturnChanged | nReturnAdded;
1282 :
1283 0 : if (pLastActivWindow == m_pEdComment)
1284 : {
1285 0 : m_pEdFormat->GrabFocus();
1286 0 : m_pEdComment->Hide();
1287 0 : m_pFtComment->Show();
1288 0 : m_pFtComment->SetText(m_pEdComment->GetText());
1289 : }
1290 :
1291 0 : if ( !nErrPos ) // Syntax ok?
1292 : {
1293 : // May be sorted under a different locale if LCID was parsed.
1294 0 : if (bAdded)
1295 0 : m_pLbLanguage->SelectLanguage( pNumFmtShell->GetCurLanguage() );
1296 :
1297 0 : if(nCatLbSelPos==CAT_CURRENCY)
1298 : {
1299 0 : m_pLbCurrency->SelectEntryPos((sal_uInt16)pNumFmtShell->GetCurrencySymbol());
1300 : }
1301 :
1302 0 : if(bOneAreaFlag && (nFixedCategory!=nCatLbSelPos))
1303 : {
1304 0 : if(bAdded) aEntryList.clear();
1305 : bDeleted = pNumFmtShell->RemoveFormat( aFormat,
1306 : nCatLbSelPos,
1307 : nFmtLbSelPos,
1308 0 : a2EntryList);
1309 0 : if(bDeleted) a2EntryList.clear();
1310 0 : m_pEdFormat->GrabFocus();
1311 0 : m_pEdFormat->SetSelection( Selection( 0, SELECTION_MAX ) );
1312 0 : nReturn |= nReturnOneArea;
1313 : }
1314 : else
1315 : {
1316 0 : if ( bAdded && (nFmtLbSelPos != SELPOS_NONE) )
1317 : {
1318 : // everything alright
1319 0 : if(bOneAreaFlag) //@@ ???
1320 0 : SetCategory(0);
1321 : else
1322 0 : SetCategory(nCatLbSelPos );
1323 :
1324 0 : FillFormatListBox_Impl( aEntryList );
1325 0 : if(m_pEdComment->GetText()!=OUString(m_pLbCategory->GetEntry(1)))
1326 : {
1327 : pNumFmtShell->SetComment4Entry(nFmtLbSelPos,
1328 0 : m_pEdComment->GetText());
1329 : }
1330 : else
1331 : {
1332 : pNumFmtShell->SetComment4Entry(nFmtLbSelPos,
1333 0 : OUString());
1334 : }
1335 0 : m_pLbFormat->SelectEntryPos( (sal_uInt16)nFmtLbSelPos );
1336 0 : m_pEdFormat->SetText( aFormat );
1337 :
1338 0 : m_pEdComment->SetText(m_pLbCategory->GetEntry(1)); // String for user defined
1339 :
1340 0 : ChangePreviewText( (sal_uInt16)nFmtLbSelPos );
1341 : }
1342 : }
1343 : }
1344 : else // syntax error
1345 : {
1346 0 : m_pEdFormat->GrabFocus();
1347 0 : m_pEdFormat->SetSelection( Selection( nErrPos == -1 ? SELECTION_MAX : nErrPos, SELECTION_MAX ) );
1348 : }
1349 0 : EditHdl_Impl(m_pEdFormat);
1350 0 : nReturn = ((nReturn & nReturnOneArea) ? 0 : (nReturn & nReturnChanged));
1351 :
1352 0 : aEntryList.clear();
1353 0 : a2EntryList.clear();
1354 : }
1355 0 : else if (pIB == m_pIbRemove)
1356 : {
1357 0 : OUString aFormat = m_pEdFormat->GetText();
1358 0 : std::vector<OUString> aEntryList;
1359 0 : sal_uInt16 nCatLbSelPos = 0;
1360 0 : short nFmtLbSelPos = SELPOS_NONE;
1361 :
1362 : bDeleted = pNumFmtShell->RemoveFormat( aFormat,
1363 : nCatLbSelPos,
1364 : nFmtLbSelPos,
1365 0 : aEntryList );
1366 :
1367 0 : m_pEdComment->SetText(m_pLbCategory->GetEntry(1));
1368 0 : if ( bDeleted )
1369 : {
1370 0 : if( nFmtLbSelPos>=0 && static_cast<size_t>(nFmtLbSelPos)<aEntryList.size() )
1371 : {
1372 0 : aFormat = aEntryList[nFmtLbSelPos];
1373 : }
1374 :
1375 0 : FillFormatListBox_Impl( aEntryList );
1376 :
1377 0 : if ( nFmtLbSelPos != SELPOS_NONE )
1378 : {
1379 0 : if(bOneAreaFlag) //@@ ???
1380 0 : SetCategory(0);
1381 : else
1382 0 : SetCategory(nCatLbSelPos );
1383 :
1384 0 : m_pLbFormat->SelectEntryPos( (sal_uInt16)nFmtLbSelPos );
1385 0 : m_pEdFormat->SetText( aFormat );
1386 0 : ChangePreviewText( (sal_uInt16)nFmtLbSelPos );
1387 : }
1388 : else
1389 : {
1390 : // set to "all/standard"
1391 0 : SetCategory(0);
1392 0 : SelFormatHdl_Impl(m_pLbCategory);
1393 : }
1394 : }
1395 0 : EditHdl_Impl(m_pEdFormat);
1396 :
1397 0 : aEntryList.clear();
1398 : }
1399 0 : else if (pIB == m_pIbInfo)
1400 : {
1401 0 : if(!(pLastActivWindow == m_pEdComment))
1402 : {
1403 0 : m_pEdComment->SetText(m_pFtComment->GetText());
1404 0 : m_pEdComment->Show();
1405 0 : m_pFtComment->Hide();
1406 0 : m_pEdComment->GrabFocus();
1407 : }
1408 : else
1409 : {
1410 0 : m_pEdFormat->GrabFocus();
1411 0 : m_pEdComment->Hide();
1412 0 : m_pFtComment->Show();
1413 : }
1414 : }
1415 :
1416 0 : return nReturn;
1417 : }
1418 :
1419 :
1420 : /*************************************************************************
1421 : #* Method: EditHdl_Impl
1422 : #*------------------------------------------------------------------------
1423 : #*
1424 : #* Class: SvxNumberFormatTabPage
1425 : #* Function: When the entry in the edit field is changed
1426 : #* the preview is updated and
1427 : #* Input: Pointer on Editbox
1428 : #* Output: ---
1429 : #*
1430 : #************************************************************************/
1431 :
1432 0 : IMPL_LINK( SvxNumberFormatTabPage, EditHdl_Impl, Edit*, pEdFormat )
1433 : {
1434 0 : sal_uInt32 nCurKey = NUMKEY_UNDEFINED;
1435 :
1436 0 : if ( m_pEdFormat->GetText().isEmpty() )
1437 : {
1438 0 : m_pIbAdd->Enable(false );
1439 0 : m_pIbRemove->Enable(false );
1440 0 : m_pIbInfo->Enable(false );
1441 0 : m_pFtComment->SetText(OUString());
1442 : }
1443 : else
1444 : {
1445 0 : OUString aFormat = m_pEdFormat->GetText();
1446 0 : MakePreviewText( aFormat );
1447 :
1448 0 : if ( pNumFmtShell->FindEntry( aFormat, &nCurKey ) )
1449 : {
1450 0 : m_pIbAdd->Enable(false );
1451 0 : sal_Bool bUserDef=pNumFmtShell->IsUserDefined( aFormat );
1452 :
1453 0 : m_pIbRemove->Enable(bUserDef);
1454 0 : m_pIbInfo->Enable(bUserDef);
1455 :
1456 0 : if(bUserDef)
1457 : {
1458 0 : sal_uInt16 nTmpCurPos=pNumFmtShell->FindCurrencyFormat(aFormat );
1459 :
1460 0 : if(nTmpCurPos!=(sal_uInt16)-1)
1461 0 : m_pLbCurrency->SelectEntryPos(nTmpCurPos);
1462 : }
1463 0 : short nPosi=pNumFmtShell->GetListPos4Entry(aFormat);
1464 0 : if(nPosi>=0)
1465 0 : m_pLbFormat->SelectEntryPos( (sal_uInt16)nPosi);
1466 :
1467 : }
1468 : else
1469 : {
1470 :
1471 0 : m_pIbAdd->Enable(true );
1472 0 : m_pIbInfo->Enable(true);
1473 0 : m_pIbRemove->Enable(false );
1474 :
1475 0 : m_pFtComment->SetText(m_pEdComment->GetText());
1476 :
1477 0 : }
1478 : }
1479 :
1480 0 : if ( pEdFormat )
1481 : {
1482 0 : pNumFmtShell->SetCurNumFmtKey( nCurKey );
1483 0 : UpdateOptions_Impl( sal_True );
1484 : }
1485 :
1486 0 : return 0;
1487 : }
1488 :
1489 :
1490 : /*************************************************************************
1491 : #* Method: NotifyChange
1492 : #*------------------------------------------------------------------------
1493 : #*
1494 : #* Class: SvxNumberFormatTabPage
1495 : #* Function: Does changes in the number attributes.
1496 : #* Input: Options- Controls
1497 : #* Output: ---
1498 : #*
1499 : #************************************************************************/
1500 :
1501 0 : IMPL_LINK( SvxNumberFormatTabPage, OptHdl_Impl, void *, pOptCtrl )
1502 : {
1503 0 : if ( (pOptCtrl == m_pEdLeadZeroes)
1504 0 : || (pOptCtrl == m_pEdDecimals)
1505 0 : || (pOptCtrl == m_pBtnNegRed)
1506 0 : || (pOptCtrl == m_pBtnThousand) )
1507 : {
1508 0 : OUString aFormat;
1509 0 : sal_Bool bThousand = m_pBtnThousand->IsEnabled()
1510 0 : && m_pBtnThousand->IsChecked();
1511 0 : sal_Bool bNegRed = m_pBtnNegRed->IsEnabled()
1512 0 : && m_pBtnNegRed->IsChecked();
1513 0 : sal_uInt16 nPrecision = (m_pEdDecimals->IsEnabled())
1514 0 : ? (sal_uInt16)m_pEdDecimals->GetValue()
1515 0 : : (sal_uInt16)0;
1516 0 : sal_uInt16 nLeadZeroes = (m_pEdLeadZeroes->IsEnabled())
1517 0 : ? (sal_uInt16)m_pEdLeadZeroes->GetValue()
1518 0 : : (sal_uInt16)0;
1519 :
1520 : pNumFmtShell->MakeFormat( aFormat,
1521 : bThousand, bNegRed,
1522 : nPrecision, nLeadZeroes,
1523 0 : (sal_uInt16)m_pLbFormat->GetSelectEntryPos() );
1524 :
1525 0 : m_pEdFormat->SetText( aFormat );
1526 0 : MakePreviewText( aFormat );
1527 :
1528 0 : if ( pNumFmtShell->FindEntry( aFormat ) )
1529 : {
1530 0 : m_pIbAdd->Enable(false );
1531 0 : sal_Bool bUserDef=pNumFmtShell->IsUserDefined( aFormat );
1532 0 : m_pIbRemove->Enable(bUserDef);
1533 0 : m_pIbInfo->Enable(bUserDef);
1534 0 : EditHdl_Impl(m_pEdFormat);
1535 :
1536 : }
1537 : else
1538 : {
1539 0 : EditHdl_Impl( NULL );
1540 0 : m_pLbFormat->SetNoSelection();
1541 0 : }
1542 : }
1543 0 : return 0;
1544 : }
1545 :
1546 0 : IMPL_LINK_NOARG(SvxNumberFormatTabPage, TimeHdl_Impl)
1547 : {
1548 0 : pLastActivWindow=NULL;
1549 0 : return 0;
1550 : }
1551 :
1552 :
1553 : /*************************************************************************
1554 : #* Method: LostFocusHdl_Impl
1555 : #*------------------------------------------------------------------------
1556 : #*
1557 : #* Class: SvxNumberFormatTabPage
1558 : #* Function: Does changes in the number attributes.
1559 : #* Input: Options- Controls
1560 : #* Output: ---
1561 : #*
1562 : #************************************************************************/
1563 :
1564 0 : IMPL_LINK( SvxNumberFormatTabPage, LostFocusHdl_Impl, Edit *, pEd)
1565 : {
1566 0 : if (pEd == m_pEdComment)
1567 : {
1568 0 : aResetWinTimer.Start();
1569 0 : m_pFtComment->SetText(m_pEdComment->GetText());
1570 0 : m_pEdComment->Hide();
1571 0 : m_pFtComment->Show();
1572 0 : if(!m_pIbAdd->IsEnabled())
1573 : {
1574 0 : sal_uInt16 nSelPos = (sal_uInt16) m_pLbFormat->GetSelectEntryPos();
1575 : pNumFmtShell->SetComment4Entry(nSelPos,
1576 0 : m_pEdComment->GetText());
1577 0 : m_pEdComment->SetText(m_pLbCategory->GetEntry(1)); // String for user defined
1578 : }
1579 : }
1580 0 : return 0;
1581 : }
1582 :
1583 : /*************************************************************************
1584 : #* Method: NotifyChange
1585 : #*------------------------------------------------------------------------
1586 : #*
1587 : #* Class: SvxNumberFormatTabPage
1588 : #* Function: Does changes in the number attributes.
1589 : #* Input: Options- Controls
1590 : #* Output: ---
1591 : #*
1592 : #************************************************************************/
1593 :
1594 0 : OUString SvxNumberFormatTabPage::GetExpColorString(
1595 : Color*& rpPreviewColor, const OUString& rFormatStr, short nTmpCatPos)
1596 : {
1597 0 : double nVal = 0;
1598 0 : switch (nTmpCatPos)
1599 : {
1600 0 : case CAT_CURRENCY: nVal=SVX_NUMVAL_CURRENCY; break;
1601 :
1602 : case CAT_SCIENTIFIC:
1603 : case CAT_FRACTION:
1604 0 : case CAT_NUMBER: nVal=SVX_NUMVAL_STANDARD; break;
1605 :
1606 0 : case CAT_PERCENT: nVal=SVX_NUMVAL_PERCENT; break;
1607 :
1608 0 : case CAT_ALL: nVal=SVX_NUMVAL_STANDARD; break;
1609 :
1610 0 : case CAT_TIME: nVal=SVX_NUMVAL_TIME; break;
1611 0 : case CAT_DATE: nVal=SVX_NUMVAL_DATE; break;
1612 :
1613 0 : case CAT_BOOLEAN: nVal=SVX_NUMVAL_BOOLEAN; break;
1614 :
1615 : case CAT_USERDEFINED:
1616 : case CAT_TEXT:
1617 0 : default: nVal=0;break;
1618 : }
1619 :
1620 0 : OUString aPreviewString;
1621 0 : pNumFmtShell->MakePrevStringFromVal( rFormatStr, aPreviewString, rpPreviewColor, nVal );
1622 0 : return aPreviewString;
1623 : }
1624 :
1625 0 : void SvxNumberFormatTabPage::MakePreviewText( const OUString& rFormat )
1626 : {
1627 0 : OUString aPreviewString;
1628 0 : Color* pPreviewColor = NULL;
1629 0 : pNumFmtShell->MakePreviewString( rFormat, aPreviewString, pPreviewColor );
1630 0 : m_pWndPreview->NotifyChange( aPreviewString, pPreviewColor );
1631 0 : }
1632 :
1633 0 : void SvxNumberFormatTabPage::ChangePreviewText( sal_uInt16 nPos )
1634 : {
1635 0 : OUString aPreviewString;
1636 0 : Color* pPreviewColor = NULL;
1637 0 : pNumFmtShell->FormatChanged( nPos, aPreviewString, pPreviewColor );
1638 0 : m_pWndPreview->NotifyChange( aPreviewString, pPreviewColor );
1639 0 : }
1640 :
1641 0 : bool SvxNumberFormatTabPage::PreNotify( NotifyEvent& rNEvt )
1642 : {
1643 0 : if(rNEvt.GetType()==EVENT_LOSEFOCUS)
1644 : {
1645 0 : if ( rNEvt.GetWindow() == dynamic_cast< Window* >( m_pEdComment ) && !m_pEdComment->IsVisible() )
1646 : {
1647 0 : pLastActivWindow = NULL;
1648 : }
1649 : else
1650 : {
1651 0 : pLastActivWindow = rNEvt.GetWindow();
1652 : }
1653 : }
1654 :
1655 0 : return SfxTabPage::PreNotify( rNEvt );
1656 : }
1657 : /*************************************************************************
1658 : #* Method: SetOkHdl
1659 : #*------------------------------------------------------------------------
1660 : #*
1661 : #* Class: SvxNumberFormatTabPage
1662 : #* Function: Resets the OkHandler.
1663 : #* Input: new OkHandler
1664 : #* Output: ---
1665 : #*
1666 : #************************************************************************/
1667 :
1668 0 : void SvxNumberFormatTabPage::SetOkHdl( const Link& rOkHandler )
1669 : {
1670 0 : fnOkHdl = rOkHandler;
1671 0 : }
1672 :
1673 0 : void SvxNumberFormatTabPage::FillCurrencyBox()
1674 : {
1675 0 : std::vector<OUString> aList;
1676 :
1677 0 : sal_uInt16 nSelPos=0;
1678 0 : pNumFmtShell->GetCurrencySymbols(aList, &nSelPos);
1679 :
1680 0 : for(std::vector<OUString>::iterator i = aList.begin() + 1;i != aList.end(); ++i)
1681 0 : m_pLbCurrency->InsertEntry(*i);
1682 :
1683 0 : m_pLbCurrency->SelectEntryPos(nSelPos);
1684 0 : }
1685 :
1686 0 : void SvxNumberFormatTabPage::SetCategory(sal_uInt16 nPos)
1687 : {
1688 0 : sal_uInt16 nCurCategory = m_pLbCategory->GetSelectEntryPos();
1689 : sal_uInt16 nTmpCatPos;
1690 :
1691 0 : if(bOneAreaFlag)
1692 : {
1693 0 : nTmpCatPos=nFixedCategory;
1694 : }
1695 : else
1696 : {
1697 0 : nTmpCatPos=nPos;
1698 : }
1699 :
1700 0 : if(m_pLbCategory->GetEntryCount()==1 || nCurCategory!=nPos)
1701 : {
1702 0 : if(nTmpCatPos!=CAT_CURRENCY)
1703 0 : m_pLbCurrency->Hide();
1704 : else
1705 0 : m_pLbCurrency->Show();
1706 : }
1707 0 : m_pLbCategory->SelectEntryPos(nPos);
1708 0 : }
1709 : /* to support Writer text field language handling an
1710 : additional entry needs to be inserted into the ListBox
1711 : which marks a certain language as automatically detected
1712 : Additionally the "Default" language is removed
1713 : */
1714 0 : void SvxNumberFormatTabPage::AddAutomaticLanguage_Impl(LanguageType eAutoLang, sal_Bool bSelect)
1715 : {
1716 0 : m_pLbLanguage->RemoveLanguage(LANGUAGE_SYSTEM);
1717 0 : sal_uInt16 nPos = m_pLbLanguage->InsertEntry(sAutomaticEntry);
1718 0 : m_pLbLanguage->SetEntryData(nPos, (void*)(sal_uLong)eAutoLang);
1719 0 : if(bSelect)
1720 0 : m_pLbLanguage->SelectEntryPos(nPos);
1721 0 : }
1722 :
1723 0 : void SvxNumberFormatTabPage::PageCreated (SfxAllItemSet aSet)
1724 : {
1725 0 : SFX_ITEMSET_ARG (&aSet,pNumberInfoItem,SvxNumberInfoItem,SID_ATTR_NUMBERFORMAT_INFO,false);
1726 0 : SFX_ITEMSET_ARG (&aSet,pLinkItem,SfxLinkItem,SID_LINK_TYPE,false);
1727 0 : if (pNumberInfoItem)
1728 0 : SetNumberFormatList(*pNumberInfoItem);
1729 0 : if (pLinkItem)
1730 0 : SetOkHdl(pLinkItem->GetValue());
1731 0 : }
1732 :
1733 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|