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 "precompiled_sfx2.hxx"
23b9e67834SAndre Fischer
24b9e67834SAndre Fischer #include "SidebarPanel.hxx"
25b9e67834SAndre Fischer
26b9e67834SAndre Fischer #include "Panel.hxx"
27b9e67834SAndre Fischer #include "sfx2/sidebar/Theme.hxx"
28b9e67834SAndre Fischer
29b9e67834SAndre Fischer #include <vos/mutex.hxx>
30b9e67834SAndre Fischer #include <vcl/svapp.hxx>
31*95a18594SAndre Fischer #include <svl/smplhint.hxx>
32b9e67834SAndre Fischer #include <comphelper/componentcontext.hxx>
33*95a18594SAndre Fischer #include <comphelper/processfactory.hxx>
34*95a18594SAndre Fischer #include <com/sun/star/awt/XWindowPeer.hpp>
35b9e67834SAndre Fischer
36b9e67834SAndre Fischer
37b9e67834SAndre Fischer using namespace css;
38b9e67834SAndre Fischer using namespace cssu;
39b9e67834SAndre Fischer
40b9e67834SAndre Fischer namespace sfx2 { namespace sidebar {
41b9e67834SAndre Fischer
Create(Panel * pPanel)42b9e67834SAndre Fischer Reference<css::ui::XSidebarPanel> SidebarPanel::Create (Panel* pPanel)
43b9e67834SAndre Fischer {
44b9e67834SAndre Fischer return Reference<css::ui::XSidebarPanel>(new SidebarPanel(pPanel));
45b9e67834SAndre Fischer }
46b9e67834SAndre Fischer
47b9e67834SAndre Fischer
48b9e67834SAndre Fischer
49b9e67834SAndre Fischer
SidebarPanel(Panel * pPanel)50b9e67834SAndre Fischer SidebarPanel::SidebarPanel(Panel* pPanel)
51b9e67834SAndre Fischer : SidebarPanelInterfaceBase(m_aMutex),
52b9e67834SAndre Fischer mpPanel(pPanel),
53b9e67834SAndre Fischer mxCanvas()
54b9e67834SAndre Fischer {
55b9e67834SAndre Fischer if (mpPanel != NULL)
56b9e67834SAndre Fischer mpPanel->AddEventListener(LINK(this, SidebarPanel, HandleWindowEvent));
57b9e67834SAndre Fischer else
58b9e67834SAndre Fischer {
59b9e67834SAndre Fischer mpPanel = NULL;
60b9e67834SAndre Fischer dispose();
61b9e67834SAndre Fischer }
62b9e67834SAndre Fischer }
63b9e67834SAndre Fischer
64b9e67834SAndre Fischer
65b9e67834SAndre Fischer
66b9e67834SAndre Fischer
~SidebarPanel(void)67b9e67834SAndre Fischer SidebarPanel::~SidebarPanel (void)
68b9e67834SAndre Fischer {
69b9e67834SAndre Fischer }
70b9e67834SAndre Fischer
71b9e67834SAndre Fischer
72b9e67834SAndre Fischer
73b9e67834SAndre Fischer
disposing(const css::lang::EventObject & rEventObject)74b9e67834SAndre Fischer void SAL_CALL SidebarPanel::disposing (const css::lang::EventObject& rEventObject)
75b9e67834SAndre Fischer throw(cssu::RuntimeException)
76b9e67834SAndre Fischer {
77*95a18594SAndre Fischer (void)rEventObject;
78b9e67834SAndre Fischer }
79b9e67834SAndre Fischer
80b9e67834SAndre Fischer
81b9e67834SAndre Fischer
82b9e67834SAndre Fischer
disposing(void)83b9e67834SAndre Fischer void SAL_CALL SidebarPanel::disposing (void)
84b9e67834SAndre Fischer {
85b9e67834SAndre Fischer if (mpPanel != NULL)
86b9e67834SAndre Fischer {
87b9e67834SAndre Fischer mpPanel->RemoveEventListener(LINK(this, SidebarPanel, HandleWindowEvent));
88b9e67834SAndre Fischer mpPanel = NULL;
89b9e67834SAndre Fischer }
90b9e67834SAndre Fischer }
91b9e67834SAndre Fischer
92b9e67834SAndre Fischer
93b9e67834SAndre Fischer
94b9e67834SAndre Fischer
getCanvas(void)95b9e67834SAndre Fischer cssu::Reference<css::rendering::XCanvas> SAL_CALL SidebarPanel::getCanvas (void)
96b9e67834SAndre Fischer throw (cssu::RuntimeException)
97b9e67834SAndre Fischer {
98b9e67834SAndre Fischer if ( ! mxCanvas.is())
99b9e67834SAndre Fischer {
100b9e67834SAndre Fischer Sequence<Any> aArg (5);
101b9e67834SAndre Fischer
102b9e67834SAndre Fischer // common: first any is VCL pointer to window (for VCL canvas)
103b9e67834SAndre Fischer aArg[0] = makeAny(reinterpret_cast<sal_Int64>(mpPanel));
104b9e67834SAndre Fischer aArg[1] = Any();
105b9e67834SAndre Fischer aArg[2] = makeAny(::com::sun::star::awt::Rectangle());
106b9e67834SAndre Fischer aArg[3] = makeAny(sal_False);
107b9e67834SAndre Fischer aArg[4] = makeAny(mpPanel->GetComponentInterface());
108b9e67834SAndre Fischer
109b9e67834SAndre Fischer const ::comphelper::ComponentContext aComponentContext (::comphelper::getProcessServiceFactory());
110b9e67834SAndre Fischer mxCanvas = Reference<rendering::XCanvas>(
111b9e67834SAndre Fischer aComponentContext.createComponentWithArguments(
112b9e67834SAndre Fischer "com.sun.star.rendering.VCLCanvas",
113b9e67834SAndre Fischer aArg),
114b9e67834SAndre Fischer UNO_QUERY);
115b9e67834SAndre Fischer }
116b9e67834SAndre Fischer
117b9e67834SAndre Fischer return mxCanvas;
118b9e67834SAndre Fischer
119b9e67834SAndre Fischer }
120b9e67834SAndre Fischer
121b9e67834SAndre Fischer
122b9e67834SAndre Fischer
123b9e67834SAndre Fischer
getPositionOnScreen(void)124b9e67834SAndre Fischer awt::Point SAL_CALL SidebarPanel::getPositionOnScreen (void)
125b9e67834SAndre Fischer throw (cssu::RuntimeException)
126b9e67834SAndre Fischer {
127b9e67834SAndre Fischer awt::Point aAwtPoint;
128b9e67834SAndre Fischer
129b9e67834SAndre Fischer if (mpPanel != NULL)
130b9e67834SAndre Fischer {
131b9e67834SAndre Fischer ::vos::OGuard aGuard (Application::GetSolarMutex());
132b9e67834SAndre Fischer
133b9e67834SAndre Fischer // mpPanel->GetPosPixel()
134b9e67834SAndre Fischer const Point aLocationOnScreen (mpPanel->OutputToAbsoluteScreenPixel(Point(0,0)));
135b9e67834SAndre Fischer
136b9e67834SAndre Fischer aAwtPoint.X = aLocationOnScreen.X();
137b9e67834SAndre Fischer aAwtPoint.Y = aLocationOnScreen.Y();
138b9e67834SAndre Fischer }
139b9e67834SAndre Fischer
140b9e67834SAndre Fischer return aAwtPoint;
141b9e67834SAndre Fischer }
142b9e67834SAndre Fischer
143b9e67834SAndre Fischer
144b9e67834SAndre Fischer
145b9e67834SAndre Fischer
getThemeProperties(void)146b9e67834SAndre Fischer Reference<beans::XPropertySet> SAL_CALL SidebarPanel::getThemeProperties (void)
147b9e67834SAndre Fischer throw (RuntimeException)
148b9e67834SAndre Fischer {
149b9e67834SAndre Fischer return Theme::GetPropertySet();
150b9e67834SAndre Fischer }
151b9e67834SAndre Fischer
152b9e67834SAndre Fischer
153b9e67834SAndre Fischer
154b9e67834SAndre Fischer
IMPL_LINK(SidebarPanel,HandleWindowEvent,VclWindowEvent *,pEvent)155b9e67834SAndre Fischer IMPL_LINK(SidebarPanel, HandleWindowEvent, VclWindowEvent*, pEvent)
156b9e67834SAndre Fischer {
157b9e67834SAndre Fischer if (pEvent != NULL)
158b9e67834SAndre Fischer {
159b9e67834SAndre Fischer switch (pEvent->GetId())
160b9e67834SAndre Fischer {
161b9e67834SAndre Fischer case SFX_HINT_DYING:
162b9e67834SAndre Fischer dispose();
163b9e67834SAndre Fischer break;
164b9e67834SAndre Fischer
165b9e67834SAndre Fischer default:
166b9e67834SAndre Fischer break;
167b9e67834SAndre Fischer }
168b9e67834SAndre Fischer }
169b9e67834SAndre Fischer
170b9e67834SAndre Fischer return sal_True;
171b9e67834SAndre Fischer }
172b9e67834SAndre Fischer
173b9e67834SAndre Fischer
174b9e67834SAndre Fischer
175b9e67834SAndre Fischer } } // end of namespace sfx2::sidebar
176