/**************************************************************
 * 
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * 
 *************************************************************/



// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_cui.hxx"

// include ---------------------------------------------------------------

#include <svtools/langtab.hxx>
#include <svtools/htmlcfg.hxx>
#include "opthtml.hxx"
#include "opthtml.hrc"
#include <cuires.hrc>
#include "helpid.hrc"
#include <dialmgr.hxx>

// Umwandlung der Modi zu den Positionen in der Listbox
const sal_uInt16 aPosToExportArr[] =
{
	HTML_CFG_HTML32,
	HTML_CFG_MSIE_40,
	HTML_CFG_NS40,
	HTML_CFG_WRITER
};

//#define DEPRECATED_ENTRY	0xFFFF

const sal_uInt16 aExportToPosArr[] =
{
	0,	//HTML 3.2
	1,	//MS Internet Explorer 4.0
    3,	//StarWriter
    2	//Netscape Navigator 4.0
};
// -----------------------------------------------------------------------

OfaHtmlTabPage::OfaHtmlTabPage(Window* pParent, const SfxItemSet& rSet) :
		SfxTabPage( pParent, CUI_RES( RID_OFAPAGE_HTMLOPT ), rSet ),
	aFontSizeGB		( this, CUI_RES( GB_FONTSIZE	   ) ),
	aSize1FT        ( this, CUI_RES( FT_SIZE1	       ) ),
	aSize1NF        ( this, CUI_RES( NF_SIZE1	       ) ),
	aSize2FT        ( this, CUI_RES( FT_SIZE2	       ) ),
	aSize2NF        ( this, CUI_RES( NF_SIZE2	       ) ),
	aSize3FT        ( this, CUI_RES( FT_SIZE3	       ) ),
	aSize3NF        ( this, CUI_RES( NF_SIZE3	       ) ),
	aSize4FT        ( this, CUI_RES( FT_SIZE4	       ) ),
	aSize4NF        ( this, CUI_RES( NF_SIZE4	       ) ),
	aSize5FT        ( this, CUI_RES( FT_SIZE5	       ) ),
	aSize5NF        ( this, CUI_RES( NF_SIZE5	       ) ),
	aSize6FT        ( this, CUI_RES( FT_SIZE6	       ) ),
	aSize6NF        ( this, CUI_RES( NF_SIZE6	       ) ),
	aSize7FT        ( this, CUI_RES( FT_SIZE7	       ) ),
	aSize7NF        ( this, CUI_RES( NF_SIZE7	       ) ),
	aImportGB       ( this, CUI_RES( GB_IMPORT	   ) ),
	aNumbersEnglishUSCB	( this, CUI_RES( CB_NUMBERS_ENGLISH_US ) ),
	aUnknownTagCB	( this, CUI_RES( CB_UNKNOWN_TAGS ) ),
	aIgnoreFontNamesCB( this, CUI_RES( CB_IGNORE_FONTNAMES ) ),
	aExportGB		( this, CUI_RES( GB_EXPORT       ) ),
	aExportLB       ( this, CUI_RES( LB_EXPORT       ) ),
    aStarBasicCB    ( this, CUI_RES( CB_STARBASIC    ) ),
	aStarBasicWarningCB(this, CUI_RES( CB_STARBASIC_WARNING    ) ),
    aPrintExtensionCB( this,CUI_RES(CB_PRINT_EXTENSION )),
    aSaveGrfLocalCB ( this, CUI_RES( CB_LOCAL_GRF    ) ),
	aCharSetFT		( this, CUI_RES( FT_CHARSET      ) ),
	aCharSetLB		( this, CUI_RES( LB_CHARSET      ) )

{
	FreeResource();

    // replace placeholder with UI string from language list
    String aText( aNumbersEnglishUSCB.GetText());
    String aPlaceholder( RTL_CONSTASCII_USTRINGPARAM( "%ENGLISHUSLOCALE"));
    xub_StrLen nPos;
    if ((nPos = aText.Search( aPlaceholder)) != STRING_NOTFOUND)
    {
        SvtLanguageTable aLangTab;
        const String& rStr = aLangTab.GetString( LANGUAGE_ENGLISH_US);
        if (rStr.Len())
        {
            aText.Replace( nPos, aPlaceholder.Len(), rStr);
            aNumbersEnglishUSCB.SetText( aText);
        }
    }

	aExportLB.SetSelectHdl(LINK(this, OfaHtmlTabPage, ExportHdl_Impl));
	aStarBasicCB.SetClickHdl(LINK(this, OfaHtmlTabPage, CheckBoxHdl_Impl));

	// initialize the characterset listbox
	aCharSetLB.FillWithMimeAndSelectBest();
}

/*-----------------02.09.96 13.47-------------------

--------------------------------------------------*/

OfaHtmlTabPage::~OfaHtmlTabPage()
{
}

/*-----------------02.09.96 13.47-------------------

--------------------------------------------------*/

SfxTabPage*	OfaHtmlTabPage::Create( Window* pParent,
								const SfxItemSet& rAttrSet )
{
	return new OfaHtmlTabPage(pParent, rAttrSet);
}

/*-----------------02.09.96 13.47-------------------

--------------------------------------------------*/

sal_Bool OfaHtmlTabPage::FillItemSet( SfxItemSet& )
{
	SvxHtmlOptions* pHtmlOpt = SvxHtmlOptions::Get();
	if(aSize1NF.GetSavedValue() != aSize1NF.GetText())
		pHtmlOpt->SetFontSize(0, (sal_uInt16)aSize1NF.GetValue());
	if(aSize2NF.GetSavedValue() != aSize2NF.GetText())
		pHtmlOpt->SetFontSize(1, (sal_uInt16)aSize2NF.GetValue());
	if(aSize3NF.GetSavedValue() != aSize3NF.GetText())
		pHtmlOpt->SetFontSize(2, (sal_uInt16)aSize3NF.GetValue());
	if(aSize4NF.GetSavedValue() != aSize4NF.GetText())
		pHtmlOpt->SetFontSize(3, (sal_uInt16)aSize4NF.GetValue());
	if(aSize5NF.GetSavedValue() != aSize5NF.GetText())
		pHtmlOpt->SetFontSize(4, (sal_uInt16)aSize5NF.GetValue());
	if(aSize6NF.GetSavedValue() != aSize6NF.GetText())
		pHtmlOpt->SetFontSize(5, (sal_uInt16)aSize6NF.GetValue());
	if(aSize7NF.GetSavedValue() != aSize7NF.GetText())
		pHtmlOpt->SetFontSize(6, (sal_uInt16)aSize7NF.GetValue());

	if(aNumbersEnglishUSCB.IsChecked() != aNumbersEnglishUSCB.GetSavedValue())
		pHtmlOpt->SetNumbersEnglishUS(aNumbersEnglishUSCB.IsChecked());

	if(aUnknownTagCB.IsChecked() != aUnknownTagCB.GetSavedValue())
		pHtmlOpt->SetImportUnknown(aUnknownTagCB.IsChecked());

	if(aIgnoreFontNamesCB.IsChecked() != aIgnoreFontNamesCB.GetSavedValue())
		pHtmlOpt->SetIgnoreFontFamily(aIgnoreFontNamesCB.IsChecked());

	if(aExportLB.GetSelectEntryPos() != aExportLB.GetSavedValue())
		pHtmlOpt->SetExportMode(aPosToExportArr[aExportLB.GetSelectEntryPos()]);

	if(aStarBasicCB.IsChecked() != aStarBasicCB.GetSavedValue())
		pHtmlOpt->SetStarBasic(aStarBasicCB.IsChecked());

	if(aStarBasicWarningCB.IsChecked() != aStarBasicWarningCB.GetSavedValue())
		pHtmlOpt->SetStarBasicWarning(aStarBasicWarningCB.IsChecked());

	if(aSaveGrfLocalCB.IsChecked() != aSaveGrfLocalCB.GetSavedValue())
		pHtmlOpt->SetSaveGraphicsLocal(aSaveGrfLocalCB.IsChecked());

	if(aPrintExtensionCB.IsChecked() != aPrintExtensionCB.GetSavedValue())
		pHtmlOpt->SetPrintLayoutExtension(aPrintExtensionCB.IsChecked());

	if( aCharSetLB.GetSelectTextEncoding() != pHtmlOpt->GetTextEncoding() )
		pHtmlOpt->SetTextEncoding( aCharSetLB.GetSelectTextEncoding() );

	return sal_False;
}

/*-----------------02.09.96 13.47-------------------

--------------------------------------------------*/

void OfaHtmlTabPage::Reset( const SfxItemSet& )
{
	SvxHtmlOptions* pHtmlOpt = SvxHtmlOptions::Get();
	aSize1NF.SetValue(pHtmlOpt->GetFontSize(0));
	aSize2NF.SetValue(pHtmlOpt->GetFontSize(1));
	aSize3NF.SetValue(pHtmlOpt->GetFontSize(2));
	aSize4NF.SetValue(pHtmlOpt->GetFontSize(3));
	aSize5NF.SetValue(pHtmlOpt->GetFontSize(4));
	aSize6NF.SetValue(pHtmlOpt->GetFontSize(5));
	aSize7NF.SetValue(pHtmlOpt->GetFontSize(6));
	aNumbersEnglishUSCB.Check(pHtmlOpt->IsNumbersEnglishUS());
	aUnknownTagCB.Check(pHtmlOpt->IsImportUnknown());
	aIgnoreFontNamesCB.Check(pHtmlOpt->IsIgnoreFontFamily());
	sal_uInt16 nExport = pHtmlOpt->GetExportMode();
	if( nExport >= ( sizeof( aExportToPosArr ) / sizeof( sal_uInt16 ) ) )
    {
        nExport = 3;    // default for bad config entry is NS 4.0
    }
	sal_uInt16 nPosArr = aExportToPosArr[ nExport ];
//	if( nPosArr == DEPRECATED_ENTRY )
//		nPosArr = aExportToPosArr[ 4 ];		// again: NS 4.0 is default
	aExportLB.SelectEntryPos( nPosArr );
	aExportLB.SaveValue();

	ExportHdl_Impl(&aExportLB);

	aStarBasicCB .Check(pHtmlOpt->IsStarBasic());
	aStarBasicWarningCB .Check(pHtmlOpt->IsStarBasicWarning());
	aStarBasicWarningCB.Enable(!aStarBasicCB.IsChecked());
	aSaveGrfLocalCB.Check(pHtmlOpt->IsSaveGraphicsLocal());
	aPrintExtensionCB.Check(pHtmlOpt->IsPrintLayoutExtension());

	aPrintExtensionCB.SaveValue();
	aStarBasicCB .SaveValue();
	aStarBasicWarningCB .SaveValue();
	aSaveGrfLocalCB.SaveValue();
	aSize1NF.SaveValue();
	aSize2NF.SaveValue();
	aSize3NF.SaveValue();
	aSize4NF.SaveValue();
	aSize5NF.SaveValue();
	aSize6NF.SaveValue();
	aSize7NF.SaveValue();
	aNumbersEnglishUSCB.SaveValue();
	aUnknownTagCB.SaveValue();
	aIgnoreFontNamesCB.SaveValue();

    if( !pHtmlOpt->IsDefaultTextEncoding() &&
        aCharSetLB.GetSelectTextEncoding() != pHtmlOpt->GetTextEncoding() )
		aCharSetLB.SelectTextEncoding( pHtmlOpt->GetTextEncoding() );
}

/*-----------------16.04.98 16:03-------------------

--------------------------------------------------*/
IMPL_LINK(OfaHtmlTabPage, ExportHdl_Impl, ListBox*, pBox)
{
	sal_uInt16 nExport = aPosToExportArr[ pBox->GetSelectEntryPos() ];
	switch( nExport )
	{
		case HTML_CFG_MSIE_40:
		case HTML_CFG_NS40  :
		case HTML_CFG_WRITER :
			aPrintExtensionCB.Enable(sal_True);
		break;
		default: aPrintExtensionCB.Enable(sal_False);
	}

	return 0;
}
/* -----------------05.02.99 09:17-------------------
 *
 * --------------------------------------------------*/
IMPL_LINK(OfaHtmlTabPage, CheckBoxHdl_Impl, CheckBox*, pBox)
{
	aStarBasicWarningCB.Enable(!pBox->IsChecked());
	return 0;
}


