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 "ViewTabBarModule.hxx" 27 28 #include "framework/FrameworkHelper.hxx" 29 #include "framework/ConfigurationController.hxx" 30 #include <com/sun/star/drawing/framework/XControllerManager.hpp> 31 #include <com/sun/star/drawing/framework/XTabBar.hpp> 32 33 #include "strings.hrc" 34 #include "sdresid.hxx" 35 36 37 using namespace ::com::sun::star; 38 using namespace ::com::sun::star::uno; 39 using namespace ::com::sun::star::drawing::framework; 40 41 using ::rtl::OUString; 42 using ::sd::framework::FrameworkHelper; 43 44 namespace { 45 46 static const sal_Int32 ResourceActivationRequestEvent = 0; 47 static const sal_Int32 ResourceDeactivationRequestEvent = 1; 48 static const sal_Int32 ResourceActivationEvent = 2; 49 50 } 51 52 namespace sd { namespace framework { 53 54 //===== ViewTabBarModule ================================================== 55 56 ViewTabBarModule::ViewTabBarModule ( 57 const Reference<frame::XController>& rxController, 58 const Reference<XResourceId>& rxViewTabBarId) 59 : ViewTabBarModuleInterfaceBase(MutexOwner::maMutex), 60 mxConfigurationController(), 61 mxViewTabBarId(rxViewTabBarId) 62 { 63 Reference<XControllerManager> xControllerManager (rxController, UNO_QUERY); 64 65 if (xControllerManager.is()) 66 { 67 mxConfigurationController = xControllerManager->getConfigurationController(); 68 if (mxConfigurationController.is()) 69 { 70 mxConfigurationController->addConfigurationChangeListener( 71 this, 72 FrameworkHelper::msResourceActivationRequestEvent, 73 makeAny(ResourceActivationRequestEvent)); 74 mxConfigurationController->addConfigurationChangeListener( 75 this, 76 FrameworkHelper::msResourceDeactivationRequestEvent, 77 makeAny(ResourceDeactivationRequestEvent)); 78 79 UpdateViewTabBar(NULL); 80 mxConfigurationController->addConfigurationChangeListener( 81 this, 82 FrameworkHelper::msResourceActivationEvent, 83 makeAny(ResourceActivationEvent)); 84 } 85 } 86 } 87 88 89 90 91 ViewTabBarModule::~ViewTabBarModule (void) 92 { 93 } 94 95 96 97 98 void SAL_CALL ViewTabBarModule::disposing (void) 99 { 100 if (mxConfigurationController.is()) 101 mxConfigurationController->removeConfigurationChangeListener(this); 102 103 mxConfigurationController = NULL; 104 } 105 106 107 108 109 void SAL_CALL ViewTabBarModule::notifyConfigurationChange ( 110 const ConfigurationChangeEvent& rEvent) 111 throw (RuntimeException) 112 { 113 if (mxConfigurationController.is()) 114 { 115 sal_Int32 nEventType = 0; 116 rEvent.UserData >>= nEventType; 117 switch (nEventType) 118 { 119 case ResourceActivationRequestEvent: 120 if (mxViewTabBarId->isBoundTo(rEvent.ResourceId, AnchorBindingMode_DIRECT)) 121 { 122 mxConfigurationController->requestResourceActivation( 123 mxViewTabBarId, 124 ResourceActivationMode_ADD); 125 } 126 break; 127 128 case ResourceDeactivationRequestEvent: 129 if (mxViewTabBarId->isBoundTo(rEvent.ResourceId, AnchorBindingMode_DIRECT)) 130 { 131 mxConfigurationController->requestResourceDeactivation(mxViewTabBarId); 132 } 133 break; 134 135 case ResourceActivationEvent: 136 if (rEvent.ResourceId->compareTo(mxViewTabBarId) == 0) 137 { 138 UpdateViewTabBar(Reference<XTabBar>(rEvent.ResourceObject,UNO_QUERY)); 139 } 140 } 141 } 142 } 143 144 145 146 147 void SAL_CALL ViewTabBarModule::disposing ( 148 const lang::EventObject& rEvent) 149 throw (RuntimeException) 150 { 151 if (mxConfigurationController.is() 152 && rEvent.Source == mxConfigurationController) 153 { 154 // Without the configuration controller this class can do nothing. 155 mxConfigurationController = NULL; 156 disposing(); 157 } 158 } 159 160 161 162 163 void ViewTabBarModule::UpdateViewTabBar (const Reference<XTabBar>& rxTabBar) 164 { 165 if (mxConfigurationController.is()) 166 { 167 Reference<XTabBar> xBar (rxTabBar); 168 if ( ! xBar.is()) 169 xBar = Reference<XTabBar>( 170 mxConfigurationController->getResource(mxViewTabBarId), UNO_QUERY); 171 172 if (xBar.is()) 173 { 174 TabBarButton aEmptyButton; 175 176 Reference<XResourceId> xAnchor (mxViewTabBarId->getAnchor()); 177 178 TabBarButton aImpressViewButton; 179 aImpressViewButton.ResourceId = FrameworkHelper::CreateResourceId( 180 FrameworkHelper::msImpressViewURL, 181 xAnchor); 182 aImpressViewButton.ButtonLabel = String(SdResId(STR_DRAW_MODE)); 183 if ( ! xBar->hasTabBarButton(aImpressViewButton)) 184 xBar->addTabBarButtonAfter(aImpressViewButton, aEmptyButton); 185 186 TabBarButton aOutlineViewButton; 187 aOutlineViewButton.ResourceId = FrameworkHelper::CreateResourceId( 188 FrameworkHelper::msOutlineViewURL, 189 xAnchor); 190 aOutlineViewButton.ButtonLabel = String(SdResId(STR_OUTLINE_MODE)); 191 if ( ! xBar->hasTabBarButton(aOutlineViewButton)) 192 xBar->addTabBarButtonAfter(aOutlineViewButton, aImpressViewButton); 193 194 TabBarButton aNotesViewButton; 195 aNotesViewButton.ResourceId = FrameworkHelper::CreateResourceId( 196 FrameworkHelper::msNotesViewURL, 197 xAnchor); 198 aNotesViewButton.ButtonLabel = String(SdResId(STR_NOTES_MODE)); 199 if ( ! xBar->hasTabBarButton(aNotesViewButton)) 200 xBar->addTabBarButtonAfter(aNotesViewButton, aOutlineViewButton); 201 202 TabBarButton aHandoutViewButton; 203 aHandoutViewButton.ResourceId = FrameworkHelper::CreateResourceId( 204 FrameworkHelper::msHandoutViewURL, 205 xAnchor); 206 aHandoutViewButton.ButtonLabel = String(SdResId(STR_HANDOUT_MODE)); 207 if ( ! xBar->hasTabBarButton(aHandoutViewButton)) 208 xBar->addTabBarButtonAfter(aHandoutViewButton, aNotesViewButton); 209 } 210 } 211 } 212 213 214 215 216 } } // end of namespace sd::framework 217