1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22
23
24 #include "precompiled_sd.hxx"
25
26 #include "SlsHideSlideFunction.hxx"
27
28 #include "SlideSorter.hxx"
29 #include "model/SlsPageEnumerationProvider.hxx"
30 #include "model/SlsPageDescriptor.hxx"
31 #include "view/SlideSorterView.hxx"
32
33 #include "app.hrc"
34 #include "drawdoc.hxx"
35 #include "sdpage.hxx"
36 #include "ViewShell.hxx"
37
38 #include <sfx2/viewfrm.hxx>
39 #include <sfx2/bindings.hxx>
40 #include <sfx2/request.hxx>
41 #include <svx/svxids.hrc>
42
43 namespace sd { namespace slidesorter { namespace controller {
44
45 TYPEINIT1(HideSlideFunction, SlideFunction);
46
HideSlideFunction(SlideSorter & rSlideSorter,SfxRequest & rRequest)47 HideSlideFunction::HideSlideFunction (
48 SlideSorter& rSlideSorter,
49 SfxRequest& rRequest)
50 : SlideFunction( rSlideSorter, rRequest),
51 mrSlideSorter(rSlideSorter)
52 {
53 }
54
55
56
57
~HideSlideFunction(void)58 HideSlideFunction::~HideSlideFunction (void)
59 {
60 }
61
62
63
64
Create(SlideSorter & rSlideSorter,SfxRequest & rRequest)65 FunctionReference HideSlideFunction::Create (
66 SlideSorter& rSlideSorter,
67 SfxRequest& rRequest )
68 {
69 FunctionReference xFunc( new HideSlideFunction( rSlideSorter, rRequest ) );
70 xFunc->DoExecute(rRequest);
71 return xFunc;
72 }
73
74
75
76
DoExecute(SfxRequest & rRequest)77 void HideSlideFunction::DoExecute (SfxRequest& rRequest)
78 {
79 SlideFunction::DoExecute(rRequest);
80
81 model::PageEnumeration aSelectedPages (
82 model::PageEnumerationProvider::CreateSelectedPagesEnumeration(mrSlideSorter.GetModel()));
83
84 ExclusionState eState (UNDEFINED);
85
86 switch (rRequest.GetSlot())
87 {
88 case SID_HIDE_SLIDE:
89 eState = EXCLUDED;
90 break;
91
92 case SID_SHOW_SLIDE:
93 eState = INCLUDED;
94 break;
95
96 default:
97 eState = UNDEFINED;
98 break;
99 }
100
101 if (eState != UNDEFINED)
102 {
103 // Set status at the selected pages.
104 aSelectedPages.Rewind ();
105 while (aSelectedPages.HasMoreElements())
106 {
107 model::SharedPageDescriptor pDescriptor (aSelectedPages.GetNextElement());
108 static_cast<view::SlideSorterView*>(mpView)->SetState(
109 pDescriptor,
110 model::PageDescriptor::ST_Excluded,
111 eState==EXCLUDED);
112 }
113 }
114
115 SfxBindings& rBindings = mpViewShell->GetViewFrame()->GetBindings();
116 rBindings.Invalidate (SID_PRESENTATION);
117 rBindings.Invalidate (SID_REHEARSE_TIMINGS);
118 rBindings.Invalidate (SID_HIDE_SLIDE);
119 rBindings.Invalidate (SID_SHOW_SLIDE);
120 mpDoc->SetChanged();
121 }
122
123
124
125
GetExclusionState(model::PageEnumeration & rPageSet)126 HideSlideFunction::ExclusionState HideSlideFunction::GetExclusionState (
127 model::PageEnumeration& rPageSet)
128 {
129 ExclusionState eState (UNDEFINED);
130 sal_Bool bState;
131
132 // Get toggle state of the selected pages.
133 while (rPageSet.HasMoreElements() && eState!=MIXED)
134 {
135 bState = rPageSet.GetNextElement()->GetPage()->IsExcluded();
136 switch (eState)
137 {
138 case UNDEFINED:
139 // Use the first selected page to set the initial value.
140 eState = bState ? EXCLUDED : INCLUDED;
141 break;
142
143 case EXCLUDED:
144 // The pages before where all not part of the show,
145 // this one is.
146 if ( ! bState)
147 eState = MIXED;
148 break;
149
150 case INCLUDED:
151 // The pages before where all part of the show,
152 // this one is not.
153 if (bState)
154 eState = MIXED;
155 break;
156
157 case MIXED:
158 default:
159 // No need to change anything.
160 break;
161 }
162 }
163
164 return eState;
165 }
166
167 } } } // end of namespace ::sd::slidesorter::controller
168