1ff0525f2SOliver-Rainer Wittmann /************************************************************** 2ff0525f2SOliver-Rainer Wittmann * 3ff0525f2SOliver-Rainer Wittmann * Licensed to the Apache Software Foundation (ASF) under one 4ff0525f2SOliver-Rainer Wittmann * or more contributor license agreements. See the NOTICE file 5ff0525f2SOliver-Rainer Wittmann * distributed with this work for additional information 6ff0525f2SOliver-Rainer Wittmann * regarding copyright ownership. The ASF licenses this file 7ff0525f2SOliver-Rainer Wittmann * to you under the Apache License, Version 2.0 (the 8ff0525f2SOliver-Rainer Wittmann * "License"); you may not use this file except in compliance 9ff0525f2SOliver-Rainer Wittmann * with the License. You may obtain a copy of the License at 10ff0525f2SOliver-Rainer Wittmann * 11ff0525f2SOliver-Rainer Wittmann * http://www.apache.org/licenses/LICENSE-2.0 12ff0525f2SOliver-Rainer Wittmann * 13ff0525f2SOliver-Rainer Wittmann * Unless required by applicable law or agreed to in writing, 14ff0525f2SOliver-Rainer Wittmann * software distributed under the License is distributed on an 15ff0525f2SOliver-Rainer Wittmann * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16ff0525f2SOliver-Rainer Wittmann * KIND, either express or implied. See the License for the 17ff0525f2SOliver-Rainer Wittmann * specific language governing permissions and limitations 18ff0525f2SOliver-Rainer Wittmann * under the License. 19ff0525f2SOliver-Rainer Wittmann * 20ff0525f2SOliver-Rainer Wittmann *************************************************************/ 21ff0525f2SOliver-Rainer Wittmann 22ff0525f2SOliver-Rainer Wittmann #include "precompiled_sw.hxx" 23ff0525f2SOliver-Rainer Wittmann 24ff0525f2SOliver-Rainer Wittmann #include "SwPanelFactory.hxx" 25ff0525f2SOliver-Rainer Wittmann 26ff0525f2SOliver-Rainer Wittmann #include <PagePropertyPanel.hxx> 27721f296aSOliver-Rainer Wittmann #include <WrapPropertyPanel.hxx> 28*b7d08b69SAndre Fischer #include <navipi.hxx> 29ff0525f2SOliver-Rainer Wittmann 30ff0525f2SOliver-Rainer Wittmann #include <sfx2/sidebar/SidebarPanelBase.hxx> 31ff0525f2SOliver-Rainer Wittmann #include <sfx2/sfxbasecontroller.hxx> 32ff0525f2SOliver-Rainer Wittmann #include <toolkit/helper/vclunohelper.hxx> 33ff0525f2SOliver-Rainer Wittmann #include <vcl/window.hxx> 34ff0525f2SOliver-Rainer Wittmann #include <rtl/ref.hxx> 35ff0525f2SOliver-Rainer Wittmann #include <comphelper/namedvaluecollection.hxx> 36ff0525f2SOliver-Rainer Wittmann 37ff0525f2SOliver-Rainer Wittmann #include <boost/bind.hpp> 38ff0525f2SOliver-Rainer Wittmann 39ff0525f2SOliver-Rainer Wittmann 40ff0525f2SOliver-Rainer Wittmann using namespace css; 41ff0525f2SOliver-Rainer Wittmann using namespace cssu; 42ff0525f2SOliver-Rainer Wittmann using ::rtl::OUString; 43ff0525f2SOliver-Rainer Wittmann 44ff0525f2SOliver-Rainer Wittmann 45ff0525f2SOliver-Rainer Wittmann namespace sw { namespace sidebar { 46ff0525f2SOliver-Rainer Wittmann 47ff0525f2SOliver-Rainer Wittmann #define A2S(s) ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(s)) 48ff0525f2SOliver-Rainer Wittmann #define IMPLEMENTATION_NAME "org.apache.openoffice.comp.sw.sidebar.SwPanelFactory" 49ff0525f2SOliver-Rainer Wittmann #define SERVICE_NAME "com.sun.star.ui.UIElementFactory" 50ff0525f2SOliver-Rainer Wittmann 51ff0525f2SOliver-Rainer Wittmann 52ff0525f2SOliver-Rainer Wittmann ::rtl::OUString SAL_CALL SwPanelFactory::getImplementationName (void) 53ff0525f2SOliver-Rainer Wittmann { 54ff0525f2SOliver-Rainer Wittmann return A2S(IMPLEMENTATION_NAME); 55ff0525f2SOliver-Rainer Wittmann } 56ff0525f2SOliver-Rainer Wittmann 57ff0525f2SOliver-Rainer Wittmann 58ff0525f2SOliver-Rainer Wittmann cssu::Reference<cssu::XInterface> SAL_CALL SwPanelFactory::createInstance( 59ff0525f2SOliver-Rainer Wittmann const uno::Reference<lang::XMultiServiceFactory>& ) 60ff0525f2SOliver-Rainer Wittmann { 61ff0525f2SOliver-Rainer Wittmann ::rtl::Reference<SwPanelFactory> pPanelFactory (new SwPanelFactory()); 62ff0525f2SOliver-Rainer Wittmann cssu::Reference<cssu::XInterface> xService (static_cast<XWeak*>(pPanelFactory.get()), cssu::UNO_QUERY); 63ff0525f2SOliver-Rainer Wittmann return xService; 64ff0525f2SOliver-Rainer Wittmann } 65ff0525f2SOliver-Rainer Wittmann 66ff0525f2SOliver-Rainer Wittmann 67ff0525f2SOliver-Rainer Wittmann cssu::Sequence<OUString> SAL_CALL SwPanelFactory::getSupportedServiceNames (void) 68ff0525f2SOliver-Rainer Wittmann { 69ff0525f2SOliver-Rainer Wittmann cssu::Sequence<OUString> aServiceNames (1); 70ff0525f2SOliver-Rainer Wittmann aServiceNames[0] = A2S(SERVICE_NAME); 71ff0525f2SOliver-Rainer Wittmann return aServiceNames; 72ff0525f2SOliver-Rainer Wittmann 73ff0525f2SOliver-Rainer Wittmann } 74ff0525f2SOliver-Rainer Wittmann 75ff0525f2SOliver-Rainer Wittmann 76ff0525f2SOliver-Rainer Wittmann SwPanelFactory::SwPanelFactory (void) 77ff0525f2SOliver-Rainer Wittmann : PanelFactoryInterfaceBase(m_aMutex) 78ff0525f2SOliver-Rainer Wittmann { 79ff0525f2SOliver-Rainer Wittmann } 80ff0525f2SOliver-Rainer Wittmann 81ff0525f2SOliver-Rainer Wittmann 82ff0525f2SOliver-Rainer Wittmann SwPanelFactory::~SwPanelFactory (void) 83ff0525f2SOliver-Rainer Wittmann { 84ff0525f2SOliver-Rainer Wittmann } 85ff0525f2SOliver-Rainer Wittmann 86ff0525f2SOliver-Rainer Wittmann 87ff0525f2SOliver-Rainer Wittmann Reference<ui::XUIElement> SAL_CALL SwPanelFactory::createUIElement ( 88ff0525f2SOliver-Rainer Wittmann const ::rtl::OUString& rsResourceURL, 89ff0525f2SOliver-Rainer Wittmann const ::cssu::Sequence<css::beans::PropertyValue>& rArguments) 90ff0525f2SOliver-Rainer Wittmann throw( 91ff0525f2SOliver-Rainer Wittmann container::NoSuchElementException, 92ff0525f2SOliver-Rainer Wittmann lang::IllegalArgumentException, 93ff0525f2SOliver-Rainer Wittmann RuntimeException) 94ff0525f2SOliver-Rainer Wittmann { 95ff0525f2SOliver-Rainer Wittmann Reference<ui::XUIElement> xElement; 96ff0525f2SOliver-Rainer Wittmann 97ff0525f2SOliver-Rainer Wittmann const ::comphelper::NamedValueCollection aArguments (rArguments); 98ff0525f2SOliver-Rainer Wittmann Reference<frame::XFrame> xFrame (aArguments.getOrDefault("Frame", Reference<frame::XFrame>())); 99ff0525f2SOliver-Rainer Wittmann Reference<awt::XWindow> xParentWindow (aArguments.getOrDefault("ParentWindow", Reference<awt::XWindow>())); 100ff0525f2SOliver-Rainer Wittmann const sal_uInt64 nBindingsValue (aArguments.getOrDefault("SfxBindings", sal_uInt64(0))); 101ff0525f2SOliver-Rainer Wittmann SfxBindings* pBindings = reinterpret_cast<SfxBindings*>(nBindingsValue); 102ff0525f2SOliver-Rainer Wittmann 103ff0525f2SOliver-Rainer Wittmann ::Window* pParentWindow = VCLUnoHelper::GetWindow(xParentWindow); 104ff0525f2SOliver-Rainer Wittmann if ( ! xParentWindow.is() || pParentWindow==NULL) 105ff0525f2SOliver-Rainer Wittmann throw RuntimeException( 106ff0525f2SOliver-Rainer Wittmann A2S("PanelFactory::createUIElement called without ParentWindow"), 107ff0525f2SOliver-Rainer Wittmann NULL); 108ff0525f2SOliver-Rainer Wittmann if ( ! xFrame.is()) 109ff0525f2SOliver-Rainer Wittmann throw RuntimeException( 110ff0525f2SOliver-Rainer Wittmann A2S("PanelFactory::createUIElement called without Frame"), 111ff0525f2SOliver-Rainer Wittmann NULL); 112ff0525f2SOliver-Rainer Wittmann if (pBindings == NULL) 113ff0525f2SOliver-Rainer Wittmann throw RuntimeException( 114ff0525f2SOliver-Rainer Wittmann A2S("PanelFactory::createUIElement called without SfxBindings"), 115ff0525f2SOliver-Rainer Wittmann NULL); 116ff0525f2SOliver-Rainer Wittmann 117ff0525f2SOliver-Rainer Wittmann #define DoesResourceEndWith(s) rsResourceURL.endsWithAsciiL(s,strlen(s)) 118ff0525f2SOliver-Rainer Wittmann if (DoesResourceEndWith("/PagePropertyPanel")) 119ff0525f2SOliver-Rainer Wittmann { 1205cd5f659SOliver-Rainer Wittmann PagePropertyPanel* pPanel = PagePropertyPanel::Create( pParentWindow, pBindings ); 121ff0525f2SOliver-Rainer Wittmann xElement = sfx2::sidebar::SidebarPanelBase::Create( 122ff0525f2SOliver-Rainer Wittmann rsResourceURL, 123ff0525f2SOliver-Rainer Wittmann xFrame, 124ff0525f2SOliver-Rainer Wittmann pPanel, 125ff0525f2SOliver-Rainer Wittmann ui::LayoutSize(-1,-1,-1)); 126ff0525f2SOliver-Rainer Wittmann } 127721f296aSOliver-Rainer Wittmann else if (DoesResourceEndWith("/WrapPropertyPanel")) 128721f296aSOliver-Rainer Wittmann { 129721f296aSOliver-Rainer Wittmann WrapPropertyPanel* pPanel = WrapPropertyPanel::Create( pParentWindow, xFrame, pBindings ); 130721f296aSOliver-Rainer Wittmann xElement = sfx2::sidebar::SidebarPanelBase::Create( 131721f296aSOliver-Rainer Wittmann rsResourceURL, 132721f296aSOliver-Rainer Wittmann xFrame, 133721f296aSOliver-Rainer Wittmann pPanel, 134721f296aSOliver-Rainer Wittmann ui::LayoutSize(-1,-1,-1)); 135721f296aSOliver-Rainer Wittmann } 136*b7d08b69SAndre Fischer else if (DoesResourceEndWith("/NavigatorPanel")) 137*b7d08b69SAndre Fischer { 138*b7d08b69SAndre Fischer Window* pPanel = new SwNavigationPI(pBindings, NULL, pParentWindow); 139*b7d08b69SAndre Fischer xElement = sfx2::sidebar::SidebarPanelBase::Create( 140*b7d08b69SAndre Fischer rsResourceURL, 141*b7d08b69SAndre Fischer xFrame, 142*b7d08b69SAndre Fischer pPanel, 143*b7d08b69SAndre Fischer ui::LayoutSize(0,-1,-1)); 144*b7d08b69SAndre Fischer } 145ff0525f2SOliver-Rainer Wittmann #undef DoesResourceEndWith 146ff0525f2SOliver-Rainer Wittmann 147ff0525f2SOliver-Rainer Wittmann return xElement; 148ff0525f2SOliver-Rainer Wittmann } 149ff0525f2SOliver-Rainer Wittmann 150ff0525f2SOliver-Rainer Wittmann } } // end of namespace sw::sidebar 151ff0525f2SOliver-Rainer Wittmann 152ff0525f2SOliver-Rainer Wittmann // eof 153