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


#include <svx/svdpagv.hxx>
#include <svx/svdview.hxx>
#include <svx/ruler.hxx>
#include <svx/sidebar/ContextChangeEventMultiplexer.hxx>
#include <idxmrk.hxx>
#ifndef _VIEW_HXX
#include <view.hxx>
#endif
#include <wrtsh.hxx>
#include <swmodule.hxx>
#include <viewopt.hxx>
#ifndef _DOCSH_HXX
#include <docsh.hxx>
#endif
#ifndef _GLOBDOC_HXX
#include <globdoc.hxx>
#endif
#include <navipi.hxx>
#include <fldwrap.hxx>
#ifndef _REDLNDLG_HXX
#include <redlndlg.hxx>
#endif
#include <dpage.hxx>
#include <edtwin.hxx>
#include "formatclipboard.hxx"
#ifndef _CMDID_H
#include <cmdid.h>
#endif
// header for class SfxRequest
#include <sfx2/request.hxx>

#include <sfx2/viewfrm.hxx>

extern int bDocSzUpdated;


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


void SwView::Activate(sal_Bool bMDIActivate)
{
	// aktuelle View anmelden an der DocShell
	// die View bleibt solange an der DocShell
	// aktiv bis Sie zerstoert wird oder durch Activate eine
	// neue gesetzt wird
	SwDocShell* pDocSh = GetDocShell();
	if(pDocSh)
		pDocSh->SetView(this);
	SwModule* pSwMod = SW_MOD();
	pSwMod->SetView(this);

	// Dokumentgroesse hat sich geaendert
	if(!bDocSzUpdated)
		DocSzChgd(aDocSz);

    // #b6330459# make selection visible
    if(bMakeSelectionVisible)
    {
        pWrtShell->MakeSelVisible();
        bMakeSelectionVisible = sal_False;
    }
    pHRuler->SetActive( sal_True );
    pVRuler->SetActive( sal_True );

	if ( bMDIActivate )
	{
		pWrtShell->ShGetFcs(sal_False);		// Selektionen sichtbar

		if( sSwViewData.Len() )
		{
            ReadUserData( sSwViewData, sal_False );
			sSwViewData.Erase();
        }

        AttrChangedNotify(pWrtShell);

		// Flddlg ggf neu initialisieren (z.B. fuer TYP_SETVAR)
		sal_uInt16 nId = SwFldDlgWrapper::GetChildWindowId();
		SfxViewFrame* pVFrame = GetViewFrame();
		SwFldDlgWrapper *pWrp = (SwFldDlgWrapper*)pVFrame->GetChildWindow(nId);
		if (pWrp)
			pWrp->ReInitDlg(GetDocShell());

		// RedlineDlg ggf neu initialisieren
		nId = SwRedlineAcceptChild::GetChildWindowId();
		SwRedlineAcceptChild *pRed = (SwRedlineAcceptChild*)pVFrame->GetChildWindow(nId);
		if (pRed)
			pRed->ReInitDlg(GetDocShell());

		// reinit IdxMarkDlg
		nId = SwInsertIdxMarkWrapper::GetChildWindowId();
		SwInsertIdxMarkWrapper *pIdxMrk = (SwInsertIdxMarkWrapper*)pVFrame->GetChildWindow(nId);
		if (pIdxMrk)
			pIdxMrk->ReInitDlg(*pWrtShell);

		// reinit AuthMarkDlg
		nId = SwInsertAuthMarkWrapper::GetChildWindowId();
		SwInsertAuthMarkWrapper *pAuthMrk = (SwInsertAuthMarkWrapper*)pVFrame->
																GetChildWindow(nId);
		if (pAuthMrk)
			pAuthMrk->ReInitDlg(*pWrtShell);
	}
	else
		//Wenigstens das Notify rufen (vorsichtshalber wegen der SlotFilter
		AttrChangedNotify(pWrtShell);

	SfxViewShell::Activate(bMDIActivate);
}

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


void SwView::Deactivate(sal_Bool bMDIActivate)
{
	extern sal_Bool bFlushCharBuffer ;
		// Befinden sich noch Zeichen im Input Buffer?
	if( bFlushCharBuffer )
        GetEditWin().FlushInBuffer();

	if( bMDIActivate )
	{
		pWrtShell->ShLooseFcs();	// Selektionen unsichtbar

        pHRuler->SetActive( sal_False );
        pVRuler->SetActive( sal_False );
	}
	SfxViewShell::Deactivate(bMDIActivate);
}

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

void SwView::MarginChanged()
{
	GetWrtShell().SetBrowseBorder( GetMargin() );
}

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

void SwView::ExecFormatPaintbrush(SfxRequest& rReq)
{
    if(!pFormatClipboard)
        return;

    if( pFormatClipboard->HasContent() )
    {
        pFormatClipboard->Erase();

        SwApplyTemplate aTemplate;
        GetEditWin().SetApplyTemplate(aTemplate);
    }
    else
    {
        bool bPersistentCopy = false;
        const SfxItemSet *pArgs = rReq.GetArgs();
        if( pArgs && pArgs->Count() >= 1 )
        {
            bPersistentCopy = static_cast<bool>(((SfxBoolItem &)pArgs->Get(
                                    SID_FORMATPAINTBRUSH)).GetValue());
        }

        pFormatClipboard->Copy( GetWrtShell(), GetPool(), bPersistentCopy );

        SwApplyTemplate aTemplate;
        aTemplate.pFormatClipboard = pFormatClipboard;
        GetEditWin().SetApplyTemplate(aTemplate);
    }
    GetViewFrame()->GetBindings().Invalidate(SID_FORMATPAINTBRUSH);
}

void SwView::StateFormatPaintbrush(SfxItemSet &rSet)
{
    if(!pFormatClipboard)
        return;

    bool bHasContent = pFormatClipboard && pFormatClipboard->HasContent();
    rSet.Put(SfxBoolItem(SID_FORMATPAINTBRUSH, bHasContent));
    if(!bHasContent)
    {
        if( !pFormatClipboard->CanCopyThisType( GetWrtShell().GetSelectionType() ) )
            rSet.DisableItem( SID_FORMATPAINTBRUSH );
    }
}
