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"
25766ce4d0SZheng Fan #include "paragraph/ParaPropertyPanel.hxx"
268dcb2a10SAndre Fischer #include "area/AreaPropertyPanel.hxx"
278dcb2a10SAndre Fischer #include "graphic/GraphicPropertyPanel.hxx"
288dcb2a10SAndre Fischer #include "line/LinePropertyPanel.hxx"
29ee093554SAndre Fischer #include "possize/PosSizePropertyPanel.hxx"
30f35c6d02SAndre Fischer #include "insert/InsertPropertyPanel.hxx"
31a8eaca58SAndre Fischer #include "GalleryControl.hxx"
32f120fe41SAndre Fischer #include "debug/ColorPanel.hxx"
33f120fe41SAndre Fischer #include "debug/ContextPanel.hxx"
34f120fe41SAndre Fischer #include "debug/NotYetImplementedPanel.hxx"
35f120fe41SAndre Fischer #include "EmptyPanel.hxx"
3695a18594SAndre Fischer #include <sfx2/sidebar/SidebarPanelBase.hxx>
3795a18594SAndre Fischer #include <sfx2/sfxbasecontroller.hxx>
38bd7afb38SAndre Fischer #include <sfx2/templdlg.hxx>
39b9e67834SAndre Fischer #include <toolkit/helper/vclunohelper.hxx>
40b9e67834SAndre Fischer #include <vcl/window.hxx>
41b9e67834SAndre Fischer #include <rtl/ref.hxx>
427a32b0c8SAndre Fischer #include <comphelper/namedvaluecollection.hxx>
4337fee4fdSAndre Fischer #include <com/sun/star/ui/XSidebar.hpp>
4402c50d82SAndre Fischer
457a32b0c8SAndre Fischer #include <boost/bind.hpp>
46b9e67834SAndre Fischer
47b9e67834SAndre Fischer
48b9e67834SAndre Fischer using namespace css;
49b9e67834SAndre Fischer using namespace cssu;
50b9e67834SAndre Fischer using ::rtl::OUString;
51b9e67834SAndre Fischer
52b9e67834SAndre Fischer
53b9e67834SAndre Fischer namespace svx { namespace sidebar {
54b9e67834SAndre Fischer
55b9e67834SAndre Fischer #define A2S(s) ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(s))
56b9e67834SAndre Fischer #define IMPLEMENTATION_NAME "org.apache.openoffice.comp.svx.sidebar.PanelFactory"
57b9e67834SAndre Fischer #define SERVICE_NAME "com.sun.star.ui.UIElementFactory"
58b9e67834SAndre Fischer
59b9e67834SAndre Fischer
getImplementationName(void)60b9e67834SAndre Fischer ::rtl::OUString SAL_CALL PanelFactory::getImplementationName (void)
61b9e67834SAndre Fischer {
62b9e67834SAndre Fischer return A2S(IMPLEMENTATION_NAME);
63b9e67834SAndre Fischer }
64b9e67834SAndre Fischer
65b9e67834SAndre Fischer
66b9e67834SAndre Fischer
67b9e67834SAndre Fischer
createInstance(const uno::Reference<lang::XMultiServiceFactory> & rxFactory)68b9e67834SAndre Fischer cssu::Reference<cssu::XInterface> SAL_CALL PanelFactory::createInstance (
69b9e67834SAndre Fischer const uno::Reference<lang::XMultiServiceFactory>& rxFactory)
70b9e67834SAndre Fischer {
71b9e67834SAndre Fischer (void)rxFactory;
72b9e67834SAndre Fischer
73b9e67834SAndre Fischer ::rtl::Reference<PanelFactory> pPanelFactory (new PanelFactory());
74b9e67834SAndre Fischer cssu::Reference<cssu::XInterface> xService (static_cast<XWeak*>(pPanelFactory.get()), cssu::UNO_QUERY);
75b9e67834SAndre Fischer return xService;
76b9e67834SAndre Fischer }
77b9e67834SAndre Fischer
78b9e67834SAndre Fischer
79b9e67834SAndre Fischer
80b9e67834SAndre Fischer
getSupportedServiceNames(void)81b9e67834SAndre Fischer cssu::Sequence<OUString> SAL_CALL PanelFactory::getSupportedServiceNames (void)
82b9e67834SAndre Fischer {
83b9e67834SAndre Fischer cssu::Sequence<OUString> aServiceNames (1);
84b9e67834SAndre Fischer aServiceNames[0] = A2S(SERVICE_NAME);
85b9e67834SAndre Fischer return aServiceNames;
86b9e67834SAndre Fischer
87b9e67834SAndre Fischer }
88b9e67834SAndre Fischer
89b9e67834SAndre Fischer
90b9e67834SAndre Fischer
91b9e67834SAndre Fischer
PanelFactory(void)92b9e67834SAndre Fischer PanelFactory::PanelFactory (void)
93b9e67834SAndre Fischer : PanelFactoryInterfaceBase(m_aMutex)
94b9e67834SAndre Fischer {
95b9e67834SAndre Fischer }
96b9e67834SAndre Fischer
97b9e67834SAndre Fischer
98b9e67834SAndre Fischer
99b9e67834SAndre Fischer
~PanelFactory(void)100b9e67834SAndre Fischer PanelFactory::~PanelFactory (void)
101b9e67834SAndre Fischer {
102b9e67834SAndre Fischer }
103b9e67834SAndre Fischer
104b9e67834SAndre Fischer
105b9e67834SAndre Fischer
106b9e67834SAndre Fischer
createUIElement(const::rtl::OUString & rsResourceURL,const::cssu::Sequence<css::beans::PropertyValue> & rArguments)107b9e67834SAndre Fischer Reference<ui::XUIElement> SAL_CALL PanelFactory::createUIElement (
108b9e67834SAndre Fischer const ::rtl::OUString& rsResourceURL,
109b9e67834SAndre Fischer const ::cssu::Sequence<css::beans::PropertyValue>& rArguments)
110b9e67834SAndre Fischer throw(
111b9e67834SAndre Fischer container::NoSuchElementException,
112b9e67834SAndre Fischer lang::IllegalArgumentException,
113b9e67834SAndre Fischer RuntimeException)
114b9e67834SAndre Fischer {
1157a32b0c8SAndre Fischer const ::comphelper::NamedValueCollection aArguments (rArguments);
1167a32b0c8SAndre Fischer Reference<frame::XFrame> xFrame (aArguments.getOrDefault("Frame", Reference<frame::XFrame>()));
1177a32b0c8SAndre Fischer Reference<awt::XWindow> xParentWindow (aArguments.getOrDefault("ParentWindow", Reference<awt::XWindow>()));
11837fee4fdSAndre Fischer Reference<ui::XSidebar> xSidebar (aArguments.getOrDefault("Sidebar", Reference<ui::XSidebar>()));
1197a32b0c8SAndre Fischer const sal_uInt64 nBindingsValue (aArguments.getOrDefault("SfxBindings", sal_uInt64(0)));
1207a32b0c8SAndre Fischer SfxBindings* pBindings = reinterpret_cast<SfxBindings*>(nBindingsValue);
121*ae13266dSAndre Fischer ::sfx2::sidebar::EnumContext aContext (
122*ae13266dSAndre Fischer aArguments.getOrDefault("ApplicationName", OUString()),
123*ae13266dSAndre Fischer aArguments.getOrDefault("ContextName", OUString()));
124b9e67834SAndre Fischer
125b9e67834SAndre Fischer ::Window* pParentWindow = VCLUnoHelper::GetWindow(xParentWindow);
126b9e67834SAndre Fischer if ( ! xParentWindow.is() || pParentWindow==NULL)
127b9e67834SAndre Fischer throw RuntimeException(
128b9e67834SAndre Fischer A2S("PanelFactory::createUIElement called without ParentWindow"),
129b9e67834SAndre Fischer NULL);
130b9e67834SAndre Fischer if ( ! xFrame.is())
131b9e67834SAndre Fischer throw RuntimeException(
132b9e67834SAndre Fischer A2S("PanelFactory::createUIElement called without Frame"),
133b9e67834SAndre Fischer NULL);
134b9e67834SAndre Fischer if (pBindings == NULL)
135b9e67834SAndre Fischer throw RuntimeException(
136b9e67834SAndre Fischer A2S("PanelFactory::createUIElement called without SfxBindings"),
137b9e67834SAndre Fischer NULL);
138b9e67834SAndre Fischer
13937fee4fdSAndre Fischer Window* pControl = NULL;
14037fee4fdSAndre Fischer ui::LayoutSize aLayoutSize (-1,-1,-1);
14137fee4fdSAndre Fischer
14202c50d82SAndre Fischer #define DoesResourceEndWith(s) rsResourceURL.endsWithAsciiL(s,strlen(s))
14302c50d82SAndre Fischer if (DoesResourceEndWith("/TextPropertyPanel"))
14495a18594SAndre Fischer {
145*ae13266dSAndre Fischer pControl = TextPropertyPanel::Create(pParentWindow, xFrame, pBindings, aContext);
14695a18594SAndre Fischer }
14737fee4fdSAndre Fischer else if (DoesResourceEndWith("/ParaPropertyPanel"))
148766ce4d0SZheng Fan {
14937fee4fdSAndre Fischer pControl = ParaPropertyPanel::Create(pParentWindow, xFrame, pBindings, xSidebar);
150766ce4d0SZheng Fan }
15102c50d82SAndre Fischer else if (DoesResourceEndWith("/AreaPropertyPanel"))
15266c1fc23SArmin Le Grand {
15337fee4fdSAndre Fischer pControl = AreaPropertyPanel::Create(pParentWindow, xFrame, pBindings);
15466c1fc23SArmin Le Grand }
15502c50d82SAndre Fischer else if (DoesResourceEndWith("/GraphicPropertyPanel"))
1562bdfcea1SArmin Le Grand {
15737fee4fdSAndre Fischer pControl = GraphicPropertyPanel::Create(pParentWindow, xFrame, pBindings);
1582bdfcea1SArmin Le Grand }
15902c50d82SAndre Fischer else if (DoesResourceEndWith("/LinePropertyPanel"))
16058e893aeSArmin Le Grand {
16137fee4fdSAndre Fischer pControl = LinePropertyPanel::Create(pParentWindow, xFrame, pBindings);
16258e893aeSArmin Le Grand }
163ee093554SAndre Fischer else if (DoesResourceEndWith("/PosSizePropertyPanel"))
16435fa8f12SArmin Le Grand {
16537fee4fdSAndre Fischer pControl = PosSizePropertyPanel::Create(pParentWindow, xFrame, pBindings, xSidebar);
16602c50d82SAndre Fischer }
167f35c6d02SAndre Fischer else if (DoesResourceEndWith("/InsertPropertyPanel"))
168f35c6d02SAndre Fischer {
169f35c6d02SAndre Fischer pControl = new InsertPropertyPanel(pParentWindow, xFrame);
170f35c6d02SAndre Fischer }
17102c50d82SAndre Fischer else if (DoesResourceEndWith("/GalleryPanel"))
17202c50d82SAndre Fischer {
17337fee4fdSAndre Fischer pControl = new GalleryControl(pBindings, pParentWindow);
17437fee4fdSAndre Fischer aLayoutSize = ui::LayoutSize(300,-1,400);
17535fa8f12SArmin Le Grand }
176bd7afb38SAndre Fischer else if (DoesResourceEndWith("/StyleListPanel"))
177bd7afb38SAndre Fischer {
17837fee4fdSAndre Fischer pControl = new SfxTemplatePanelControl(pBindings, pParentWindow);
17937fee4fdSAndre Fischer aLayoutSize = ui::LayoutSize(0,-1,-1);
180bd7afb38SAndre Fischer }
1812d839242SAndre Fischer else if (DoesResourceEndWith("/Debug_ColorPanel"))
1822d839242SAndre Fischer {
18337fee4fdSAndre Fischer pControl = new ColorPanel(pParentWindow);
18437fee4fdSAndre Fischer aLayoutSize = ui::LayoutSize(300,-1,400);
1852d839242SAndre Fischer }
186f120fe41SAndre Fischer else if (DoesResourceEndWith("/Debug_ContextPanel"))
187f120fe41SAndre Fischer {
18837fee4fdSAndre Fischer pControl = new ContextPanel(pParentWindow);
18937fee4fdSAndre Fischer aLayoutSize = ui::LayoutSize(45,45,45);
190f120fe41SAndre Fischer }
191f120fe41SAndre Fischer else if (DoesResourceEndWith("/Debug_NotYetImplementedPanel"))
192f120fe41SAndre Fischer {
19337fee4fdSAndre Fischer pControl = new NotYetImplementedPanel(pParentWindow);
19437fee4fdSAndre Fischer aLayoutSize = ui::LayoutSize(20,25,25);
195f120fe41SAndre Fischer }
196f120fe41SAndre Fischer else if (DoesResourceEndWith("/EmptyPanel"))
197f120fe41SAndre Fischer {
19837fee4fdSAndre Fischer pControl = new EmptyPanel(pParentWindow);
19937fee4fdSAndre Fischer aLayoutSize = ui::LayoutSize(20,-1, 50);
200f120fe41SAndre Fischer }
20102c50d82SAndre Fischer #undef DoesResourceEndWith
20266c1fc23SArmin Le Grand
20337fee4fdSAndre Fischer if (pControl != NULL)
20437fee4fdSAndre Fischer {
20537fee4fdSAndre Fischer return sfx2::sidebar::SidebarPanelBase::Create(
20637fee4fdSAndre Fischer rsResourceURL,
20737fee4fdSAndre Fischer xFrame,
20837fee4fdSAndre Fischer pControl,
20937fee4fdSAndre Fischer aLayoutSize);
21037fee4fdSAndre Fischer }
21137fee4fdSAndre Fischer else
21237fee4fdSAndre Fischer return Reference<ui::XUIElement>();
213b9e67834SAndre Fischer }
214b9e67834SAndre Fischer
215b9e67834SAndre Fischer } } // end of namespace svx::sidebar
21635fa8f12SArmin Le Grand
21735fa8f12SArmin Le Grand // eof
218