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


#include "undopage.hxx"

#include <svx/svxids.hrc>
#include <sfx2/bindings.hxx>
#include <sfx2/dispatch.hxx>
#include <sfx2/viewfrm.hxx>

#include "sdpage.hxx"
#include "DrawViewShell.hxx"
#include "drawview.hxx"
#include <svx/svdpagv.hxx>



TYPEINIT1(SdPageFormatUndoAction, SdUndoAction);
TYPEINIT1(SdPageLRUndoAction, SdUndoAction);
TYPEINIT1(SdPageULUndoAction, SdUndoAction);


/*************************************************************************
|*
|* Destruktor
|*
\************************************************************************/

SdPageFormatUndoAction::~SdPageFormatUndoAction()
{
}

/*************************************************************************
|*
|* Undo()
|*
\************************************************************************/

void SdPageFormatUndoAction::Undo()
{
	Rectangle aOldBorderRect(mnOldLeft, mnOldUpper, mnOldRight, mnOldLower);
	mpPage->ScaleObjects(maOldSize, aOldBorderRect, mbNewScale);
	mpPage->SetSize(maOldSize);
	mpPage->SetLftBorder(mnOldLeft);
	mpPage->SetRgtBorder(mnOldRight);
	mpPage->SetUppBorder(mnOldUpper);
	mpPage->SetLwrBorder(mnOldLower);
	mpPage->SetOrientation(meOldOrientation);
	mpPage->SetPaperBin( mnOldPaperBin );

	mpPage->SetBackgroundFullSize( mbOldFullSize );
	if( !mpPage->IsMasterPage() )
		( (SdPage&) mpPage->TRG_GetMasterPage() ).SetBackgroundFullSize( mbOldFullSize );

}

void SdPageFormatUndoAction::Redo()
{
	Rectangle aNewBorderRect(mnNewLeft, mnNewUpper, mnNewRight, mnNewLower);
	mpPage->ScaleObjects(maNewSize, aNewBorderRect, mbNewScale);
	mpPage->SetSize(maNewSize);
	mpPage->SetLftBorder(mnNewLeft);
	mpPage->SetRgtBorder(mnNewRight);
	mpPage->SetUppBorder(mnNewUpper);
	mpPage->SetLwrBorder(mnNewLower);
	mpPage->SetOrientation(meNewOrientation);
	mpPage->SetPaperBin( mnNewPaperBin );

	mpPage->SetBackgroundFullSize( mbNewFullSize );
	if( !mpPage->IsMasterPage() )
		( (SdPage&) mpPage->TRG_GetMasterPage() ).SetBackgroundFullSize( mbNewFullSize );

}

SdPageLRUndoAction::~SdPageLRUndoAction()
{
}

void SdPageLRUndoAction::Undo()
{
	mpPage->SetLftBorder(mnOldLeft);
	mpPage->SetRgtBorder(mnOldRight);
}

void SdPageLRUndoAction::Redo()
{
	mpPage->SetLftBorder(mnNewLeft);
	mpPage->SetRgtBorder(mnNewRight);
}

SdPageULUndoAction::~SdPageULUndoAction()
{
}

void SdPageULUndoAction::Undo()
{
	mpPage->SetUppBorder(mnOldUpper);
	mpPage->SetLwrBorder(mnOldLower);
}

/*************************************************************************
|*
|* UL-Redo()
|*
\************************************************************************/

void SdPageULUndoAction::Redo()
{
	mpPage->SetUppBorder(mnNewUpper);
	mpPage->SetLwrBorder(mnNewLower);
}

