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 "SlideSorterModule.hxx"
27 
28 #include "framework/FrameworkHelper.hxx"
29 #include <com/sun/star/drawing/framework/XTabBar.hpp>
30 #include <com/sun/star/drawing/framework/TabBarButton.hpp>
31 
32 #include "strings.hrc"
33 #include "sdresid.hxx"
34 
35 using namespace ::com::sun::star;
36 using namespace ::com::sun::star::uno;
37 using namespace ::com::sun::star::drawing::framework;
38 
39 using ::rtl::OUString;
40 using ::sd::framework::FrameworkHelper;
41 
42 
43 namespace sd { namespace framework {
44 
45 
46 //===== SlideSorterModule ==================================================
47 
SlideSorterModule(const Reference<frame::XController> & rxController,const OUString & rsLeftPaneURL)48 SlideSorterModule::SlideSorterModule (
49     const Reference<frame::XController>& rxController,
50     const OUString& rsLeftPaneURL)
51     : ResourceManager(rxController,
52         FrameworkHelper::CreateResourceId(FrameworkHelper::msSlideSorterURL, rsLeftPaneURL)),
53       mxViewTabBarId(FrameworkHelper::CreateResourceId(
54           FrameworkHelper::msViewTabBarURL,
55           FrameworkHelper::msCenterPaneURL)),
56       mxControllerManager(rxController,UNO_QUERY)
57 {
58     if (mxConfigurationController.is())
59     {
60         UpdateViewTabBar(NULL);
61 
62         AddActiveMainView(FrameworkHelper::msImpressViewURL);
63         AddActiveMainView(FrameworkHelper::msOutlineViewURL);
64         AddActiveMainView(FrameworkHelper::msNotesViewURL);
65 
66         AddActiveMainView(FrameworkHelper::msDrawViewURL);
67 
68         mxConfigurationController->addConfigurationChangeListener(
69             this,
70             FrameworkHelper::msResourceActivationEvent,
71             Any());
72     }
73 }
74 
75 
76 
77 
~SlideSorterModule(void)78 SlideSorterModule::~SlideSorterModule (void)
79 {
80 }
81 
82 
83 
84 
notifyConfigurationChange(const ConfigurationChangeEvent & rEvent)85 void SAL_CALL SlideSorterModule::notifyConfigurationChange (
86     const ConfigurationChangeEvent& rEvent)
87     throw (RuntimeException)
88 {
89     if (rEvent.Type.equals(FrameworkHelper::msResourceActivationEvent))
90     {
91         if (rEvent.ResourceId->compareTo(mxViewTabBarId) == 0)
92         {
93             // Update the view tab bar because the view tab bar has just
94             // become active.
95             UpdateViewTabBar(Reference<XTabBar>(rEvent.ResourceObject,UNO_QUERY));
96         }
97         else if (rEvent.ResourceId->getResourceTypePrefix().equals(
98             FrameworkHelper::msViewURLPrefix)
99             && rEvent.ResourceId->isBoundTo(
100                 FrameworkHelper::CreateResourceId(FrameworkHelper::msCenterPaneURL),
101                 AnchorBindingMode_DIRECT))
102         {
103             // Update the view tab bar because the view in the center pane
104             // has changed.
105             UpdateViewTabBar(NULL);
106         }
107     }
108     else
109     {
110         ResourceManager::notifyConfigurationChange(rEvent);
111     }
112 }
113 
114 
115 
116 
UpdateViewTabBar(const Reference<XTabBar> & rxTabBar)117 void SlideSorterModule::UpdateViewTabBar (const Reference<XTabBar>& rxTabBar)
118 {
119     if ( ! mxControllerManager.is())
120         return;
121 
122     Reference<XTabBar> xBar (rxTabBar);
123     if ( ! xBar.is())
124     {
125         Reference<XConfigurationController> xCC (
126             mxControllerManager->getConfigurationController());
127         if (xCC.is())
128             xBar = Reference<XTabBar>(xCC->getResource(mxViewTabBarId), UNO_QUERY);
129     }
130 
131     if (xBar.is())
132     {
133         TabBarButton aButtonA;
134         aButtonA.ResourceId = FrameworkHelper::CreateResourceId(
135             FrameworkHelper::msSlideSorterURL,
136             FrameworkHelper::msCenterPaneURL);
137         aButtonA.ButtonLabel = String(SdResId(STR_SLIDE_MODE));
138 
139         TabBarButton aButtonB;
140         aButtonB.ResourceId = FrameworkHelper::CreateResourceId(
141             FrameworkHelper::msHandoutViewURL,
142             FrameworkHelper::msCenterPaneURL);
143 
144         if ( ! xBar->hasTabBarButton(aButtonA))
145             xBar->addTabBarButtonAfter(aButtonA, aButtonB);
146     }
147 }
148 
149 
150 
151 } } // end of namespace sd::framework
152