/**************************************************************
 * 
 * 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_sw.hxx"
#ifdef SW_DLLIMPLEMENTATION
#undef SW_DLLIMPLEMENTATION
#endif


#include <stdio.h>
#include <ctype.h>
#include <swwait.hxx>
#include <wrtsh.hxx>
#ifndef _VIEW_HXX
#include <view.hxx>
#endif
#include <swmodule.hxx>
#ifndef _GLOBALS_HRC
#include <globals.hrc>
#endif
#ifndef _DOCSH_HXX
#include <docsh.hxx>
#endif
#ifndef _PVIEW_HXX
#include <pview.hxx>
#endif
#include <doc.hxx>
#include <docstdlg.hxx>
#ifndef _MODCFG_HXX
#include <modcfg.hxx>
#endif

// fuer Statistikfelder
#include <fldmgr.hxx>
#include <fldbas.hxx>

#ifndef _DOCSTDLG_HRC
#include <docstdlg.hrc>
#endif


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


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

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


SwDocStatPage::SwDocStatPage(Window *pParent, const SfxItemSet &rSet) :

	SfxTabPage	(pParent, SW_RES(TP_DOC_STAT), rSet),
    aPageLbl	(this, SW_RES( FT_PAGE		 )),
	aPageNo		(this, SW_RES( FT_PAGE_COUNT )),
    aTableLbl	(this, SW_RES( FT_TABLE		 )),
    aTableNo    (this, SW_RES( FT_TABLE_COUNT)),
    aGrfLbl		(this, SW_RES( FT_GRF		 )),
	aGrfNo		(this, SW_RES( FT_GRF_COUNT  )),
    aOLELbl		(this, SW_RES( FT_OLE		 )),
	aOLENo		(this, SW_RES( FT_OLE_COUNT  )),
    aParaLbl	(this, SW_RES( FT_PARA		 )),
	aParaNo		(this, SW_RES( FT_PARA_COUNT )),
    aWordLbl	(this, SW_RES( FT_WORD		 )),
	aWordNo		(this, SW_RES( FT_WORD_COUNT )),
    aCharLbl	(this, SW_RES( FT_CHAR 	     )),
   	aCharNo		(this, SW_RES( FT_CHAR_COUNT )),
    aLineLbl    (this, SW_RES( FT_LINE       )),
	aLineNo		(this, SW_RES( FT_LINE_COUNT )),
	aUpdatePB	(this, SW_RES( PB_PDATE      ))
{
    Update();
	FreeResource();
	aUpdatePB.SetClickHdl(LINK(this, SwDocStatPage, UpdateHdl));
    //#111684# is the current view a page preview no SwFEShell can be found -> hide the update button
    SwDocShell* pDocShell = (SwDocShell*) SfxObjectShell::Current();
    SwFEShell* pFEShell = pDocShell->GetFEShell();
    if(!pFEShell)
    {
        aUpdatePB.Show(sal_False);
        aLineLbl.Show(sal_False);
        aLineNo .Show(sal_False);
    }

}


 SwDocStatPage::~SwDocStatPage()
{
}

/*--------------------------------------------------------------------
	Beschreibung:	ItemSet fuellen bei Aenderung
 --------------------------------------------------------------------*/


sal_Bool  SwDocStatPage::FillItemSet(SfxItemSet & /*rSet*/)
{
	return sal_False;
}

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


void  SwDocStatPage::Reset(const SfxItemSet &/*rSet*/)
{
}
/*------------------------------------------------------------------------
 Beschreibung:	Aktualisieren / Setzen der Daten
------------------------------------------------------------------------*/


void SwDocStatPage::SetData(const SwDocStat &rStat)
{
	aTableNo.SetText(String::CreateFromInt32( rStat.nTbl ));
	aGrfNo.SetText(String::CreateFromInt32( rStat.nGrf ));
	aOLENo.SetText(String::CreateFromInt32( rStat.nOLE ));
	aPageNo.SetText(String::CreateFromInt32( rStat.nPage ));
	aParaNo.SetText(String::CreateFromInt32( rStat.nPara ));
	aWordNo.SetText(String::CreateFromInt32( rStat.nWord ));
	aCharNo.SetText(String::CreateFromInt32( rStat.nChar ));
}

/*------------------------------------------------------------------------
 Beschreibung:	Aktualisieren der Statistik
------------------------------------------------------------------------*/


void SwDocStatPage::Update()
{
	SfxViewShell *pVSh = SfxViewShell::Current();
	ViewShell *pSh = 0;
	if ( pVSh->ISA(SwView) )
		pSh = ((SwView*)pVSh)->GetWrtShellPtr();
	else if ( pVSh->ISA(SwPagePreView) )
        pSh = ((SwPagePreView*)pVSh)->GetViewShell();

	ASSERT( pSh, "Shell not found" );

	SwWait aWait( *pSh->GetDoc()->GetDocShell(), sal_True );
	pSh->StartAction();
    aDocStat = pSh->GetDoc()->GetDocStat();
	pSh->GetDoc()->UpdateDocStat( aDocStat );
	pSh->EndAction();

	SetData(aDocStat);
}

/*-----------------19.06.97 16.37-------------------
	Zeilennummer aktualisieren
--------------------------------------------------*/
IMPL_LINK( SwDocStatPage, UpdateHdl, PushButton*, EMPTYARG)
{
	Update();
	SwDocShell* pDocShell = (SwDocShell*) SfxObjectShell::Current();
	SwFEShell* pFEShell = pDocShell->GetFEShell();
    if(pFEShell)
        aLineNo.SetText( String::CreateFromInt32( pFEShell->GetLineCount(sal_False)));
	//pButton->Disable();
	return 0;
}

