/**************************************************************
 * 
 * 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_sc.hxx"

#undef SC_DLLIMPLEMENTATION



//------------------------------------------------------------------

#include <svx/dlgutil.hxx>
#include <svx/drawitem.hxx>
#include <svx/xtable.hxx>

#include "appoptio.hxx"
#include "scmod.hxx"
#include "scitems.hxx"
#include "tpview.hxx"
#include "global.hxx"
#include "viewopti.hxx"
#include "tabvwsh.hxx"
#include "uiitems.hxx"
#include "scresid.hxx"
#include "docsh.hxx"
#include "sc.hrc"       // -> Slot-IDs
#include "optdlg.hrc"
#include "globstr.hrc"

#include "opredlin.hxx"
#include "opredlin.hrc"

//------------------------------------------------------------------

ScRedlineOptionsTabPage::ScRedlineOptionsTabPage( Window* pParent,
													const SfxItemSet& rSet )
	: SfxTabPage(pParent, ScResId(RID_SCPAGE_OPREDLINE), rSet),
	aContentFT      ( this, ScResId(FT_CONTENT	)),
	aContentColorLB ( this, ScResId(CLB_CONTENT	)),
	aRemoveFT       ( this, ScResId(FT_REMOVE	)),
	aRemoveColorLB	( this, ScResId(CLB_REMOVE	)),
	aInsertFT       ( this, ScResId(FT_INSERT	)),
	aInsertColorLB  ( this, ScResId(CLB_INSERT	)),
	aMoveFT         ( this, ScResId(FT_MOVE		)),
	aMoveColorLB    ( this, ScResId(CLB_MOVE	)),
	aChangedGB		( this, ScResId(GB_COLORCHGS)),
	aAuthorStr		(ScResId(STR_AUTHOR))
{
	FreeResource();

	Link aLk = LINK(this, ScRedlineOptionsTabPage, ColorHdl);
	aContentColorLB.SetSelectHdl( aLk );
	aMoveColorLB.SetSelectHdl( aLk );
	aInsertColorLB.SetSelectHdl( aLk );
	aRemoveColorLB.SetSelectHdl( aLk );
}

/*-----------------------------------------------------------------------
	Beschreibung:
 -----------------------------------------------------------------------*/

__EXPORT ScRedlineOptionsTabPage::~ScRedlineOptionsTabPage()
{
}

/*-----------------------------------------------------------------------
	Beschreibung:
 -----------------------------------------------------------------------*/

SfxTabPage*	__EXPORT ScRedlineOptionsTabPage::Create( Window* pParent, const SfxItemSet& rSet )
{
	return new ScRedlineOptionsTabPage( pParent, rSet );
}

/*-----------------------------------------------------------------------
	Beschreibung:
 -----------------------------------------------------------------------*/

sal_Bool __EXPORT ScRedlineOptionsTabPage::FillItemSet( SfxItemSet& /* rSet */ )
{
	ScAppOptions aAppOptions=SC_MOD()->GetAppOptions();

	sal_uLong nNew=0;
	sal_uInt16 nPos=0;

	nPos = aContentColorLB.GetSelectEntryPos();
	if (nPos != LISTBOX_ENTRY_NOTFOUND)
	{
		nPos = aContentColorLB.GetSelectEntryPos();
		if (nPos!=0)
			nNew= aContentColorLB.GetEntryColor(nPos).GetColor();
		else
			nNew= COL_TRANSPARENT;

		aAppOptions.SetTrackContentColor(nNew);

	}
	nPos = aMoveColorLB.GetSelectEntryPos();
	if (nPos != LISTBOX_ENTRY_NOTFOUND)
	{
		nPos = aMoveColorLB.GetSelectEntryPos();
		if (nPos!=0)
			nNew= aMoveColorLB.GetEntryColor(nPos).GetColor();
		else
			nNew= COL_TRANSPARENT;

		aAppOptions.SetTrackMoveColor(nNew);

	}
	nPos = aInsertColorLB.GetSelectEntryPos();
	if (nPos != LISTBOX_ENTRY_NOTFOUND)
	{
		nPos = aInsertColorLB.GetSelectEntryPos();
		if (nPos!=0)
			nNew= aInsertColorLB.GetEntryColor(nPos).GetColor();
		else
			nNew= COL_TRANSPARENT;

		aAppOptions.SetTrackInsertColor(nNew);

	}
	nPos = aRemoveColorLB.GetSelectEntryPos();
	if (nPos != LISTBOX_ENTRY_NOTFOUND)
	{
		nPos = aRemoveColorLB.GetSelectEntryPos();
		if (nPos!=0)
			nNew= aRemoveColorLB.GetEntryColor(nPos).GetColor();
		else
			nNew= COL_TRANSPARENT;

		aAppOptions.SetTrackDeleteColor(nNew);

	}

	SC_MOD()->SetAppOptions(aAppOptions);

	//	Repaint (wenn alles ueber Items laufen wuerde, wie es sich gehoert,
	//	waere das nicht noetig...)
	ScDocShell* pDocSh = PTR_CAST(ScDocShell, SfxObjectShell::Current());
	if (pDocSh)
		pDocSh->PostPaintGridAll();

	return sal_False;
}

/*-----------------------------------------------------------------------
	Beschreibung:
 -----------------------------------------------------------------------*/

void __EXPORT ScRedlineOptionsTabPage::Reset( const SfxItemSet& /* rSet */ )
{

	XColorListSharedPtr aColorTbl = XColorList::GetStdColorList();
	aContentColorLB.InsertEntry(aAuthorStr);
	aMoveColorLB.InsertEntry(aAuthorStr);
	aInsertColorLB.InsertEntry(aAuthorStr);
	aRemoveColorLB.InsertEntry(aAuthorStr);

	aContentColorLB.SetUpdateMode( sal_False);
	aMoveColorLB.SetUpdateMode( sal_False);
	aInsertColorLB.SetUpdateMode( sal_False);
	aRemoveColorLB.SetUpdateMode( sal_False);

	for( sal_uInt16 i = 0; i < aColorTbl->Count(); ++i )
	{
		XColorEntry* pEntry = aColorTbl->GetColor( i );
		Color aColor = pEntry->GetColor();
		String sName = pEntry->GetName();

		aContentColorLB.InsertEntry( aColor, sName );
		aMoveColorLB.InsertEntry( aColor, sName );
		aInsertColorLB.InsertEntry( aColor, sName );
		aRemoveColorLB.InsertEntry( aColor, sName );
	}
	aContentColorLB.SetUpdateMode( sal_True );
	aMoveColorLB.SetUpdateMode( sal_True );
	aInsertColorLB.SetUpdateMode( sal_True );
	aRemoveColorLB.SetUpdateMode( sal_True );


	ScAppOptions aAppOptions=SC_MOD()->GetAppOptions();

	sal_uLong nColor = aAppOptions.GetTrackContentColor();
	if (nColor == COL_TRANSPARENT)
		aContentColorLB.SelectEntryPos(0);
	else
		aContentColorLB.SelectEntry(Color(nColor));

	nColor = aAppOptions.GetTrackMoveColor();
	if (nColor == COL_TRANSPARENT)
		aMoveColorLB.SelectEntryPos(0);
	else
		aMoveColorLB.SelectEntry(Color(nColor));


	nColor = aAppOptions.GetTrackInsertColor();
	if (nColor == COL_TRANSPARENT)
		aInsertColorLB.SelectEntryPos(0);
	else
		aInsertColorLB.SelectEntry(Color(nColor));


	nColor = aAppOptions.GetTrackDeleteColor();
	if (nColor == COL_TRANSPARENT)
		aRemoveColorLB.SelectEntryPos(0);
	else
		aRemoveColorLB.SelectEntry(Color(nColor));

}


IMPL_LINK( ScRedlineOptionsTabPage, ColorHdl, ColorListBox *, EMPTYARG )
{
/*
	SvxFontPrevWindow *pPrev;
	ListBox *pLB;

	if (pColorLB == &aInsertColorLB)
	{
		pPrev = &aInsertPreviewWN;
		pLB = &aInsertLB;
	}
	else
	{
		pPrev = &aDeletedPreviewWN;
		pLB = &aDeletedLB;
	}

	SvxFont& rFont = pPrev->GetFont();
	sal_uInt16 nPos = pLB->GetSelectEntryPos();
	if (nPos == LISTBOX_ENTRY_NOTFOUND)
		nPos = 0;

	CharAttr *pAttr = (CharAttr *)pLB->GetEntryData(nPos);

	if (pAttr->nItemId == SID_ATTR_BRUSH)
	{
		rFont.SetColor(Color(COL_BLACK));
		nPos = pColorLB->GetSelectEntryPos();
		if (nPos && nPos != LISTBOX_ENTRY_NOTFOUND)
		{
			Brush aBrush(Color(pColorLB->GetSelectEntryColor()));
			pPrev->SetBrush(aBrush);
		}
		else
		{
			Brush aBrush(Color(COL_LIGHTGRAY));
			pPrev->SetBrush(aBrush);
		}
	}
	else
	{
		nPos = pColorLB->GetSelectEntryPos();
		if (nPos && nPos != LISTBOX_ENTRY_NOTFOUND)
			rFont.SetColor(pColorLB->GetEntryColor(nPos));
		else
			rFont.SetColor(Color(COL_RED));
	}

	pPrev->Invalidate();
*/
	return 0;
}

