xref: /AOO41X/main/svx/source/sidebar/PanelFactory.cxx (revision 02c50d825b93d3e4e3bd9073db30bd7615e748eb)
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 
24*02c50d82SAndre Fischer #include "text/TextPropertyPanel.hxx"
25*02c50d82SAndre Fischer #include "geometry/AreaPropertyPanel.hxx"
26*02c50d82SAndre Fischer #include "geometry/GraphicPropertyPanel.hxx"
27*02c50d82SAndre Fischer #include "geometry/LinePropertyPanel.hxx"
28*02c50d82SAndre Fischer #include "geometry/TransformationPropertyPanel.hxx"
29*02c50d82SAndre Fischer #include "gallery/GalleryControl.hxx"
3095a18594SAndre Fischer #include <sfx2/sidebar/SidebarPanelBase.hxx>
3195a18594SAndre Fischer #include <sfx2/sfxbasecontroller.hxx>
32b9e67834SAndre Fischer #include <toolkit/helper/vclunohelper.hxx>
33b9e67834SAndre Fischer #include <vcl/window.hxx>
34b9e67834SAndre Fischer #include <rtl/ref.hxx>
357a32b0c8SAndre Fischer #include <comphelper/namedvaluecollection.hxx>
367a32b0c8SAndre Fischer 
37*02c50d82SAndre Fischer 
387a32b0c8SAndre Fischer #include <boost/bind.hpp>
39b9e67834SAndre Fischer 
40b9e67834SAndre Fischer 
41b9e67834SAndre Fischer using namespace css;
42b9e67834SAndre Fischer using namespace cssu;
43b9e67834SAndre Fischer using ::rtl::OUString;
44b9e67834SAndre Fischer 
45b9e67834SAndre Fischer 
46b9e67834SAndre Fischer namespace svx { namespace sidebar {
47b9e67834SAndre Fischer 
48b9e67834SAndre Fischer #define A2S(s) ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(s))
49b9e67834SAndre Fischer #define IMPLEMENTATION_NAME "org.apache.openoffice.comp.svx.sidebar.PanelFactory"
50b9e67834SAndre Fischer #define SERVICE_NAME "com.sun.star.ui.UIElementFactory"
51b9e67834SAndre Fischer 
52b9e67834SAndre Fischer 
53b9e67834SAndre Fischer ::rtl::OUString SAL_CALL PanelFactory::getImplementationName (void)
54b9e67834SAndre Fischer {
55b9e67834SAndre Fischer     return A2S(IMPLEMENTATION_NAME);
56b9e67834SAndre Fischer }
57b9e67834SAndre Fischer 
58b9e67834SAndre Fischer 
59b9e67834SAndre Fischer 
60b9e67834SAndre Fischer 
61b9e67834SAndre Fischer cssu::Reference<cssu::XInterface> SAL_CALL PanelFactory::createInstance (
62b9e67834SAndre Fischer     const uno::Reference<lang::XMultiServiceFactory>& rxFactory)
63b9e67834SAndre Fischer {
64b9e67834SAndre Fischer     (void)rxFactory;
65b9e67834SAndre Fischer 
66b9e67834SAndre Fischer     ::rtl::Reference<PanelFactory> pPanelFactory (new PanelFactory());
67b9e67834SAndre Fischer     cssu::Reference<cssu::XInterface> xService (static_cast<XWeak*>(pPanelFactory.get()), cssu::UNO_QUERY);
68b9e67834SAndre Fischer     return xService;
69b9e67834SAndre Fischer }
70b9e67834SAndre Fischer 
71b9e67834SAndre Fischer 
72b9e67834SAndre Fischer 
73b9e67834SAndre Fischer 
74b9e67834SAndre Fischer cssu::Sequence<OUString> SAL_CALL PanelFactory::getSupportedServiceNames (void)
75b9e67834SAndre Fischer {
76b9e67834SAndre Fischer     cssu::Sequence<OUString> aServiceNames (1);
77b9e67834SAndre Fischer     aServiceNames[0] = A2S(SERVICE_NAME);
78b9e67834SAndre Fischer     return aServiceNames;
79b9e67834SAndre Fischer 
80b9e67834SAndre Fischer }
81b9e67834SAndre Fischer 
82b9e67834SAndre Fischer 
83b9e67834SAndre Fischer 
84b9e67834SAndre Fischer 
85b9e67834SAndre Fischer PanelFactory::PanelFactory (void)
86b9e67834SAndre Fischer     : PanelFactoryInterfaceBase(m_aMutex)
87b9e67834SAndre Fischer {
88b9e67834SAndre Fischer }
89b9e67834SAndre Fischer 
90b9e67834SAndre Fischer 
91b9e67834SAndre Fischer 
92b9e67834SAndre Fischer 
93b9e67834SAndre Fischer PanelFactory::~PanelFactory (void)
94b9e67834SAndre Fischer {
95b9e67834SAndre Fischer }
96b9e67834SAndre Fischer 
97b9e67834SAndre Fischer 
98b9e67834SAndre Fischer 
99b9e67834SAndre Fischer 
100b9e67834SAndre Fischer Reference<ui::XUIElement> SAL_CALL PanelFactory::createUIElement (
101b9e67834SAndre Fischer     const ::rtl::OUString& rsResourceURL,
102b9e67834SAndre Fischer     const ::cssu::Sequence<css::beans::PropertyValue>& rArguments)
103b9e67834SAndre Fischer     throw(
104b9e67834SAndre Fischer         container::NoSuchElementException,
105b9e67834SAndre Fischer         lang::IllegalArgumentException,
106b9e67834SAndre Fischer         RuntimeException)
107b9e67834SAndre Fischer {
108b9e67834SAndre Fischer     Reference<ui::XUIElement> xElement;
109b9e67834SAndre Fischer 
1107a32b0c8SAndre Fischer     const ::comphelper::NamedValueCollection aArguments (rArguments);
1117a32b0c8SAndre Fischer     Reference<frame::XFrame> xFrame (aArguments.getOrDefault("Frame", Reference<frame::XFrame>()));
1127a32b0c8SAndre Fischer     Reference<awt::XWindow> xParentWindow (aArguments.getOrDefault("ParentWindow", Reference<awt::XWindow>()));
1137a32b0c8SAndre Fischer     const sal_uInt64 nBindingsValue (aArguments.getOrDefault("SfxBindings", sal_uInt64(0)));
1147a32b0c8SAndre Fischer     SfxBindings* pBindings = reinterpret_cast<SfxBindings*>(nBindingsValue);
115b9e67834SAndre Fischer 
116b9e67834SAndre Fischer     ::Window* pParentWindow = VCLUnoHelper::GetWindow(xParentWindow);
117b9e67834SAndre Fischer     if ( ! xParentWindow.is() || pParentWindow==NULL)
118b9e67834SAndre Fischer         throw RuntimeException(
119b9e67834SAndre Fischer             A2S("PanelFactory::createUIElement called without ParentWindow"),
120b9e67834SAndre Fischer             NULL);
121b9e67834SAndre Fischer     if ( ! xFrame.is())
122b9e67834SAndre Fischer         throw RuntimeException(
123b9e67834SAndre Fischer             A2S("PanelFactory::createUIElement called without Frame"),
124b9e67834SAndre Fischer             NULL);
125b9e67834SAndre Fischer     if (pBindings == NULL)
126b9e67834SAndre Fischer         throw RuntimeException(
127b9e67834SAndre Fischer             A2S("PanelFactory::createUIElement called without SfxBindings"),
128b9e67834SAndre Fischer             NULL);
129b9e67834SAndre Fischer 
130*02c50d82SAndre Fischer #define DoesResourceEndWith(s) rsResourceURL.endsWithAsciiL(s,strlen(s))
131*02c50d82SAndre Fischer     if (DoesResourceEndWith("/TextPropertyPanel"))
13295a18594SAndre Fischer     {
13395a18594SAndre Fischer         TextPropertyPanel* pPanel = TextPropertyPanel::Create(pParentWindow, xFrame, pBindings);
13495a18594SAndre Fischer         xElement = sfx2::sidebar::SidebarPanelBase::Create(
13595a18594SAndre Fischer             rsResourceURL,
13695a18594SAndre Fischer             xFrame,
1377a32b0c8SAndre Fischer             pPanel,
138*02c50d82SAndre Fischer             ::boost::bind(&TextPropertyPanel::ShowMenu, pPanel),
139*02c50d82SAndre Fischer             ui::LayoutSize(-1,-1,-1));
14095a18594SAndre Fischer     }
141*02c50d82SAndre Fischer     else if (DoesResourceEndWith("/AreaPropertyPanel"))
14266c1fc23SArmin Le Grand     {
14366c1fc23SArmin Le Grand         AreaPropertyPanel* pPanel = AreaPropertyPanel::Create(pParentWindow, xFrame, pBindings);
14466c1fc23SArmin Le Grand         xElement = sfx2::sidebar::SidebarPanelBase::Create(
14566c1fc23SArmin Le Grand             rsResourceURL,
14666c1fc23SArmin Le Grand             xFrame,
1475d65efa0SAndre Fischer             pPanel,
148*02c50d82SAndre Fischer             ::boost::bind(&AreaPropertyPanel::ShowMenu, pPanel),
149*02c50d82SAndre Fischer             ui::LayoutSize(-1,-1,-1));
15066c1fc23SArmin Le Grand     }
151*02c50d82SAndre Fischer     else if (DoesResourceEndWith("/GraphicPropertyPanel"))
1522bdfcea1SArmin Le Grand     {
1532bdfcea1SArmin Le Grand         GraphicPropertyPanel* pPanel = GraphicPropertyPanel::Create(pParentWindow, xFrame, pBindings);
1542bdfcea1SArmin Le Grand         xElement = sfx2::sidebar::SidebarPanelBase::Create(
1552bdfcea1SArmin Le Grand             rsResourceURL,
1562bdfcea1SArmin Le Grand             xFrame,
1572bdfcea1SArmin Le Grand             pPanel,
158*02c50d82SAndre Fischer             ::boost::function<void(void)>(),
159*02c50d82SAndre Fischer             ui::LayoutSize(-1,-1,-1));
1602bdfcea1SArmin Le Grand     }
161*02c50d82SAndre Fischer     else if (DoesResourceEndWith("/LinePropertyPanel"))
16258e893aeSArmin Le Grand     {
16358e893aeSArmin Le Grand         LinePropertyPanel* pPanel = LinePropertyPanel::Create(pParentWindow, xFrame, pBindings);
16458e893aeSArmin Le Grand         xElement = sfx2::sidebar::SidebarPanelBase::Create(
16558e893aeSArmin Le Grand             rsResourceURL,
16658e893aeSArmin Le Grand             xFrame,
16758e893aeSArmin Le Grand             pPanel,
168*02c50d82SAndre Fischer             ::boost::bind(&LinePropertyPanel::ShowMenu, pPanel),
169*02c50d82SAndre Fischer             ui::LayoutSize(-1,-1,-1));
17058e893aeSArmin Le Grand     }
171*02c50d82SAndre Fischer     else if (DoesResourceEndWith("/TransformationPropertyPanel"))
17235fa8f12SArmin Le Grand     {
1736cdc6e4fSArmin Le Grand         TransformationPropertyPanel* pPanel = TransformationPropertyPanel::Create(pParentWindow, xFrame, pBindings);
17435fa8f12SArmin Le Grand         xElement = sfx2::sidebar::SidebarPanelBase::Create(
17535fa8f12SArmin Le Grand             rsResourceURL,
17635fa8f12SArmin Le Grand             xFrame,
17735fa8f12SArmin Le Grand             pPanel,
178*02c50d82SAndre Fischer             ::boost::bind(&TransformationPropertyPanel::ShowMenu, pPanel),
179*02c50d82SAndre Fischer             ui::LayoutSize(-1,-1,-1));
18035fa8f12SArmin Le Grand     }
181*02c50d82SAndre Fischer     else if (DoesResourceEndWith("/GalleryPanel"))
182*02c50d82SAndre Fischer     {
183*02c50d82SAndre Fischer         GalleryControl* pGalleryControl = new GalleryControl(
184*02c50d82SAndre Fischer             pBindings,
185*02c50d82SAndre Fischer             pParentWindow);
186*02c50d82SAndre Fischer         xElement = sfx2::sidebar::SidebarPanelBase::Create(
187*02c50d82SAndre Fischer             rsResourceURL,
188*02c50d82SAndre Fischer             xFrame,
189*02c50d82SAndre Fischer             pGalleryControl,
190*02c50d82SAndre Fischer             ::boost::function<void(void)>(),
191*02c50d82SAndre Fischer             ui::LayoutSize(300,-1,400));
192*02c50d82SAndre Fischer     }
193*02c50d82SAndre Fischer #undef DoesResourceEndWith
19466c1fc23SArmin Le Grand 
195b9e67834SAndre Fischer     return xElement;
196b9e67834SAndre Fischer }
197b9e67834SAndre Fischer 
198b9e67834SAndre Fischer } } // end of namespace svx::sidebar
19935fa8f12SArmin Le Grand 
20035fa8f12SArmin Le Grand // eof
201