/**************************************************************
 * 
 * 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"



// INCLUDE ---------------------------------------------------------------

#include <svl/intitem.hxx>
#include <svl/stritem.hxx>

#include "navcitem.hxx"
#include "global.hxx"
#include "navipi.hxx"
#include "sc.hrc"		// -> Item-IDs

// STATIC DATA -----------------------------------------------------------


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

ScNavigatorControllerItem::ScNavigatorControllerItem( sal_uInt16          nIdP,
													  ScNavigatorDlg& rDlg,
													  SfxBindings&	  rBindings )
    :   SfxControllerItem   ( nIdP, rBindings ),
		rNavigatorDlg		( rDlg )
{
}

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

void __EXPORT ScNavigatorControllerItem::StateChanged( sal_uInt16 /* nSID */, SfxItemState /* eState */,
														  const SfxPoolItem* pItem )
{
	switch( GetId() )
	{
		case SID_CURRENTCELL:
			if ( pItem )
			{
//				const SfxPointItem* pCellPosItem = PTR_CAST(SfxPointItem, pItem);
				const SfxStringItem* pCellPosItem = PTR_CAST(SfxStringItem, pItem);

				DBG_ASSERT( pCellPosItem, "SfxStringItem expected!" );

				if ( pCellPosItem )
				{
					String	aAddress( pCellPosItem->GetValue() );
					ScAddress aScAddress;
					aScAddress.Parse( aAddress );

					SCCOL nCol = aScAddress.Col()+1;
					SCROW nRow = aScAddress.Row()+1;

//					SCCOL nCol = (sal_uInt16)pCellPosItem->GetValue().X()+1;
//					SCROW nRow = (sal_uInt16)pCellPosItem->GetValue().Y()+1;

					rNavigatorDlg.UpdateColumn( &nCol );
					rNavigatorDlg.UpdateRow   ( &nRow );
					rNavigatorDlg.CursorPosChanged();
				}
			}
			break;

		case SID_CURRENTTAB:
			if ( pItem )
			{
				const SfxUInt16Item* pTabItem = PTR_CAST(SfxUInt16Item, pItem);

				DBG_ASSERT( pTabItem, "SfxUInt16Item expected!" );

				//	Tabelle fuer Basic ist 1-basiert
				if ( pTabItem && pTabItem->GetValue() )
				{
					SCTAB nTab = pTabItem->GetValue() - 1;

					rNavigatorDlg.UpdateTable( &nTab );
					rNavigatorDlg.UpdateColumn();
					rNavigatorDlg.UpdateRow();
					rNavigatorDlg.CursorPosChanged();
				}
			}
			break;

		case SID_CURRENTDOC:
			//
			//	gar nix mehr, wird ueber SFX_HINT_DOCCHANGED erledigt
			//
			break;


		case SID_SELECT_SCENARIO:
			rNavigatorDlg.aWndScenarios.NotifyState( pItem );
			break;

		default:
			break;
	}
}