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