1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski #include "precompiled_sfx2.hxx"
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski #include "sfx2/sidebar/SidebarPanelBase.hxx"
25*b1cdbd2cSJim Jagielski #include "sfx2/sidebar/Theme.hxx"
26*b1cdbd2cSJim Jagielski #include "sfx2/sidebar/ILayoutableWindow.hxx"
27*b1cdbd2cSJim Jagielski #include "sfx2/sidebar/IContextChangeReceiver.hxx"
28*b1cdbd2cSJim Jagielski #include "sfx2/imagemgr.hxx"
29*b1cdbd2cSJim Jagielski #include <vcl/ctrl.hxx>
30*b1cdbd2cSJim Jagielski #include <comphelper/processfactory.hxx>
31*b1cdbd2cSJim Jagielski 
32*b1cdbd2cSJim Jagielski #include <com/sun/star/ui/ContextChangeEventMultiplexer.hpp>
33*b1cdbd2cSJim Jagielski #include <com/sun/star/ui/UIElementType.hpp>
34*b1cdbd2cSJim Jagielski 
35*b1cdbd2cSJim Jagielski using namespace css;
36*b1cdbd2cSJim Jagielski using namespace cssu;
37*b1cdbd2cSJim Jagielski 
38*b1cdbd2cSJim Jagielski 
39*b1cdbd2cSJim Jagielski namespace sfx2 { namespace sidebar {
40*b1cdbd2cSJim Jagielski 
Create(const::rtl::OUString & rsResourceURL,const cssu::Reference<css::frame::XFrame> & rxFrame,Window * pWindow,const css::ui::LayoutSize & rLayoutSize)41*b1cdbd2cSJim Jagielski Reference<ui::XUIElement> SidebarPanelBase::Create (
42*b1cdbd2cSJim Jagielski     const ::rtl::OUString& rsResourceURL,
43*b1cdbd2cSJim Jagielski     const cssu::Reference<css::frame::XFrame>& rxFrame,
44*b1cdbd2cSJim Jagielski     Window* pWindow,
45*b1cdbd2cSJim Jagielski     const css::ui::LayoutSize& rLayoutSize)
46*b1cdbd2cSJim Jagielski {
47*b1cdbd2cSJim Jagielski     Reference<ui::XUIElement> xUIElement (
48*b1cdbd2cSJim Jagielski         new SidebarPanelBase(
49*b1cdbd2cSJim Jagielski             rsResourceURL,
50*b1cdbd2cSJim Jagielski             rxFrame,
51*b1cdbd2cSJim Jagielski             pWindow,
52*b1cdbd2cSJim Jagielski             rLayoutSize));
53*b1cdbd2cSJim Jagielski     return xUIElement;
54*b1cdbd2cSJim Jagielski }
55*b1cdbd2cSJim Jagielski 
56*b1cdbd2cSJim Jagielski 
57*b1cdbd2cSJim Jagielski 
58*b1cdbd2cSJim Jagielski 
SidebarPanelBase(const::rtl::OUString & rsResourceURL,const cssu::Reference<css::frame::XFrame> & rxFrame,Window * pWindow,const css::ui::LayoutSize & rLayoutSize)59*b1cdbd2cSJim Jagielski SidebarPanelBase::SidebarPanelBase (
60*b1cdbd2cSJim Jagielski     const ::rtl::OUString& rsResourceURL,
61*b1cdbd2cSJim Jagielski     const cssu::Reference<css::frame::XFrame>& rxFrame,
62*b1cdbd2cSJim Jagielski     Window* pWindow,
63*b1cdbd2cSJim Jagielski     const css::ui::LayoutSize& rLayoutSize)
64*b1cdbd2cSJim Jagielski     : SidebarPanelBaseInterfaceBase(m_aMutex),
65*b1cdbd2cSJim Jagielski       mxFrame(rxFrame),
66*b1cdbd2cSJim Jagielski       mpControl(pWindow),
67*b1cdbd2cSJim Jagielski       msResourceURL(rsResourceURL),
68*b1cdbd2cSJim Jagielski       maLayoutSize(rLayoutSize)
69*b1cdbd2cSJim Jagielski {
70*b1cdbd2cSJim Jagielski     if (mxFrame.is())
71*b1cdbd2cSJim Jagielski     {
72*b1cdbd2cSJim Jagielski         cssu::Reference<css::ui::XContextChangeEventMultiplexer> xMultiplexer (
73*b1cdbd2cSJim Jagielski             css::ui::ContextChangeEventMultiplexer::get(
74*b1cdbd2cSJim Jagielski                 ::comphelper::getProcessComponentContext()));
75*b1cdbd2cSJim Jagielski         if (xMultiplexer.is())
76*b1cdbd2cSJim Jagielski             xMultiplexer->addContextChangeEventListener(this, mxFrame->getController());
77*b1cdbd2cSJim Jagielski     }
78*b1cdbd2cSJim Jagielski     if (mpControl != NULL)
79*b1cdbd2cSJim Jagielski     {
80*b1cdbd2cSJim Jagielski         mpControl->SetBackground(Theme::GetWallpaper(Theme::Paint_PanelBackground));
81*b1cdbd2cSJim Jagielski         mpControl->Show();
82*b1cdbd2cSJim Jagielski     }
83*b1cdbd2cSJim Jagielski }
84*b1cdbd2cSJim Jagielski 
85*b1cdbd2cSJim Jagielski 
86*b1cdbd2cSJim Jagielski 
87*b1cdbd2cSJim Jagielski 
~SidebarPanelBase(void)88*b1cdbd2cSJim Jagielski SidebarPanelBase::~SidebarPanelBase (void)
89*b1cdbd2cSJim Jagielski {
90*b1cdbd2cSJim Jagielski }
91*b1cdbd2cSJim Jagielski 
92*b1cdbd2cSJim Jagielski 
93*b1cdbd2cSJim Jagielski 
94*b1cdbd2cSJim Jagielski 
disposing(void)95*b1cdbd2cSJim Jagielski void SAL_CALL SidebarPanelBase::disposing (void)
96*b1cdbd2cSJim Jagielski     throw (cssu::RuntimeException)
97*b1cdbd2cSJim Jagielski {
98*b1cdbd2cSJim Jagielski     if (mpControl != NULL)
99*b1cdbd2cSJim Jagielski     {
100*b1cdbd2cSJim Jagielski         delete mpControl;
101*b1cdbd2cSJim Jagielski         mpControl = NULL;
102*b1cdbd2cSJim Jagielski     }
103*b1cdbd2cSJim Jagielski 
104*b1cdbd2cSJim Jagielski     if (mxFrame.is())
105*b1cdbd2cSJim Jagielski     {
106*b1cdbd2cSJim Jagielski         cssu::Reference<css::ui::XContextChangeEventMultiplexer> xMultiplexer (
107*b1cdbd2cSJim Jagielski             css::ui::ContextChangeEventMultiplexer::get(
108*b1cdbd2cSJim Jagielski                 ::comphelper::getProcessComponentContext()));
109*b1cdbd2cSJim Jagielski         if (xMultiplexer.is())
110*b1cdbd2cSJim Jagielski             xMultiplexer->removeAllContextChangeEventListeners(this);
111*b1cdbd2cSJim Jagielski         mxFrame = NULL;
112*b1cdbd2cSJim Jagielski     }
113*b1cdbd2cSJim Jagielski }
114*b1cdbd2cSJim Jagielski 
115*b1cdbd2cSJim Jagielski 
116*b1cdbd2cSJim Jagielski 
117*b1cdbd2cSJim Jagielski 
SetControl(::Window * pControl)118*b1cdbd2cSJim Jagielski void SidebarPanelBase::SetControl (::Window* pControl)
119*b1cdbd2cSJim Jagielski {
120*b1cdbd2cSJim Jagielski     mpControl = pControl;
121*b1cdbd2cSJim Jagielski }
122*b1cdbd2cSJim Jagielski 
123*b1cdbd2cSJim Jagielski 
124*b1cdbd2cSJim Jagielski 
125*b1cdbd2cSJim Jagielski 
GetControl(void) const126*b1cdbd2cSJim Jagielski ::Window* SidebarPanelBase::GetControl (void) const
127*b1cdbd2cSJim Jagielski {
128*b1cdbd2cSJim Jagielski     return mpControl;
129*b1cdbd2cSJim Jagielski }
130*b1cdbd2cSJim Jagielski 
131*b1cdbd2cSJim Jagielski 
132*b1cdbd2cSJim Jagielski 
133*b1cdbd2cSJim Jagielski 
134*b1cdbd2cSJim Jagielski // XContextChangeEventListener
notifyContextChangeEvent(const ui::ContextChangeEventObject & rEvent)135*b1cdbd2cSJim Jagielski void SAL_CALL SidebarPanelBase::notifyContextChangeEvent (
136*b1cdbd2cSJim Jagielski     const ui::ContextChangeEventObject& rEvent)
137*b1cdbd2cSJim Jagielski     throw (cssu::RuntimeException)
138*b1cdbd2cSJim Jagielski {
139*b1cdbd2cSJim Jagielski     IContextChangeReceiver* pContextChangeReceiver
140*b1cdbd2cSJim Jagielski         = dynamic_cast<IContextChangeReceiver*>(mpControl);
141*b1cdbd2cSJim Jagielski     if (pContextChangeReceiver != NULL)
142*b1cdbd2cSJim Jagielski     {
143*b1cdbd2cSJim Jagielski         const EnumContext aContext(
144*b1cdbd2cSJim Jagielski             EnumContext::GetApplicationEnum(rEvent.ApplicationName),
145*b1cdbd2cSJim Jagielski             EnumContext::GetContextEnum(rEvent.ContextName));
146*b1cdbd2cSJim Jagielski         pContextChangeReceiver->HandleContextChange(aContext);
147*b1cdbd2cSJim Jagielski     }
148*b1cdbd2cSJim Jagielski }
149*b1cdbd2cSJim Jagielski 
150*b1cdbd2cSJim Jagielski 
151*b1cdbd2cSJim Jagielski 
152*b1cdbd2cSJim Jagielski 
disposing(const css::lang::EventObject & rEvent)153*b1cdbd2cSJim Jagielski void SAL_CALL SidebarPanelBase::disposing (
154*b1cdbd2cSJim Jagielski     const css::lang::EventObject& rEvent)
155*b1cdbd2cSJim Jagielski     throw (cssu::RuntimeException)
156*b1cdbd2cSJim Jagielski {
157*b1cdbd2cSJim Jagielski     (void)rEvent;
158*b1cdbd2cSJim Jagielski 
159*b1cdbd2cSJim Jagielski     mxFrame = NULL;
160*b1cdbd2cSJim Jagielski     mpControl = NULL;
161*b1cdbd2cSJim Jagielski }
162*b1cdbd2cSJim Jagielski 
163*b1cdbd2cSJim Jagielski 
164*b1cdbd2cSJim Jagielski 
165*b1cdbd2cSJim Jagielski 
getFrame(void)166*b1cdbd2cSJim Jagielski cssu::Reference<css::frame::XFrame> SAL_CALL SidebarPanelBase::getFrame (void)
167*b1cdbd2cSJim Jagielski     throw(cssu::RuntimeException)
168*b1cdbd2cSJim Jagielski {
169*b1cdbd2cSJim Jagielski     return mxFrame;
170*b1cdbd2cSJim Jagielski }
171*b1cdbd2cSJim Jagielski 
172*b1cdbd2cSJim Jagielski 
173*b1cdbd2cSJim Jagielski 
174*b1cdbd2cSJim Jagielski 
getResourceURL(void)175*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL SidebarPanelBase::getResourceURL (void)
176*b1cdbd2cSJim Jagielski     throw(cssu::RuntimeException)
177*b1cdbd2cSJim Jagielski {
178*b1cdbd2cSJim Jagielski     return msResourceURL;
179*b1cdbd2cSJim Jagielski }
180*b1cdbd2cSJim Jagielski 
181*b1cdbd2cSJim Jagielski 
182*b1cdbd2cSJim Jagielski 
183*b1cdbd2cSJim Jagielski 
getType(void)184*b1cdbd2cSJim Jagielski sal_Int16 SAL_CALL SidebarPanelBase::getType (void)
185*b1cdbd2cSJim Jagielski     throw(cssu::RuntimeException)
186*b1cdbd2cSJim Jagielski {
187*b1cdbd2cSJim Jagielski     return ui::UIElementType::TOOLPANEL;
188*b1cdbd2cSJim Jagielski }
189*b1cdbd2cSJim Jagielski 
190*b1cdbd2cSJim Jagielski 
191*b1cdbd2cSJim Jagielski 
192*b1cdbd2cSJim Jagielski 
getRealInterface(void)193*b1cdbd2cSJim Jagielski Reference<XInterface> SAL_CALL SidebarPanelBase::getRealInterface (void)
194*b1cdbd2cSJim Jagielski     throw(cssu::RuntimeException)
195*b1cdbd2cSJim Jagielski {
196*b1cdbd2cSJim Jagielski     return Reference<XInterface>(static_cast<XWeak*>(this));
197*b1cdbd2cSJim Jagielski }
198*b1cdbd2cSJim Jagielski 
199*b1cdbd2cSJim Jagielski 
200*b1cdbd2cSJim Jagielski 
201*b1cdbd2cSJim Jagielski 
createAccessible(const Reference<accessibility::XAccessible> & rxParentAccessible)202*b1cdbd2cSJim Jagielski Reference<accessibility::XAccessible> SAL_CALL SidebarPanelBase::createAccessible (
203*b1cdbd2cSJim Jagielski     const Reference<accessibility::XAccessible>& rxParentAccessible)
204*b1cdbd2cSJim Jagielski     throw(cssu::RuntimeException)
205*b1cdbd2cSJim Jagielski {
206*b1cdbd2cSJim Jagielski     (void)rxParentAccessible;
207*b1cdbd2cSJim Jagielski 
208*b1cdbd2cSJim Jagielski     // Not yet implemented.
209*b1cdbd2cSJim Jagielski     return NULL;
210*b1cdbd2cSJim Jagielski }
211*b1cdbd2cSJim Jagielski 
212*b1cdbd2cSJim Jagielski 
213*b1cdbd2cSJim Jagielski 
214*b1cdbd2cSJim Jagielski 
getWindow(void)215*b1cdbd2cSJim Jagielski Reference<awt::XWindow> SAL_CALL SidebarPanelBase::getWindow (void)
216*b1cdbd2cSJim Jagielski     throw(cssu::RuntimeException)
217*b1cdbd2cSJim Jagielski {
218*b1cdbd2cSJim Jagielski     if (mpControl != NULL)
219*b1cdbd2cSJim Jagielski         return Reference<awt::XWindow>(
220*b1cdbd2cSJim Jagielski             mpControl->GetComponentInterface(),
221*b1cdbd2cSJim Jagielski             UNO_QUERY);
222*b1cdbd2cSJim Jagielski     else
223*b1cdbd2cSJim Jagielski         return NULL;
224*b1cdbd2cSJim Jagielski }
225*b1cdbd2cSJim Jagielski 
226*b1cdbd2cSJim Jagielski 
227*b1cdbd2cSJim Jagielski 
228*b1cdbd2cSJim Jagielski 
getHeightForWidth(const sal_Int32 nWidth)229*b1cdbd2cSJim Jagielski ui::LayoutSize SAL_CALL SidebarPanelBase::getHeightForWidth (const sal_Int32 nWidth)
230*b1cdbd2cSJim Jagielski     throw(cssu::RuntimeException)
231*b1cdbd2cSJim Jagielski {
232*b1cdbd2cSJim Jagielski     if (maLayoutSize.Minimum >= 0)
233*b1cdbd2cSJim Jagielski         return maLayoutSize;
234*b1cdbd2cSJim Jagielski     else
235*b1cdbd2cSJim Jagielski     {
236*b1cdbd2cSJim Jagielski         ILayoutableWindow* pLayoutableWindow = dynamic_cast<ILayoutableWindow*>(mpControl);
237*b1cdbd2cSJim Jagielski         if (pLayoutableWindow != NULL)
238*b1cdbd2cSJim Jagielski             return pLayoutableWindow->GetHeightForWidth(nWidth);
239*b1cdbd2cSJim Jagielski         else if (mpControl != NULL)
240*b1cdbd2cSJim Jagielski         {
241*b1cdbd2cSJim Jagielski             const sal_Int32 nHeight (mpControl->GetSizePixel().Height());
242*b1cdbd2cSJim Jagielski             return ui::LayoutSize(nHeight,nHeight,nHeight);
243*b1cdbd2cSJim Jagielski         }
244*b1cdbd2cSJim Jagielski     }
245*b1cdbd2cSJim Jagielski 
246*b1cdbd2cSJim Jagielski     return ui::LayoutSize(0,0,0);
247*b1cdbd2cSJim Jagielski }
248*b1cdbd2cSJim Jagielski 
249*b1cdbd2cSJim Jagielski 
250*b1cdbd2cSJim Jagielski 
251*b1cdbd2cSJim Jagielski 
252*b1cdbd2cSJim Jagielski } } // end of namespace sfx2::sidebar
253