blob: 9330a368a560cc90c9d86bef8ec6a33b2ddc0a42 [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.
*
*************************************************************/
#include "precompiled_sd.hxx"
#include "SlsHideSlideFunction.hxx"
#include "SlideSorter.hxx"
#include "model/SlsPageEnumerationProvider.hxx"
#include "model/SlsPageDescriptor.hxx"
#include "view/SlideSorterView.hxx"
#include "app.hrc"
#include "drawdoc.hxx"
#include "sdpage.hxx"
#include "ViewShell.hxx"
#include <sfx2/viewfrm.hxx>
#include <sfx2/bindings.hxx>
#include <sfx2/request.hxx>
#include <svx/svxids.hrc>
namespace sd { namespace slidesorter { namespace controller {
TYPEINIT1(HideSlideFunction, SlideFunction);
HideSlideFunction::HideSlideFunction (
SlideSorter& rSlideSorter,
SfxRequest& rRequest)
: SlideFunction( rSlideSorter, rRequest),
mrSlideSorter(rSlideSorter)
{
}
HideSlideFunction::~HideSlideFunction (void)
{
}
FunctionReference HideSlideFunction::Create (
SlideSorter& rSlideSorter,
SfxRequest& rRequest )
{
FunctionReference xFunc( new HideSlideFunction( rSlideSorter, rRequest ) );
xFunc->DoExecute(rRequest);
return xFunc;
}
void HideSlideFunction::DoExecute (SfxRequest& rRequest)
{
SlideFunction::DoExecute(rRequest);
model::PageEnumeration aSelectedPages (
model::PageEnumerationProvider::CreateSelectedPagesEnumeration(mrSlideSorter.GetModel()));
ExclusionState eState (UNDEFINED);
switch (rRequest.GetSlot())
{
case SID_HIDE_SLIDE:
eState = EXCLUDED;
break;
case SID_SHOW_SLIDE:
eState = INCLUDED;
break;
default:
eState = UNDEFINED;
break;
}
if (eState != UNDEFINED)
{
// Set status at the selected pages.
aSelectedPages.Rewind ();
while (aSelectedPages.HasMoreElements())
{
model::SharedPageDescriptor pDescriptor (aSelectedPages.GetNextElement());
static_cast<view::SlideSorterView*>(mpView)->SetState(
pDescriptor,
model::PageDescriptor::ST_Excluded,
eState==EXCLUDED);
}
}
SfxBindings& rBindings = mpViewShell->GetViewFrame()->GetBindings();
rBindings.Invalidate (SID_PRESENTATION);
rBindings.Invalidate (SID_REHEARSE_TIMINGS);
rBindings.Invalidate (SID_HIDE_SLIDE);
rBindings.Invalidate (SID_SHOW_SLIDE);
mpDoc->SetChanged();
}
HideSlideFunction::ExclusionState HideSlideFunction::GetExclusionState (
model::PageEnumeration& rPageSet)
{
ExclusionState eState (UNDEFINED);
sal_Bool bState;
// Get toggle state of the selected pages.
while (rPageSet.HasMoreElements() && eState!=MIXED)
{
bState = rPageSet.GetNextElement()->GetPage()->IsExcluded();
switch (eState)
{
case UNDEFINED:
// Use the first selected page to set the inital value.
eState = bState ? EXCLUDED : INCLUDED;
break;
case EXCLUDED:
// The pages before where all not part of the show,
// this one is.
if ( ! bState)
eState = MIXED;
break;
case INCLUDED:
// The pages before where all part of the show,
// this one is not.
if (bState)
eState = MIXED;
break;
case MIXED:
default:
// No need to change anything.
break;
}
}
return eState;
}
} } } // end of namespace ::sd::slidesorter::controller