diff options
Diffstat (limited to 'svtools/source/config/htmlcfg.cxx')
-rw-r--r-- | svtools/source/config/htmlcfg.cxx | 523 |
1 files changed, 523 insertions, 0 deletions
diff --git a/svtools/source/config/htmlcfg.cxx b/svtools/source/config/htmlcfg.cxx new file mode 100644 index 000000000000..b8a9660ee8dc --- /dev/null +++ b/svtools/source/config/htmlcfg.cxx @@ -0,0 +1,523 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_svtools.hxx" + +#include <svtools/htmlcfg.hxx> +#include <svtools/parhtml.hxx> +#include <unotools/syslocale.hxx> +#include <tools/debug.hxx> +#include <tools/list.hxx> +#include <tools/link.hxx> + +// ----------------------------------------------------------------------- +#define HTMLCFG_UNKNOWN_TAGS 0x01 +//#define HTMLCFG_STYLE_SHEETS 0x02 +//#define HTMLCFG_NETSCAPE3 0x04 +#define HTMLCFG_STAR_BASIC 0x08 +#define HTMLCFG_LOCAL_GRF 0x10 +#define HTMLCFG_PRINT_LAYOUT_EXTENSION 0x20 +#define HTMLCFG_IGNORE_FONT_FAMILY 0x40 +#define HTMLCFG_IS_BASIC_WARNING 0x80 +#define HTMLCFG_NUMBERS_ENGLISH_US 0x100 + +using namespace utl; +using namespace rtl; +using namespace com::sun::star::uno; + +static SvxHtmlOptions* pOptions = 0; + +DECLARE_LIST( LinkList, Link * ) + +#define C2U(cChar) OUString::createFromAscii(cChar) +/* -----------------------------23.11.00 11:39-------------------------------- + + ---------------------------------------------------------------------------*/ +struct HtmlOptions_Impl +{ + LinkList aList; + sal_Int32 nFlags; + sal_Int32 nExportMode; + sal_Int32 aFontSizeArr[HTML_FONT_COUNT]; + sal_Int32 eEncoding; + sal_Bool bIsEncodingDefault; + + HtmlOptions_Impl() : + nFlags(HTMLCFG_LOCAL_GRF|HTMLCFG_IS_BASIC_WARNING), + nExportMode(HTML_CFG_NS40), + eEncoding( gsl_getSystemTextEncoding() ), + bIsEncodingDefault(sal_True) + { + aFontSizeArr[0] = HTMLFONTSZ1_DFLT; + aFontSizeArr[1] = HTMLFONTSZ2_DFLT; + aFontSizeArr[2] = HTMLFONTSZ3_DFLT; + aFontSizeArr[3] = HTMLFONTSZ4_DFLT; + aFontSizeArr[4] = HTMLFONTSZ5_DFLT; + aFontSizeArr[5] = HTMLFONTSZ6_DFLT; + aFontSizeArr[6] = HTMLFONTSZ7_DFLT; + } +}; + +/* -----------------------------23.11.00 11:39-------------------------------- + + ---------------------------------------------------------------------------*/ +const Sequence<OUString>& SvxHtmlOptions::GetPropertyNames() +{ + static Sequence<OUString> aNames; + if(!aNames.getLength()) + { + static const char* aPropNames[] = + { + "Import/UnknownTag", // 0 + "Import/FontSetting", // 1 + "Import/FontSize/Size_1", // 2 + "Import/FontSize/Size_2", // 3 + "Import/FontSize/Size_3", // 4 + "Import/FontSize/Size_4", // 5 + "Import/FontSize/Size_5", // 6 + "Import/FontSize/Size_6", // 7 + "Import/FontSize/Size_7", // 8 + "Export/Browser", // 9 + "Export/Basic", // 0 + "Export/PrintLayout", // 11 + "Export/LocalGraphic", // 12 + "Export/Warning", // 13 + "Export/Encoding", // 14 + "Import/NumbersEnglishUS" // 15 + }; + const int nCount = sizeof(aPropNames) / sizeof(aPropNames[0]); + aNames.realloc(nCount); + OUString* pNames = aNames.getArray(); + for(int i = 0; i < nCount; i++) + pNames[i] = C2U(aPropNames[i]); + } + return aNames; +} +// ----------------------------------------------------------------------- +SvxHtmlOptions::SvxHtmlOptions() : + ConfigItem(C2U("Office.Common/Filter/HTML")) +{ + pImp = new HtmlOptions_Impl; + Load( GetPropertyNames() ); +} + +// ----------------------------------------------------------------------- +SvxHtmlOptions::~SvxHtmlOptions() +{ + delete pImp; +} + +void SvxHtmlOptions::Load( const Sequence< OUString >& aNames ) +{ + Sequence<Any> aValues = GetProperties(aNames); + const Any* pValues = aValues.getConstArray(); + DBG_ASSERT(aValues.getLength() == aNames.getLength(), "GetProperties failed"); + if(aValues.getLength() == aNames.getLength()) + { + pImp->nFlags = 0; + for(int nProp = 0; nProp < aNames.getLength(); nProp++) + { + if(pValues[nProp].hasValue()) + { + switch(nProp) + { + case 0: + if(*(sal_Bool*)pValues[nProp].getValue()) + pImp->nFlags |= HTMLCFG_UNKNOWN_TAGS; + break;//"Import/UnknownTag", + case 1: + if(*(sal_Bool*)pValues[nProp].getValue()) + pImp->nFlags |= HTMLCFG_IGNORE_FONT_FAMILY; + break;//"Import/FontSetting", + case 2: pValues[nProp] >>= pImp->aFontSizeArr[0]; break;//"Import/FontSize/Size_1", + case 3: pValues[nProp] >>= pImp->aFontSizeArr[1]; break;//"Import/FontSize/Size_2", + case 4: pValues[nProp] >>= pImp->aFontSizeArr[2]; break;//"Import/FontSize/Size_3", + case 5: pValues[nProp] >>= pImp->aFontSizeArr[3]; break;//"Import/FontSize/Size_4", + case 6: pValues[nProp] >>= pImp->aFontSizeArr[4]; break;//"Import/FontSize/Size_5", + case 7: pValues[nProp] >>= pImp->aFontSizeArr[5]; break;//"Import/FontSize/Size_6", + case 8: pValues[nProp] >>= pImp->aFontSizeArr[6]; break;//"Import/FontSize/Size_7", + case 9://"Export/Browser", + { + sal_Int32 nExpMode = 0; +// pValues[nProp] >>= pImp->nExportMode; + pValues[nProp] >>= nExpMode; + switch( nExpMode ) + { + case 0: nExpMode = HTML_CFG_HTML32; break; + case 1: nExpMode = HTML_CFG_MSIE_40; break; +// case 2: nExpMode = HTML_CFG_NS30; break; depricated + case 3: nExpMode = HTML_CFG_WRITER; break; + case 4: nExpMode = HTML_CFG_NS40; break; + case 5: nExpMode = HTML_CFG_MSIE_40_OLD;break; + default: nExpMode = HTML_CFG_NS40; break; + } + + pImp->nExportMode = nExpMode; + } + break; + case 10: + if(*(sal_Bool*)pValues[nProp].getValue()) + pImp->nFlags |= HTMLCFG_STAR_BASIC; + break;//"Export/Basic", + case 11: + if(*(sal_Bool*)pValues[nProp].getValue()) + pImp->nFlags |= HTMLCFG_PRINT_LAYOUT_EXTENSION; + break;//"Export/PrintLayout", + case 12: + if(*(sal_Bool*)pValues[nProp].getValue()) + pImp->nFlags |= HTMLCFG_LOCAL_GRF; + break;//"Export/LocalGraphic", + case 13: + if(*(sal_Bool*)pValues[nProp].getValue()) + pImp->nFlags |= HTMLCFG_IS_BASIC_WARNING; + break;//"Export/Warning" + + case 14: pValues[nProp] >>= pImp->eEncoding; + pImp->bIsEncodingDefault = sal_False; + break;//"Export/Encoding" + + case 15: + if(*(sal_Bool*)pValues[nProp].getValue()) + pImp->nFlags |= HTMLCFG_NUMBERS_ENGLISH_US; + break;//"Import/NumbersEnglishUS" + } + } + } + } +} + +// ----------------------------------------------------------------------- +void SvxHtmlOptions::Commit() +{ + const Sequence<OUString>& aNames = GetPropertyNames(); + +// const OUString* pNames = aNames.getConstArray(); + Sequence<Any> aValues(aNames.getLength()); + Any* pValues = aValues.getArray(); + +// const Type& rType = ::getBooleanCppuType(); + for(int nProp = 0; nProp < aNames.getLength(); nProp++) + { + sal_Bool bSet = sal_False; + switch(nProp) + { + case 0: bSet = 0 != (pImp->nFlags & HTMLCFG_UNKNOWN_TAGS);break;//"Import/UnknownTag", + case 1: bSet = 0 != (pImp->nFlags & HTMLCFG_IGNORE_FONT_FAMILY);break;//"Import/FontSetting", + case 2: pValues[nProp] <<= pImp->aFontSizeArr[0];break;//"Import/FontSize/Size_1", + case 3: pValues[nProp] <<= pImp->aFontSizeArr[1];break;//"Import/FontSize/Size_2", + case 4: pValues[nProp] <<= pImp->aFontSizeArr[2];break;//"Import/FontSize/Size_3", + case 5: pValues[nProp] <<= pImp->aFontSizeArr[3];break;//"Import/FontSize/Size_4", + case 6: pValues[nProp] <<= pImp->aFontSizeArr[4];break;//"Import/FontSize/Size_5", + case 7: pValues[nProp] <<= pImp->aFontSizeArr[5];break;//"Import/FontSize/Size_6", + case 8: pValues[nProp] <<= pImp->aFontSizeArr[6];break;//"Import/FontSize/Size_7", + case 9: //"Export/Browser", + { + sal_Int32 nExpMode = pImp->nExportMode; + + switch( nExpMode ) + { + case HTML_CFG_HTML32: nExpMode = 0; break; + case HTML_CFG_MSIE_40: nExpMode = 1; break; +// case HTML_CFG_NS30: nExpMode = 2; break; depricated + case HTML_CFG_WRITER: nExpMode = 3; break; + case HTML_CFG_NS40: nExpMode = 4; break; + case HTML_CFG_MSIE_40_OLD: nExpMode = 5; break; + default: nExpMode = 4; break; // NS40 + } + + pValues[nProp] <<= nExpMode; + break; + } + case 10: bSet = 0 != (pImp->nFlags & HTMLCFG_STAR_BASIC);break;//"Export/Basic", + case 11: bSet = 0 != (pImp->nFlags & HTMLCFG_PRINT_LAYOUT_EXTENSION);break;//"Export/PrintLayout", + case 12: bSet = 0 != (pImp->nFlags & HTMLCFG_LOCAL_GRF);break;//"Export/LocalGraphic", + case 13: bSet = 0 != (pImp->nFlags & HTMLCFG_IS_BASIC_WARNING);break;//"Export/Warning" + case 14: + if(!pImp->bIsEncodingDefault) + pValues[nProp] <<= pImp->eEncoding; + break;//"Export/Encoding", + case 15: bSet = 0 != (pImp->nFlags & HTMLCFG_NUMBERS_ENGLISH_US);break;//"Import/NumbersEnglishUS" + } + if(nProp < 2 || ( nProp > 9 && nProp < 14 ) || nProp == 15) + pValues[nProp].setValue(&bSet, ::getCppuBooleanType()); + } + PutProperties(aNames, aValues); +} + +void SvxHtmlOptions::AddListenerLink( const Link& rLink ) +{ + pImp->aList.Insert( new Link( rLink ) ); +} + +void SvxHtmlOptions::RemoveListenerLink( const Link& rLink ) +{ + for ( USHORT n=0; n<pImp->aList.Count(); n++ ) + { + if ( (*pImp->aList.GetObject(n) ) == rLink ) + { + delete pImp->aList.Remove(n); + break; + } + } +} + +void SvxHtmlOptions::CallListeners() +{ + for ( USHORT n = 0; n < pImp->aList.Count(); ++n ) + pImp->aList.GetObject(n)->Call( this ); +} + + +void SvxHtmlOptions::Notify( const com::sun::star::uno::Sequence< rtl::OUString >& ) +{ + Load( GetPropertyNames() ); + CallListeners(); +} + +// ----------------------------------------------------------------------- +USHORT SvxHtmlOptions::GetFontSize(USHORT nPos) const +{ + if(nPos < HTML_FONT_COUNT) + return (USHORT)pImp->aFontSizeArr[nPos]; + return 0; +} +// ----------------------------------------------------------------------- +void SvxHtmlOptions::SetFontSize(USHORT nPos, USHORT nSize) +{ + if(nPos < HTML_FONT_COUNT) + { + pImp->aFontSizeArr[nPos] = nSize; + SetModified(); + } +} + +// ----------------------------------------------------------------------- + +// ----------------------------------------------------------------------- + + +BOOL SvxHtmlOptions::IsImportUnknown() const +{ + return 0 != (pImp->nFlags & HTMLCFG_UNKNOWN_TAGS) ; +} + +// ----------------------------------------------------------------------- + + +void SvxHtmlOptions::SetImportUnknown(BOOL bSet) +{ + if(bSet) + pImp->nFlags |= HTMLCFG_UNKNOWN_TAGS; + else + pImp->nFlags &= ~HTMLCFG_UNKNOWN_TAGS; + SetModified(); +} + +// ----------------------------------------------------------------------- + + +USHORT SvxHtmlOptions::GetExportMode() const +{ + return (USHORT)pImp->nExportMode; +} + +// ----------------------------------------------------------------------- + + +void SvxHtmlOptions::SetExportMode(USHORT nSet) +{ + if(nSet <= HTML_CFG_MAX ) + { + pImp->nExportMode = nSet; + SetModified(); + CallListeners(); + } +} + +// ----------------------------------------------------------------------- + + +BOOL SvxHtmlOptions::IsStarBasic() const +{ + return 0 != (pImp->nFlags & HTMLCFG_STAR_BASIC) ; +} + +// ----------------------------------------------------------------------- + + +void SvxHtmlOptions::SetStarBasic(BOOL bSet) +{ + if(bSet) + pImp->nFlags |= HTMLCFG_STAR_BASIC; + else + pImp->nFlags &= ~HTMLCFG_STAR_BASIC; + SetModified(); +} + +/*-----------------14.02.97 08.34------------------- + +--------------------------------------------------*/ + +BOOL SvxHtmlOptions::IsSaveGraphicsLocal() const +{ + return 0 != (pImp->nFlags & HTMLCFG_LOCAL_GRF) ; +} +/*-----------------14.02.97 08.34------------------- + +--------------------------------------------------*/ +void SvxHtmlOptions::SetSaveGraphicsLocal(BOOL bSet) +{ + if(bSet) + pImp->nFlags |= HTMLCFG_LOCAL_GRF; + else + pImp->nFlags &= ~HTMLCFG_LOCAL_GRF; + SetModified(); +} + +/*-----------------10/21/97 08:34am----------------- + +--------------------------------------------------*/ + +BOOL SvxHtmlOptions::IsPrintLayoutExtension() const +{ + BOOL bRet = 0 != (pImp->nFlags & HTMLCFG_PRINT_LAYOUT_EXTENSION); + switch( pImp->nExportMode ) + { + case HTML_CFG_MSIE_40: + case HTML_CFG_NS40 : + case HTML_CFG_WRITER : + break; + default: + bRet = FALSE; + } + return bRet; +} +/*-----------------10/21/97 08:34am----------------- + +--------------------------------------------------*/ +void SvxHtmlOptions::SetPrintLayoutExtension(BOOL bSet) +{ + if(bSet) + pImp->nFlags |= HTMLCFG_PRINT_LAYOUT_EXTENSION; + else + pImp->nFlags &= ~HTMLCFG_PRINT_LAYOUT_EXTENSION; + SetModified(); +} + +/*-----------------10.07.98 10.02------------------- + +--------------------------------------------------*/ + +BOOL SvxHtmlOptions::IsIgnoreFontFamily() const +{ + return 0 != (pImp->nFlags & HTMLCFG_IGNORE_FONT_FAMILY) ; +} +/*-----------------10.07.98 10.02------------------- + +--------------------------------------------------*/ +void SvxHtmlOptions::SetIgnoreFontFamily(BOOL bSet) +{ + if(bSet) + pImp->nFlags |= HTMLCFG_IGNORE_FONT_FAMILY; + else + pImp->nFlags &= ~HTMLCFG_IGNORE_FONT_FAMILY; + SetModified(); +} +/* -----------------05.02.99 09:03------------------- + * + * --------------------------------------------------*/ +BOOL SvxHtmlOptions::IsStarBasicWarning() const +{ + return 0 != (pImp->nFlags & HTMLCFG_IS_BASIC_WARNING) ; +} +/* -----------------05.02.99 09:03------------------- + * + * --------------------------------------------------*/ +void SvxHtmlOptions::SetStarBasicWarning(BOOL bSet) +{ + if(bSet) + pImp->nFlags |= HTMLCFG_IS_BASIC_WARNING; + else + pImp->nFlags &= ~HTMLCFG_IS_BASIC_WARNING; + SetModified(); +} + +/*-----------------19.02.2001 18:40----------------- + * + * --------------------------------------------------*/ +rtl_TextEncoding SvxHtmlOptions::GetTextEncoding() const +{ + rtl_TextEncoding eRet; + if(pImp->bIsEncodingDefault) + eRet = SvtSysLocale::GetBestMimeEncoding(); + else + eRet = (rtl_TextEncoding)pImp->eEncoding; + return eRet; +} + +/*-----------------19.02.2001 18:40----------------- + * + * --------------------------------------------------*/ +void SvxHtmlOptions::SetTextEncoding( rtl_TextEncoding eEnc ) +{ + pImp->eEncoding = eEnc; + pImp->bIsEncodingDefault = sal_False; + SetModified(); +} +/* -----------------------------15.08.2001 12:01------------------------------ + + ---------------------------------------------------------------------------*/ +sal_Bool SvxHtmlOptions::IsDefaultTextEncoding() const +{ + return pImp->bIsEncodingDefault; +} + +SvxHtmlOptions* SvxHtmlOptions::Get() +{ + if ( !pOptions ) + pOptions = new SvxHtmlOptions; + return pOptions; +} + + +/* ---------------------- 2006-06-07T21:02+0200 ---------------------- */ +BOOL SvxHtmlOptions::IsNumbersEnglishUS() const +{ + return 0 != (pImp->nFlags & HTMLCFG_NUMBERS_ENGLISH_US) ; +} + + +/* ---------------------- 2006-06-07T21:02+0200 ---------------------- */ +void SvxHtmlOptions::SetNumbersEnglishUS(BOOL bSet) +{ + if(bSet) + pImp->nFlags |= HTMLCFG_NUMBERS_ENGLISH_US; + else + pImp->nFlags &= ~HTMLCFG_NUMBERS_ENGLISH_US; + SetModified(); +} |