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