/************************************************************** * * 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 #include #include #include using namespace ::com::sun::star::uno; using namespace ::com::sun::star; namespace sd { namespace slidesorter { namespace model { PageDescriptor::PageDescriptor ( const Reference& 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 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