1*efeef26fSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*efeef26fSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*efeef26fSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*efeef26fSAndrew Rist * distributed with this work for additional information 6*efeef26fSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*efeef26fSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*efeef26fSAndrew Rist * "License"); you may not use this file except in compliance 9*efeef26fSAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*efeef26fSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*efeef26fSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*efeef26fSAndrew Rist * software distributed under the License is distributed on an 15*efeef26fSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*efeef26fSAndrew Rist * KIND, either express or implied. See the License for the 17*efeef26fSAndrew Rist * specific language governing permissions and limitations 18*efeef26fSAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*efeef26fSAndrew Rist *************************************************************/ 21*efeef26fSAndrew Rist 22*efeef26fSAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_sw.hxx" 26cdf0e10cSrcweir 27cdf0e10cSrcweir 28cdf0e10cSrcweir #include <hintids.hxx> 29cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp> 30cdf0e10cSrcweir #include <comphelper/processfactory.hxx> 31cdf0e10cSrcweir #include <editeng/unolingu.hxx> 32cdf0e10cSrcweir #include <unotools/localedatawrapper.hxx> 33cdf0e10cSrcweir #include <i18npool/lang.h> 34cdf0e10cSrcweir #ifndef _ZFORMAT_HXX //autogen 35cdf0e10cSrcweir #define _ZFORLIST_DECLARE_TABLE 36cdf0e10cSrcweir #include <svl/zformat.hxx> 37cdf0e10cSrcweir #endif 38cdf0e10cSrcweir #include <svl/eitem.hxx> 39cdf0e10cSrcweir #include <svx/svxids.hrc> 40cdf0e10cSrcweir #include <svx/numinf.hxx> 41cdf0e10cSrcweir #include <vcl/msgbox.hxx> 42cdf0e10cSrcweir #include <svx/flagsdef.hxx> 43cdf0e10cSrcweir #include <svl/itemset.hxx> 44cdf0e10cSrcweir #include <docsh.hxx> 45cdf0e10cSrcweir #include <swtypes.hxx> 46cdf0e10cSrcweir #include <swmodule.hxx> 47cdf0e10cSrcweir #include <view.hxx> 48cdf0e10cSrcweir #include <wrtsh.hxx> 49cdf0e10cSrcweir #include <numfmtlb.hxx> 50cdf0e10cSrcweir #include <utlui.hrc> 51cdf0e10cSrcweir #include "swabstdlg.hxx" 52cdf0e10cSrcweir #include "dialog.hrc" 53cdf0e10cSrcweir #include <unomid.h> 54cdf0e10cSrcweir #include <sfx2/viewfrm.hxx> 55cdf0e10cSrcweir 56cdf0e10cSrcweir using namespace ::com::sun::star::uno; 57cdf0e10cSrcweir using namespace ::com::sun::star::lang; 58cdf0e10cSrcweir 59cdf0e10cSrcweir 60cdf0e10cSrcweir // STATIC DATA ----------------------------------------------------------- 61cdf0e10cSrcweir 62cdf0e10cSrcweir /*-------------------------------------------------------------------- 63cdf0e10cSrcweir Beschreibung: 64cdf0e10cSrcweir nFormatType: Formate dieses Typs anzeigen 65cdf0e10cSrcweir nDefFmt: Dieses Format selektieren und ggf vorher 66cdf0e10cSrcweir einfuegen 67cdf0e10cSrcweir --------------------------------------------------------------------*/ 68cdf0e10cSrcweir 69cdf0e10cSrcweir NumFormatListBox::NumFormatListBox( Window* pWin, const ResId& rResId, 70cdf0e10cSrcweir short nFormatType, sal_uLong nDefFmt, 71cdf0e10cSrcweir sal_Bool bUsrFmts ) : 72cdf0e10cSrcweir ListBox ( pWin, rResId ), 73cdf0e10cSrcweir nCurrFormatType (-1), 74cdf0e10cSrcweir nStdEntry (0), 75cdf0e10cSrcweir bOneArea (sal_False), 76cdf0e10cSrcweir nDefFormat (nDefFmt), 77cdf0e10cSrcweir pVw (0), 78cdf0e10cSrcweir pOwnFormatter (0), 79cdf0e10cSrcweir bShowLanguageControl(sal_False), 80cdf0e10cSrcweir bUseAutomaticLanguage(sal_True) 81cdf0e10cSrcweir { 82cdf0e10cSrcweir Init(nFormatType, bUsrFmts); 83cdf0e10cSrcweir } 84cdf0e10cSrcweir 85cdf0e10cSrcweir /*-------------------------------------------------------------------- 86cdf0e10cSrcweir Beschreibung: 87cdf0e10cSrcweir --------------------------------------------------------------------*/ 88cdf0e10cSrcweir 89cdf0e10cSrcweir NumFormatListBox::NumFormatListBox( Window* pWin, SwView* pView, 90cdf0e10cSrcweir const ResId& rResId, short nFormatType, 91cdf0e10cSrcweir sal_uLong nDefFmt, sal_Bool bUsrFmts ) : 92cdf0e10cSrcweir ListBox ( pWin, rResId ), 93cdf0e10cSrcweir nCurrFormatType (-1), 94cdf0e10cSrcweir nStdEntry (0), 95cdf0e10cSrcweir bOneArea (sal_False), 96cdf0e10cSrcweir nDefFormat (nDefFmt), 97cdf0e10cSrcweir pVw (pView), 98cdf0e10cSrcweir pOwnFormatter (0), 99cdf0e10cSrcweir bShowLanguageControl(sal_False), 100cdf0e10cSrcweir bUseAutomaticLanguage(sal_True) 101cdf0e10cSrcweir { 102cdf0e10cSrcweir Init(nFormatType, bUsrFmts); 103cdf0e10cSrcweir } 104cdf0e10cSrcweir 105cdf0e10cSrcweir /* -----------------15.06.98 11:29------------------- 106cdf0e10cSrcweir * 107cdf0e10cSrcweir * --------------------------------------------------*/ 108cdf0e10cSrcweir 109cdf0e10cSrcweir void NumFormatListBox::Init(short nFormatType, sal_Bool bUsrFmts) 110cdf0e10cSrcweir { 111cdf0e10cSrcweir SwView *pView = GetView(); 112cdf0e10cSrcweir 113cdf0e10cSrcweir if (pView) 114cdf0e10cSrcweir eCurLanguage = pView->GetWrtShell().GetCurLang(); 115cdf0e10cSrcweir else 116cdf0e10cSrcweir eCurLanguage = SvxLocaleToLanguage( SvtSysLocale().GetLocaleData().getLocale() ); 117cdf0e10cSrcweir 118cdf0e10cSrcweir if (bUsrFmts == sal_False) 119cdf0e10cSrcweir { 120cdf0e10cSrcweir Reference< XMultiServiceFactory > xMSF = ::comphelper::getProcessServiceFactory(); 121cdf0e10cSrcweir pOwnFormatter = new SvNumberFormatter(xMSF, eCurLanguage); 122cdf0e10cSrcweir } 123cdf0e10cSrcweir 124cdf0e10cSrcweir SetFormatType(nFormatType); 125cdf0e10cSrcweir SetDefFormat(nDefFormat); 126cdf0e10cSrcweir 127cdf0e10cSrcweir SetSelectHdl(LINK(this, NumFormatListBox, SelectHdl)); 128cdf0e10cSrcweir } 129cdf0e10cSrcweir 130cdf0e10cSrcweir /*-------------------------------------------------------------------- 131cdf0e10cSrcweir Beschreibung: 132cdf0e10cSrcweir --------------------------------------------------------------------*/ 133cdf0e10cSrcweir 134cdf0e10cSrcweir NumFormatListBox::~NumFormatListBox() 135cdf0e10cSrcweir { 136cdf0e10cSrcweir if (pOwnFormatter) 137cdf0e10cSrcweir delete pOwnFormatter; 138cdf0e10cSrcweir } 139cdf0e10cSrcweir /*-------------------------------------------------------------------- 140cdf0e10cSrcweir Beschreibung: 141cdf0e10cSrcweir --------------------------------------------------------------------*/ 142cdf0e10cSrcweir 143cdf0e10cSrcweir SwView* NumFormatListBox::GetView() 144cdf0e10cSrcweir { 145cdf0e10cSrcweir if( pVw ) 146cdf0e10cSrcweir return pVw; 147cdf0e10cSrcweir return ::GetActiveView(); 148cdf0e10cSrcweir } 149cdf0e10cSrcweir 150cdf0e10cSrcweir /*-------------------------------------------------------------------- 151cdf0e10cSrcweir Beschreibung: 152cdf0e10cSrcweir --------------------------------------------------------------------*/ 153cdf0e10cSrcweir 154cdf0e10cSrcweir void NumFormatListBox::SetFormatType(const short nFormatType) 155cdf0e10cSrcweir { 156cdf0e10cSrcweir if (nCurrFormatType == -1 || 157cdf0e10cSrcweir (nCurrFormatType & nFormatType) == 0) // Es gibt Mischformate, wie z.B. DateTime 158cdf0e10cSrcweir { 159cdf0e10cSrcweir SvNumberFormatter* pFormatter; 160cdf0e10cSrcweir 161cdf0e10cSrcweir if( pOwnFormatter ) 162cdf0e10cSrcweir pFormatter = pOwnFormatter; 163cdf0e10cSrcweir else 164cdf0e10cSrcweir { 165cdf0e10cSrcweir SwView *pView = GetView(); 166cdf0e10cSrcweir DBG_ASSERT(pView, "no view found"); 167cdf0e10cSrcweir if(!pView) 168cdf0e10cSrcweir return; 169cdf0e10cSrcweir SwWrtShell &rSh = pView->GetWrtShell(); 170cdf0e10cSrcweir pFormatter = rSh.GetNumberFormatter(); 171cdf0e10cSrcweir } 172cdf0e10cSrcweir 173cdf0e10cSrcweir Clear(); // Alle Eintraege in der Listbox entfernen 174cdf0e10cSrcweir 175cdf0e10cSrcweir NfIndexTableOffset eOffsetStart = NF_NUMBER_START; 176cdf0e10cSrcweir NfIndexTableOffset eOffsetEnd = NF_NUMBER_START; 177cdf0e10cSrcweir 178cdf0e10cSrcweir switch( nFormatType ) 179cdf0e10cSrcweir { 180cdf0e10cSrcweir case NUMBERFORMAT_NUMBER: 181cdf0e10cSrcweir eOffsetStart=NF_NUMBER_START; 182cdf0e10cSrcweir eOffsetEnd=NF_NUMBER_END; 183cdf0e10cSrcweir break; 184cdf0e10cSrcweir 185cdf0e10cSrcweir case NUMBERFORMAT_PERCENT: 186cdf0e10cSrcweir eOffsetStart=NF_PERCENT_START; 187cdf0e10cSrcweir eOffsetEnd=NF_PERCENT_END; 188cdf0e10cSrcweir break; 189cdf0e10cSrcweir 190cdf0e10cSrcweir case NUMBERFORMAT_CURRENCY: 191cdf0e10cSrcweir eOffsetStart=NF_CURRENCY_START; 192cdf0e10cSrcweir eOffsetEnd=NF_CURRENCY_END; 193cdf0e10cSrcweir break; 194cdf0e10cSrcweir 195cdf0e10cSrcweir case NUMBERFORMAT_DATETIME: 196cdf0e10cSrcweir eOffsetStart=NF_DATE_START; 197cdf0e10cSrcweir eOffsetEnd=NF_TIME_END; 198cdf0e10cSrcweir break; 199cdf0e10cSrcweir 200cdf0e10cSrcweir case NUMBERFORMAT_DATE: 201cdf0e10cSrcweir eOffsetStart=NF_DATE_START; 202cdf0e10cSrcweir eOffsetEnd=NF_DATE_END; 203cdf0e10cSrcweir break; 204cdf0e10cSrcweir 205cdf0e10cSrcweir case NUMBERFORMAT_TIME: 206cdf0e10cSrcweir eOffsetStart=NF_TIME_START; 207cdf0e10cSrcweir eOffsetEnd=NF_TIME_END; 208cdf0e10cSrcweir break; 209cdf0e10cSrcweir 210cdf0e10cSrcweir case NUMBERFORMAT_SCIENTIFIC: 211cdf0e10cSrcweir eOffsetStart=NF_SCIENTIFIC_START; 212cdf0e10cSrcweir eOffsetEnd=NF_SCIENTIFIC_END; 213cdf0e10cSrcweir break; 214cdf0e10cSrcweir 215cdf0e10cSrcweir case NUMBERFORMAT_FRACTION: 216cdf0e10cSrcweir eOffsetStart=NF_FRACTION_START; 217cdf0e10cSrcweir eOffsetEnd=NF_FRACTION_END; 218cdf0e10cSrcweir break; 219cdf0e10cSrcweir 220cdf0e10cSrcweir case NUMBERFORMAT_LOGICAL: 221cdf0e10cSrcweir eOffsetStart=NF_BOOLEAN; 222cdf0e10cSrcweir eOffsetEnd=NF_BOOLEAN; 223cdf0e10cSrcweir break; 224cdf0e10cSrcweir 225cdf0e10cSrcweir case NUMBERFORMAT_TEXT: 226cdf0e10cSrcweir eOffsetStart=NF_TEXT; 227cdf0e10cSrcweir eOffsetEnd=NF_TEXT; 228cdf0e10cSrcweir break; 229cdf0e10cSrcweir 230cdf0e10cSrcweir case NUMBERFORMAT_ALL: 231cdf0e10cSrcweir eOffsetStart=NF_NUMERIC_START; 232cdf0e10cSrcweir eOffsetEnd = NfIndexTableOffset( NF_INDEX_TABLE_ENTRIES - 1 ); 233cdf0e10cSrcweir break; 234cdf0e10cSrcweir 235cdf0e10cSrcweir default: 236cdf0e10cSrcweir DBG_ERROR("what a format?"); 237cdf0e10cSrcweir break; 238cdf0e10cSrcweir } 239cdf0e10cSrcweir 240cdf0e10cSrcweir const SvNumberformat* pFmt; 241cdf0e10cSrcweir sal_uInt16 nPos, i = 0; 242cdf0e10cSrcweir sal_uLong nFormat; 243cdf0e10cSrcweir Color* pCol; 244cdf0e10cSrcweir double fVal = GetDefValue( nFormatType ); 245cdf0e10cSrcweir String sValue; 246cdf0e10cSrcweir 247cdf0e10cSrcweir sal_uLong nSysNumFmt = pFormatter->GetFormatIndex( 248cdf0e10cSrcweir NF_NUMBER_SYSTEM, eCurLanguage ); 249cdf0e10cSrcweir sal_uLong nSysShortDateFmt = pFormatter->GetFormatIndex( 250cdf0e10cSrcweir NF_DATE_SYSTEM_SHORT, eCurLanguage ); 251cdf0e10cSrcweir sal_uLong nSysLongDateFmt = pFormatter->GetFormatIndex( 252cdf0e10cSrcweir NF_DATE_SYSTEM_LONG, eCurLanguage ); 253cdf0e10cSrcweir 254cdf0e10cSrcweir for( long nIndex = eOffsetStart; nIndex <= eOffsetEnd; ++nIndex ) 255cdf0e10cSrcweir { 256cdf0e10cSrcweir nFormat = pFormatter->GetFormatIndex( 257cdf0e10cSrcweir (NfIndexTableOffset)nIndex, eCurLanguage ); 258cdf0e10cSrcweir pFmt = pFormatter->GetEntry( nFormat ); 259cdf0e10cSrcweir 260cdf0e10cSrcweir if( nFormat == pFormatter->GetFormatIndex( NF_NUMBER_STANDARD, 261cdf0e10cSrcweir eCurLanguage ) 262cdf0e10cSrcweir || ((SvNumberformat*)pFmt)->GetOutputString( fVal, sValue, &pCol ) 263cdf0e10cSrcweir || nFormatType == NUMBERFORMAT_UNDEFINED ) 264cdf0e10cSrcweir sValue = pFmt->GetFormatstring(); 265cdf0e10cSrcweir else if( nFormatType == NUMBERFORMAT_TEXT ) 266cdf0e10cSrcweir { 267cdf0e10cSrcweir String sTxt(C2S("\"ABC\"")); 268cdf0e10cSrcweir pFormatter->GetOutputString( sTxt, nFormat, sValue, &pCol); 269cdf0e10cSrcweir } 270cdf0e10cSrcweir 271cdf0e10cSrcweir if (nFormat != nSysNumFmt && 272cdf0e10cSrcweir nFormat != nSysShortDateFmt && 273cdf0e10cSrcweir nFormat != nSysLongDateFmt) 274cdf0e10cSrcweir { 275cdf0e10cSrcweir nPos = InsertEntry( sValue ); 276cdf0e10cSrcweir SetEntryData( nPos, (void*)nFormat ); 277cdf0e10cSrcweir 278cdf0e10cSrcweir if( nFormat == pFormatter->GetStandardFormat( 279cdf0e10cSrcweir nFormatType, eCurLanguage ) ) 280cdf0e10cSrcweir nStdEntry = i; 281cdf0e10cSrcweir ++i; 282cdf0e10cSrcweir } 283cdf0e10cSrcweir } 284cdf0e10cSrcweir 285cdf0e10cSrcweir if (!pOwnFormatter) 286cdf0e10cSrcweir { 287cdf0e10cSrcweir nPos = InsertEntry(SW_RESSTR( STR_DEFINE_NUMBERFORMAT )); 288cdf0e10cSrcweir SetEntryData( nPos, NULL ); 289cdf0e10cSrcweir } 290cdf0e10cSrcweir 291cdf0e10cSrcweir SelectEntryPos( nStdEntry ); 292cdf0e10cSrcweir 293cdf0e10cSrcweir nCurrFormatType = nFormatType; 294cdf0e10cSrcweir } 295cdf0e10cSrcweir } 296cdf0e10cSrcweir 297cdf0e10cSrcweir /*-------------------------------------------------------------------- 298cdf0e10cSrcweir Beschreibung: 299cdf0e10cSrcweir --------------------------------------------------------------------*/ 300cdf0e10cSrcweir 301cdf0e10cSrcweir void NumFormatListBox::SetDefFormat(const sal_uLong nDefFmt) 302cdf0e10cSrcweir { 303cdf0e10cSrcweir if (nDefFmt == ULONG_MAX) 304cdf0e10cSrcweir { 305cdf0e10cSrcweir nDefFormat = nDefFmt; 306cdf0e10cSrcweir return; 307cdf0e10cSrcweir } 308cdf0e10cSrcweir 309cdf0e10cSrcweir SvNumberFormatter* pFormatter; 310cdf0e10cSrcweir if (pOwnFormatter) 311cdf0e10cSrcweir pFormatter = pOwnFormatter; 312cdf0e10cSrcweir else 313cdf0e10cSrcweir { 314cdf0e10cSrcweir SwView *pView = GetView(); 315cdf0e10cSrcweir DBG_ASSERT(pView, "no view found"); 316cdf0e10cSrcweir if(!pView) 317cdf0e10cSrcweir return; 318cdf0e10cSrcweir SwWrtShell &rSh = pView->GetWrtShell(); 319cdf0e10cSrcweir pFormatter = rSh.GetNumberFormatter(); 320cdf0e10cSrcweir } 321cdf0e10cSrcweir 322cdf0e10cSrcweir short nType = pFormatter->GetType(nDefFmt); 323cdf0e10cSrcweir 324cdf0e10cSrcweir SetFormatType(nType); 325cdf0e10cSrcweir 326cdf0e10cSrcweir sal_uLong nFormat = pFormatter->GetFormatForLanguageIfBuiltIn(nDefFmt, eCurLanguage); 327cdf0e10cSrcweir 328cdf0e10cSrcweir for (sal_uInt16 i = 0; i < GetEntryCount(); i++) 329cdf0e10cSrcweir { 330cdf0e10cSrcweir if (nFormat == (sal_uLong)GetEntryData(i)) 331cdf0e10cSrcweir { 332cdf0e10cSrcweir SelectEntryPos(i); 333cdf0e10cSrcweir nStdEntry = i; 334cdf0e10cSrcweir nDefFormat = GetFormat(); 335cdf0e10cSrcweir return; 336cdf0e10cSrcweir } 337cdf0e10cSrcweir } 338cdf0e10cSrcweir 339cdf0e10cSrcweir // Kein Eintrag gefunden: 340cdf0e10cSrcweir double fValue = GetDefValue(nType); 341cdf0e10cSrcweir String sValue; 342cdf0e10cSrcweir Color* pCol = 0; 343cdf0e10cSrcweir 344cdf0e10cSrcweir if (nType == NUMBERFORMAT_TEXT) 345cdf0e10cSrcweir { 346cdf0e10cSrcweir String sTxt(C2S("\"ABC\"")); 347cdf0e10cSrcweir pFormatter->GetOutputString(sTxt, nDefFmt, sValue, &pCol); 348cdf0e10cSrcweir } 349cdf0e10cSrcweir else 350cdf0e10cSrcweir pFormatter->GetOutputString(fValue, nDefFmt, sValue, &pCol); 351cdf0e10cSrcweir 352cdf0e10cSrcweir sal_uInt16 nPos = 0; 353cdf0e10cSrcweir while ((sal_uLong)GetEntryData(nPos) == ULONG_MAX) 354cdf0e10cSrcweir nPos++; 355cdf0e10cSrcweir 356cdf0e10cSrcweir // 357cdf0e10cSrcweir sal_uLong nSysNumFmt = pFormatter->GetFormatIndex( NF_NUMBER_SYSTEM, eCurLanguage); 358cdf0e10cSrcweir sal_uLong nSysShortDateFmt = pFormatter->GetFormatIndex( NF_DATE_SYSTEM_SHORT, eCurLanguage); 359cdf0e10cSrcweir sal_uLong nSysLongDateFmt = pFormatter->GetFormatIndex( NF_DATE_SYSTEM_LONG, eCurLanguage); 360cdf0e10cSrcweir sal_Bool bSysLang = sal_False; 361cdf0e10cSrcweir if( eCurLanguage == GetAppLanguage() ) 362cdf0e10cSrcweir bSysLang = sal_True; 363cdf0e10cSrcweir sal_uLong nNumFormatForLanguage = pFormatter->GetFormatForLanguageIfBuiltIn(nSysNumFmt, LANGUAGE_SYSTEM ); 364cdf0e10cSrcweir sal_uLong nShortDateFormatForLanguage = pFormatter->GetFormatForLanguageIfBuiltIn(nSysShortDateFmt, LANGUAGE_SYSTEM ); 365cdf0e10cSrcweir sal_uLong nLongDateFormatForLanguage = pFormatter->GetFormatForLanguageIfBuiltIn(nSysLongDateFmt, LANGUAGE_SYSTEM ); 366cdf0e10cSrcweir 367cdf0e10cSrcweir if ( 368cdf0e10cSrcweir nDefFmt == nSysNumFmt || 369cdf0e10cSrcweir nDefFmt == nSysShortDateFmt || 370cdf0e10cSrcweir nDefFmt == nSysLongDateFmt || 371cdf0e10cSrcweir ( 372cdf0e10cSrcweir bSysLang && 373cdf0e10cSrcweir ( 374cdf0e10cSrcweir nDefFmt == nNumFormatForLanguage || 375cdf0e10cSrcweir nDefFmt == nShortDateFormatForLanguage || 376cdf0e10cSrcweir nDefFmt == nLongDateFormatForLanguage 377cdf0e10cSrcweir ) 378cdf0e10cSrcweir ) 379cdf0e10cSrcweir ) 380cdf0e10cSrcweir { 381cdf0e10cSrcweir sValue += String(SW_RES(RID_STR_SYSTEM)); 382cdf0e10cSrcweir } 383cdf0e10cSrcweir 384cdf0e10cSrcweir nPos = InsertEntry(sValue, nPos); // Als ersten numerischen Eintrag einfuegen 385cdf0e10cSrcweir SetEntryData(nPos, (void*)nDefFmt); 386cdf0e10cSrcweir SelectEntryPos(nPos); 387cdf0e10cSrcweir nDefFormat = GetFormat(); 388cdf0e10cSrcweir } 389cdf0e10cSrcweir 390cdf0e10cSrcweir /*-------------------------------------------------------------------- 391cdf0e10cSrcweir Beschreibung: 392cdf0e10cSrcweir --------------------------------------------------------------------*/ 393cdf0e10cSrcweir 394cdf0e10cSrcweir sal_uLong NumFormatListBox::GetFormat() const 395cdf0e10cSrcweir { 396cdf0e10cSrcweir sal_uInt16 nPos = GetSelectEntryPos(); 397cdf0e10cSrcweir 398cdf0e10cSrcweir return (sal_uLong)GetEntryData(nPos); 399cdf0e10cSrcweir } 400cdf0e10cSrcweir 401cdf0e10cSrcweir /*-------------------------------------------------------------------- 402cdf0e10cSrcweir Beschreibung: 403cdf0e10cSrcweir --------------------------------------------------------------------*/ 404cdf0e10cSrcweir 405cdf0e10cSrcweir IMPL_LINK( NumFormatListBox, SelectHdl, ListBox *, pBox ) 406cdf0e10cSrcweir { 407cdf0e10cSrcweir sal_uInt16 nPos = pBox->GetSelectEntryPos(); 408cdf0e10cSrcweir String sDefine(SW_RES( STR_DEFINE_NUMBERFORMAT )); 409cdf0e10cSrcweir SwView *pView = GetView(); 410cdf0e10cSrcweir 411cdf0e10cSrcweir if( pView && nPos == pBox->GetEntryCount() - 1 && 412cdf0e10cSrcweir pBox->GetEntry( nPos ) == sDefine ) 413cdf0e10cSrcweir { 414cdf0e10cSrcweir SwWrtShell &rSh = pView->GetWrtShell(); 415cdf0e10cSrcweir SvNumberFormatter* pFormatter = rSh.GetNumberFormatter(); 416cdf0e10cSrcweir 417cdf0e10cSrcweir SfxItemSet aCoreSet( rSh.GetAttrPool(), 418cdf0e10cSrcweir SID_ATTR_NUMBERFORMAT_VALUE, SID_ATTR_NUMBERFORMAT_VALUE, 419cdf0e10cSrcweir SID_ATTR_NUMBERFORMAT_INFO, SID_ATTR_NUMBERFORMAT_INFO, 420cdf0e10cSrcweir SID_ATTR_NUMBERFORMAT_ONE_AREA, SID_ATTR_NUMBERFORMAT_ONE_AREA, 421cdf0e10cSrcweir SID_ATTR_NUMBERFORMAT_NOLANGUAGE, SID_ATTR_NUMBERFORMAT_NOLANGUAGE, 422cdf0e10cSrcweir SID_ATTR_NUMBERFORMAT_ADD_AUTO, SID_ATTR_NUMBERFORMAT_ADD_AUTO, 423cdf0e10cSrcweir 0 ); 424cdf0e10cSrcweir 425cdf0e10cSrcweir double fValue = GetDefValue( nCurrFormatType); 426cdf0e10cSrcweir 427cdf0e10cSrcweir sal_uLong nFormat = pFormatter->GetStandardFormat( nCurrFormatType, eCurLanguage); 428cdf0e10cSrcweir aCoreSet.Put( SfxUInt32Item( SID_ATTR_NUMBERFORMAT_VALUE, nFormat )); 429cdf0e10cSrcweir 430cdf0e10cSrcweir aCoreSet.Put( SvxNumberInfoItem( pFormatter, fValue, 431cdf0e10cSrcweir SID_ATTR_NUMBERFORMAT_INFO ) ); 432cdf0e10cSrcweir 433cdf0e10cSrcweir if( (NUMBERFORMAT_DATE | NUMBERFORMAT_TIME) & nCurrFormatType ) 434cdf0e10cSrcweir aCoreSet.Put(SfxBoolItem(SID_ATTR_NUMBERFORMAT_ONE_AREA, bOneArea)); 435cdf0e10cSrcweir 436cdf0e10cSrcweir aCoreSet.Put(SfxBoolItem(SID_ATTR_NUMBERFORMAT_NOLANGUAGE, !bShowLanguageControl)); 437cdf0e10cSrcweir aCoreSet.Put(SfxBoolItem(SID_ATTR_NUMBERFORMAT_ADD_AUTO, bUseAutomaticLanguage)); 438cdf0e10cSrcweir 439cdf0e10cSrcweir SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create(); 440cdf0e10cSrcweir DBG_ASSERT(pFact, "SwAbstractDialogFactory fail!"); 441cdf0e10cSrcweir 442cdf0e10cSrcweir SfxAbstractDialog* pDlg = pFact->CreateSfxDialog( this, aCoreSet, 443cdf0e10cSrcweir GetView()->GetViewFrame()->GetFrame().GetFrameInterface(), 444cdf0e10cSrcweir RC_DLG_SWNUMFMTDLG ); 445cdf0e10cSrcweir DBG_ASSERT(pDlg, "Dialogdiet fail!"); 446cdf0e10cSrcweir 447cdf0e10cSrcweir if (RET_OK == pDlg->Execute()) 448cdf0e10cSrcweir { 449cdf0e10cSrcweir const SfxPoolItem* pItem = pView->GetDocShell()-> 450cdf0e10cSrcweir GetItem( SID_ATTR_NUMBERFORMAT_INFO ); 451cdf0e10cSrcweir 452cdf0e10cSrcweir if( pItem && 0 != ((SvxNumberInfoItem*)pItem)->GetDelCount() ) 453cdf0e10cSrcweir { 454cdf0e10cSrcweir const sal_uInt32* pDelArr = ((SvxNumberInfoItem*)pItem)->GetDelArray(); 455cdf0e10cSrcweir 456cdf0e10cSrcweir for ( sal_uInt16 i = 0; i < ((SvxNumberInfoItem*)pItem)->GetDelCount(); i++ ) 457cdf0e10cSrcweir pFormatter->DeleteEntry( pDelArr[i] ); 458cdf0e10cSrcweir } 459cdf0e10cSrcweir 460cdf0e10cSrcweir const SfxItemSet* pOutSet = pDlg->GetOutputItemSet(); 461cdf0e10cSrcweir if( SFX_ITEM_SET == pOutSet->GetItemState( 462cdf0e10cSrcweir SID_ATTR_NUMBERFORMAT_VALUE, sal_False, &pItem )) 463cdf0e10cSrcweir { 464cdf0e10cSrcweir sal_uInt32 nNumberFormat = ((SfxUInt32Item*)pItem)->GetValue(); 465cdf0e10cSrcweir // oj #105473# change order of calls 466cdf0e10cSrcweir const SvNumberformat* pFmt = pFormatter->GetEntry(nNumberFormat); 467cdf0e10cSrcweir if( pFmt ) 468cdf0e10cSrcweir eCurLanguage = pFmt->GetLanguage(); 469cdf0e10cSrcweir // SetDefFormat uses eCurLanguage to look for if this format already in the list 470cdf0e10cSrcweir SetDefFormat(nNumberFormat); 471cdf0e10cSrcweir } 472cdf0e10cSrcweir if( bShowLanguageControl && SFX_ITEM_SET == pOutSet->GetItemState( 473cdf0e10cSrcweir SID_ATTR_NUMBERFORMAT_ADD_AUTO, sal_False, &pItem )) 474cdf0e10cSrcweir { 475cdf0e10cSrcweir bUseAutomaticLanguage = ((const SfxBoolItem*)pItem)->GetValue(); 476cdf0e10cSrcweir } 477cdf0e10cSrcweir } 478cdf0e10cSrcweir else 479cdf0e10cSrcweir SetDefFormat(nFormat); 480cdf0e10cSrcweir 481cdf0e10cSrcweir delete pDlg; 482cdf0e10cSrcweir } 483cdf0e10cSrcweir return 0; 484cdf0e10cSrcweir } 485cdf0e10cSrcweir 486cdf0e10cSrcweir /*-------------------------------------------------------------------- 487cdf0e10cSrcweir Beschreibung: 488cdf0e10cSrcweir --------------------------------------------------------------------*/ 489cdf0e10cSrcweir 490cdf0e10cSrcweir double NumFormatListBox::GetDefValue(const short nFormatType) const 491cdf0e10cSrcweir { 492cdf0e10cSrcweir double fDefValue = 0.0; 493cdf0e10cSrcweir 494cdf0e10cSrcweir switch (nFormatType) 495cdf0e10cSrcweir { 496cdf0e10cSrcweir case NUMBERFORMAT_DATE: 497cdf0e10cSrcweir case NUMBERFORMAT_DATE|NUMBERFORMAT_TIME: 498cdf0e10cSrcweir fDefValue = SVX_NUMVAL_DATE; 499cdf0e10cSrcweir break; 500cdf0e10cSrcweir 501cdf0e10cSrcweir case NUMBERFORMAT_TIME: 502cdf0e10cSrcweir fDefValue = SVX_NUMVAL_TIME; 503cdf0e10cSrcweir break; 504cdf0e10cSrcweir /* { 505cdf0e10cSrcweir String sValue("31.8.1997 16:57:34"); 506cdf0e10cSrcweir sal_uLong nFormat = pFormatter->GetStandardFormat(nFormatType, LANGUAGE_GERMAN); 507cdf0e10cSrcweir pFormatter->IsNumberFormat( sValue, nFormat, fDefValue ); 508cdf0e10cSrcweir } 509cdf0e10cSrcweir break;*/ 510cdf0e10cSrcweir 511cdf0e10cSrcweir case NUMBERFORMAT_TEXT: 512cdf0e10cSrcweir case NUMBERFORMAT_UNDEFINED: 513cdf0e10cSrcweir fDefValue = 0; 514cdf0e10cSrcweir break; 515cdf0e10cSrcweir 516cdf0e10cSrcweir case NUMBERFORMAT_CURRENCY: 517cdf0e10cSrcweir fDefValue = SVX_NUMVAL_CURRENCY; 518cdf0e10cSrcweir break; 519cdf0e10cSrcweir 520cdf0e10cSrcweir case NUMBERFORMAT_PERCENT: 521cdf0e10cSrcweir fDefValue = SVX_NUMVAL_PERCENT; 522cdf0e10cSrcweir break; 523cdf0e10cSrcweir 524cdf0e10cSrcweir case NUMBERFORMAT_LOGICAL: 525cdf0e10cSrcweir fDefValue = SVX_NUMVAL_BOOLEAN; 526cdf0e10cSrcweir break; 527cdf0e10cSrcweir 528cdf0e10cSrcweir default: 529cdf0e10cSrcweir fDefValue = SVX_NUMVAL_STANDARD; 530cdf0e10cSrcweir break; 531cdf0e10cSrcweir } 532cdf0e10cSrcweir 533cdf0e10cSrcweir return fDefValue; 534cdf0e10cSrcweir } 535cdf0e10cSrcweir 536cdf0e10cSrcweir /*-------------------------------------------------------------------- 537cdf0e10cSrcweir Beschreibung: 538cdf0e10cSrcweir --------------------------------------------------------------------*/ 539cdf0e10cSrcweir 540cdf0e10cSrcweir void NumFormatListBox::Clear() 541cdf0e10cSrcweir { 542cdf0e10cSrcweir ListBox::Clear(); 543cdf0e10cSrcweir nCurrFormatType = -1; 544cdf0e10cSrcweir } 545cdf0e10cSrcweir 546