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