blob: 319cc1f802067dd572fce491ba0263e9bd3de7f9 [file] [log] [blame]
/**************************************************************
*
* 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 "model/SlsPageDescriptor.hxx"
#include "sdpage.hxx"
#include "drawdoc.hxx"
#include <svx/svdopage.hxx>
#include <svx/svdpagv.hxx>
#include <svx/sdr/contact/viewcontact.hxx>
#include <svx/sdr/contact/viewobjectcontact.hxx>
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star;
namespace sd { namespace slidesorter { namespace model {
PageDescriptor::PageDescriptor (
const Reference<drawing::XDrawPage>& rxPage,
SdPage* pPage,
const sal_Int32 nIndex)
: mpPage(pPage),
mxPage(rxPage),
mpMasterPage(NULL),
mnIndex(nIndex),
maBoundingBox(),
maVisualState(nIndex),
mbIsSelected(false),
mbWasSelected(false),
mbIsVisible(false),
mbIsFocused(false),
mbIsCurrent(false),
mbIsMouseOver(false),
mbHasTransition(false)
{
OSL_ASSERT(mpPage);
OSL_ASSERT(mpPage == SdPage::getImplementation(rxPage));
if (mpPage != NULL)
{
if (mpPage->TRG_HasMasterPage())
mpMasterPage = &mpPage->TRG_GetMasterPage();
if (mpPage->getTransitionType() > 0)
mbHasTransition = true;
}
}
PageDescriptor::~PageDescriptor (void)
{
}
SdPage* PageDescriptor::GetPage (void) const
{
return mpPage;
}
Reference<drawing::XDrawPage> PageDescriptor::GetXDrawPage (void) const
{
return mxPage;
}
sal_Int32 PageDescriptor::GetPageIndex (void) const
{
return mnIndex;
}
void PageDescriptor::SetPageIndex (const sal_Int32 nNewIndex)
{
mnIndex = nNewIndex;
maVisualState.mnPageId = nNewIndex;
}
bool PageDescriptor::UpdateMasterPage (void)
{
const SdrPage* pMaster = NULL;
if (mpPage!=NULL && mpPage->TRG_HasMasterPage())
pMaster = &mpPage->TRG_GetMasterPage();
if (mpMasterPage != pMaster)
{
mpMasterPage = pMaster;
return true;
}
else
return false;
}
bool PageDescriptor::UpdateTransitionFlag (void)
{
bool bHasSlideTransition (false);
if (mpPage != NULL)
bHasSlideTransition = mpPage->getTransitionType() > 0;
if (bHasSlideTransition != mbHasTransition)
{
mbHasTransition = bHasSlideTransition;
return true;
}
else
return false;
}
bool PageDescriptor::HasState (const State eState) const
{
switch (eState)
{
case ST_Visible:
return mbIsVisible;
case ST_Selected:
return mbIsSelected;
case ST_WasSelected:
return mbWasSelected;
case ST_Focused:
return mbIsFocused;
case ST_MouseOver:
return mbIsMouseOver;
case ST_Current:
return mbIsCurrent;
case ST_Excluded:
return mpPage!=NULL && mpPage->IsExcluded();
default:
OSL_ASSERT(false);
return false;
}
}
bool PageDescriptor::SetState (const State eState, const bool bNewStateValue)
{
bool bModified (false);
switch (eState)
{
case ST_Visible:
bModified = (bNewStateValue!=mbIsVisible);
if (bModified)
mbIsVisible = bNewStateValue;
break;
case ST_Selected:
bModified = (bNewStateValue!=mbIsSelected);
if (bModified)
mbIsSelected = bNewStateValue;
break;
case ST_WasSelected:
bModified = (bNewStateValue!=mbWasSelected);
if (bModified)
mbWasSelected = bNewStateValue;
break;
case ST_Focused:
bModified = (bNewStateValue!=mbIsFocused);
if (bModified)
mbIsFocused = bNewStateValue;
break;
case ST_MouseOver:
bModified = (bNewStateValue!=mbIsMouseOver);
if (bModified)
mbIsMouseOver = bNewStateValue;
break;
case ST_Current:
bModified = (bNewStateValue!=mbIsCurrent);
if (bModified)
mbIsCurrent = bNewStateValue;
break;
case ST_Excluded:
// This is a state of the page and has to be handled differently
// from the view-only states.
if (mpPage != NULL)
if (bNewStateValue != (mpPage->IsExcluded()==sal_True))
{
mpPage->SetExcluded(bNewStateValue);
bModified = true;
}
break;
}
if (bModified)
maVisualState.UpdateVisualState(*this);
return bModified;
}
VisualState& PageDescriptor::GetVisualState (void)
{
return maVisualState;
}
bool PageDescriptor::GetCoreSelection (void)
{
if (mpPage!=NULL && (mpPage->IsSelected()==sal_True) != mbIsSelected)
return SetState(ST_Selected, !mbIsSelected);
else
return false;
}
void PageDescriptor::SetCoreSelection (void)
{
if (mpPage != NULL)
if (HasState(ST_Selected))
mpPage->SetSelected(sal_True);
else
mpPage->SetSelected(sal_False);
else
{
OSL_ASSERT(mpPage!=NULL);
}
}
Rectangle PageDescriptor::GetBoundingBox (void) const
{
Rectangle aBox (maBoundingBox);
const Point aOffset (maVisualState.GetLocationOffset());
aBox.Move(aOffset.X(), aOffset.Y());
return aBox;
}
Point PageDescriptor::GetLocation (const bool bIgnoreOffset) const
{
if (bIgnoreOffset)
return maBoundingBox.TopLeft();
else
return maBoundingBox.TopLeft() + maVisualState.GetLocationOffset();
}
void PageDescriptor::SetBoundingBox (const Rectangle& rBoundingBox)
{
maBoundingBox = rBoundingBox;
}
} } } // end of namespace ::sd::slidesorter::model