1b9e67834SAndre Fischer /************************************************************** 2b9e67834SAndre Fischer * 3b9e67834SAndre Fischer * Licensed to the Apache Software Foundation (ASF) under one 4b9e67834SAndre Fischer * or more contributor license agreements. See the NOTICE file 5b9e67834SAndre Fischer * distributed with this work for additional information 6b9e67834SAndre Fischer * regarding copyright ownership. The ASF licenses this file 7b9e67834SAndre Fischer * to you under the Apache License, Version 2.0 (the 8b9e67834SAndre Fischer * "License"); you may not use this file except in compliance 9b9e67834SAndre Fischer * with the License. You may obtain a copy of the License at 10b9e67834SAndre Fischer * 11b9e67834SAndre Fischer * http://www.apache.org/licenses/LICENSE-2.0 12b9e67834SAndre Fischer * 13b9e67834SAndre Fischer * Unless required by applicable law or agreed to in writing, 14b9e67834SAndre Fischer * software distributed under the License is distributed on an 15b9e67834SAndre Fischer * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16b9e67834SAndre Fischer * KIND, either express or implied. See the License for the 17b9e67834SAndre Fischer * specific language governing permissions and limitations 18b9e67834SAndre Fischer * under the License. 19b9e67834SAndre Fischer * 20b9e67834SAndre Fischer *************************************************************/ 21b9e67834SAndre Fischer 22b9e67834SAndre Fischer #include "sidebar/PanelFactory.hxx" 23b9e67834SAndre Fischer 2402c50d82SAndre Fischer #include "text/TextPropertyPanel.hxx" 258dcb2a10SAndre Fischer #include "area/AreaPropertyPanel.hxx" 268dcb2a10SAndre Fischer #include "graphic/GraphicPropertyPanel.hxx" 278dcb2a10SAndre Fischer #include "line/LinePropertyPanel.hxx" 28ee093554SAndre Fischer #include "possize/PosSizePropertyPanel.hxx" 2902c50d82SAndre Fischer #include "gallery/GalleryControl.hxx" 30f120fe41SAndre Fischer #include "debug/ColorPanel.hxx" 31f120fe41SAndre Fischer #include "debug/ContextPanel.hxx" 32f120fe41SAndre Fischer #include "debug/NotYetImplementedPanel.hxx" 33f120fe41SAndre Fischer #include "EmptyPanel.hxx" 3495a18594SAndre Fischer #include <sfx2/sidebar/SidebarPanelBase.hxx> 3595a18594SAndre Fischer #include <sfx2/sfxbasecontroller.hxx> 36b9e67834SAndre Fischer #include <toolkit/helper/vclunohelper.hxx> 37b9e67834SAndre Fischer #include <vcl/window.hxx> 38b9e67834SAndre Fischer #include <rtl/ref.hxx> 397a32b0c8SAndre Fischer #include <comphelper/namedvaluecollection.hxx> 407a32b0c8SAndre Fischer 4102c50d82SAndre Fischer 427a32b0c8SAndre Fischer #include <boost/bind.hpp> 43b9e67834SAndre Fischer 44b9e67834SAndre Fischer 45b9e67834SAndre Fischer using namespace css; 46b9e67834SAndre Fischer using namespace cssu; 47b9e67834SAndre Fischer using ::rtl::OUString; 48b9e67834SAndre Fischer 49b9e67834SAndre Fischer 50b9e67834SAndre Fischer namespace svx { namespace sidebar { 51b9e67834SAndre Fischer 52b9e67834SAndre Fischer #define A2S(s) ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(s)) 53b9e67834SAndre Fischer #define IMPLEMENTATION_NAME "org.apache.openoffice.comp.svx.sidebar.PanelFactory" 54b9e67834SAndre Fischer #define SERVICE_NAME "com.sun.star.ui.UIElementFactory" 55b9e67834SAndre Fischer 56b9e67834SAndre Fischer 57b9e67834SAndre Fischer ::rtl::OUString SAL_CALL PanelFactory::getImplementationName (void) 58b9e67834SAndre Fischer { 59b9e67834SAndre Fischer return A2S(IMPLEMENTATION_NAME); 60b9e67834SAndre Fischer } 61b9e67834SAndre Fischer 62b9e67834SAndre Fischer 63b9e67834SAndre Fischer 64b9e67834SAndre Fischer 65b9e67834SAndre Fischer cssu::Reference<cssu::XInterface> SAL_CALL PanelFactory::createInstance ( 66b9e67834SAndre Fischer const uno::Reference<lang::XMultiServiceFactory>& rxFactory) 67b9e67834SAndre Fischer { 68b9e67834SAndre Fischer (void)rxFactory; 69b9e67834SAndre Fischer 70b9e67834SAndre Fischer ::rtl::Reference<PanelFactory> pPanelFactory (new PanelFactory()); 71b9e67834SAndre Fischer cssu::Reference<cssu::XInterface> xService (static_cast<XWeak*>(pPanelFactory.get()), cssu::UNO_QUERY); 72b9e67834SAndre Fischer return xService; 73b9e67834SAndre Fischer } 74b9e67834SAndre Fischer 75b9e67834SAndre Fischer 76b9e67834SAndre Fischer 77b9e67834SAndre Fischer 78b9e67834SAndre Fischer cssu::Sequence<OUString> SAL_CALL PanelFactory::getSupportedServiceNames (void) 79b9e67834SAndre Fischer { 80b9e67834SAndre Fischer cssu::Sequence<OUString> aServiceNames (1); 81b9e67834SAndre Fischer aServiceNames[0] = A2S(SERVICE_NAME); 82b9e67834SAndre Fischer return aServiceNames; 83b9e67834SAndre Fischer 84b9e67834SAndre Fischer } 85b9e67834SAndre Fischer 86b9e67834SAndre Fischer 87b9e67834SAndre Fischer 88b9e67834SAndre Fischer 89b9e67834SAndre Fischer PanelFactory::PanelFactory (void) 90b9e67834SAndre Fischer : PanelFactoryInterfaceBase(m_aMutex) 91b9e67834SAndre Fischer { 92b9e67834SAndre Fischer } 93b9e67834SAndre Fischer 94b9e67834SAndre Fischer 95b9e67834SAndre Fischer 96b9e67834SAndre Fischer 97b9e67834SAndre Fischer PanelFactory::~PanelFactory (void) 98b9e67834SAndre Fischer { 99b9e67834SAndre Fischer } 100b9e67834SAndre Fischer 101b9e67834SAndre Fischer 102b9e67834SAndre Fischer 103b9e67834SAndre Fischer 104b9e67834SAndre Fischer Reference<ui::XUIElement> SAL_CALL PanelFactory::createUIElement ( 105b9e67834SAndre Fischer const ::rtl::OUString& rsResourceURL, 106b9e67834SAndre Fischer const ::cssu::Sequence<css::beans::PropertyValue>& rArguments) 107b9e67834SAndre Fischer throw( 108b9e67834SAndre Fischer container::NoSuchElementException, 109b9e67834SAndre Fischer lang::IllegalArgumentException, 110b9e67834SAndre Fischer RuntimeException) 111b9e67834SAndre Fischer { 112b9e67834SAndre Fischer Reference<ui::XUIElement> xElement; 113b9e67834SAndre Fischer 1147a32b0c8SAndre Fischer const ::comphelper::NamedValueCollection aArguments (rArguments); 1157a32b0c8SAndre Fischer Reference<frame::XFrame> xFrame (aArguments.getOrDefault("Frame", Reference<frame::XFrame>())); 1167a32b0c8SAndre Fischer Reference<awt::XWindow> xParentWindow (aArguments.getOrDefault("ParentWindow", Reference<awt::XWindow>())); 1177a32b0c8SAndre Fischer const sal_uInt64 nBindingsValue (aArguments.getOrDefault("SfxBindings", sal_uInt64(0))); 1187a32b0c8SAndre Fischer SfxBindings* pBindings = reinterpret_cast<SfxBindings*>(nBindingsValue); 119b9e67834SAndre Fischer 120b9e67834SAndre Fischer ::Window* pParentWindow = VCLUnoHelper::GetWindow(xParentWindow); 121b9e67834SAndre Fischer if ( ! xParentWindow.is() || pParentWindow==NULL) 122b9e67834SAndre Fischer throw RuntimeException( 123b9e67834SAndre Fischer A2S("PanelFactory::createUIElement called without ParentWindow"), 124b9e67834SAndre Fischer NULL); 125b9e67834SAndre Fischer if ( ! xFrame.is()) 126b9e67834SAndre Fischer throw RuntimeException( 127b9e67834SAndre Fischer A2S("PanelFactory::createUIElement called without Frame"), 128b9e67834SAndre Fischer NULL); 129b9e67834SAndre Fischer if (pBindings == NULL) 130b9e67834SAndre Fischer throw RuntimeException( 131b9e67834SAndre Fischer A2S("PanelFactory::createUIElement called without SfxBindings"), 132b9e67834SAndre Fischer NULL); 133b9e67834SAndre Fischer 13402c50d82SAndre Fischer #define DoesResourceEndWith(s) rsResourceURL.endsWithAsciiL(s,strlen(s)) 13502c50d82SAndre Fischer if (DoesResourceEndWith("/TextPropertyPanel")) 13695a18594SAndre Fischer { 13795a18594SAndre Fischer TextPropertyPanel* pPanel = TextPropertyPanel::Create(pParentWindow, xFrame, pBindings); 13895a18594SAndre Fischer xElement = sfx2::sidebar::SidebarPanelBase::Create( 13995a18594SAndre Fischer rsResourceURL, 14095a18594SAndre Fischer xFrame, 1417a32b0c8SAndre Fischer pPanel, 14202c50d82SAndre Fischer ui::LayoutSize(-1,-1,-1)); 14395a18594SAndre Fischer } 14402c50d82SAndre Fischer else if (DoesResourceEndWith("/AreaPropertyPanel")) 14566c1fc23SArmin Le Grand { 14666c1fc23SArmin Le Grand AreaPropertyPanel* pPanel = AreaPropertyPanel::Create(pParentWindow, xFrame, pBindings); 14766c1fc23SArmin Le Grand xElement = sfx2::sidebar::SidebarPanelBase::Create( 14866c1fc23SArmin Le Grand rsResourceURL, 14966c1fc23SArmin Le Grand xFrame, 1505d65efa0SAndre Fischer pPanel, 15102c50d82SAndre Fischer ui::LayoutSize(-1,-1,-1)); 15266c1fc23SArmin Le Grand } 15302c50d82SAndre Fischer else if (DoesResourceEndWith("/GraphicPropertyPanel")) 1542bdfcea1SArmin Le Grand { 1552bdfcea1SArmin Le Grand GraphicPropertyPanel* pPanel = GraphicPropertyPanel::Create(pParentWindow, xFrame, pBindings); 1562bdfcea1SArmin Le Grand xElement = sfx2::sidebar::SidebarPanelBase::Create( 1572bdfcea1SArmin Le Grand rsResourceURL, 1582bdfcea1SArmin Le Grand xFrame, 1592bdfcea1SArmin Le Grand pPanel, 16002c50d82SAndre Fischer ui::LayoutSize(-1,-1,-1)); 1612bdfcea1SArmin Le Grand } 16202c50d82SAndre Fischer else if (DoesResourceEndWith("/LinePropertyPanel")) 16358e893aeSArmin Le Grand { 16458e893aeSArmin Le Grand LinePropertyPanel* pPanel = LinePropertyPanel::Create(pParentWindow, xFrame, pBindings); 16558e893aeSArmin Le Grand xElement = sfx2::sidebar::SidebarPanelBase::Create( 16658e893aeSArmin Le Grand rsResourceURL, 16758e893aeSArmin Le Grand xFrame, 16858e893aeSArmin Le Grand pPanel, 16902c50d82SAndre Fischer ui::LayoutSize(-1,-1,-1)); 17058e893aeSArmin Le Grand } 171ee093554SAndre Fischer else if (DoesResourceEndWith("/PosSizePropertyPanel")) 17235fa8f12SArmin Le Grand { 173ee093554SAndre Fischer PosSizePropertyPanel* pPanel = PosSizePropertyPanel::Create(pParentWindow, xFrame, pBindings); 17435fa8f12SArmin Le Grand xElement = sfx2::sidebar::SidebarPanelBase::Create( 17535fa8f12SArmin Le Grand rsResourceURL, 17635fa8f12SArmin Le Grand xFrame, 17735fa8f12SArmin Le Grand pPanel, 17802c50d82SAndre Fischer ui::LayoutSize(-1,-1,-1)); 17902c50d82SAndre Fischer } 18002c50d82SAndre Fischer else if (DoesResourceEndWith("/GalleryPanel")) 18102c50d82SAndre Fischer { 18202c50d82SAndre Fischer GalleryControl* pGalleryControl = new GalleryControl( 18302c50d82SAndre Fischer pBindings, 18402c50d82SAndre Fischer pParentWindow); 18502c50d82SAndre Fischer xElement = sfx2::sidebar::SidebarPanelBase::Create( 18602c50d82SAndre Fischer rsResourceURL, 18702c50d82SAndre Fischer xFrame, 18802c50d82SAndre Fischer pGalleryControl, 18902c50d82SAndre Fischer ui::LayoutSize(300,-1,400)); 19035fa8f12SArmin Le Grand } 1912d839242SAndre Fischer else if (DoesResourceEndWith("/Debug_ColorPanel")) 1922d839242SAndre Fischer { 193f120fe41SAndre Fischer ColorPanel* pPanel = new ColorPanel(pParentWindow); 1942d839242SAndre Fischer xElement = sfx2::sidebar::SidebarPanelBase::Create( 1952d839242SAndre Fischer rsResourceURL, 1962d839242SAndre Fischer xFrame, 197f120fe41SAndre Fischer pPanel, 1982d839242SAndre Fischer ui::LayoutSize(300,-1,400)); 1992d839242SAndre Fischer } 200f120fe41SAndre Fischer else if (DoesResourceEndWith("/Debug_ContextPanel")) 201f120fe41SAndre Fischer { 202f120fe41SAndre Fischer ContextPanel* pPanel = new ContextPanel(pParentWindow); 203f120fe41SAndre Fischer xElement = sfx2::sidebar::SidebarPanelBase::Create( 204f120fe41SAndre Fischer rsResourceURL, 205f120fe41SAndre Fischer xFrame, 206f120fe41SAndre Fischer pPanel, 207f120fe41SAndre Fischer ui::LayoutSize(45,45,45)); 208f120fe41SAndre Fischer } 209f120fe41SAndre Fischer else if (DoesResourceEndWith("/Debug_NotYetImplementedPanel")) 210f120fe41SAndre Fischer { 211f120fe41SAndre Fischer NotYetImplementedPanel* pPanel = new NotYetImplementedPanel(pParentWindow); 212f120fe41SAndre Fischer xElement = sfx2::sidebar::SidebarPanelBase::Create( 213f120fe41SAndre Fischer rsResourceURL, 214f120fe41SAndre Fischer xFrame, 215f120fe41SAndre Fischer pPanel, 216f120fe41SAndre Fischer ui::LayoutSize(20,25,25)); 217f120fe41SAndre Fischer } 218f120fe41SAndre Fischer else if (DoesResourceEndWith("/EmptyPanel")) 219f120fe41SAndre Fischer { 220f120fe41SAndre Fischer EmptyPanel* pPanel = new EmptyPanel(pParentWindow); 221f120fe41SAndre Fischer xElement = sfx2::sidebar::SidebarPanelBase::Create( 222f120fe41SAndre Fischer rsResourceURL, 223f120fe41SAndre Fischer xFrame, 224f120fe41SAndre Fischer pPanel, 225*a5761a6eSAndre Fischer ui::LayoutSize(20,-1, 50)); 226f120fe41SAndre Fischer } 22702c50d82SAndre Fischer #undef DoesResourceEndWith 22866c1fc23SArmin Le Grand 229b9e67834SAndre Fischer return xElement; 230b9e67834SAndre Fischer } 231b9e67834SAndre Fischer 232b9e67834SAndre Fischer } } // end of namespace svx::sidebar 23335fa8f12SArmin Le Grand 23435fa8f12SArmin Le Grand // eof 235