xref: /trunk/main/sfx2/source/sidebar/SidebarPanel.cxx (revision 45c5a00162811bd03b87fcb4fe9996782f2b59ec)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 #include "precompiled_sfx2.hxx"
23 
24 #include "SidebarPanel.hxx"
25 
26 #include "Panel.hxx"
27 #include "sfx2/sidebar/Theme.hxx"
28 
29 #include <vos/mutex.hxx>
30 #include <vcl/svapp.hxx>
31 #include <svl/smplhint.hxx>
32 #include <comphelper/componentcontext.hxx>
33 #include <comphelper/processfactory.hxx>
34 #include <com/sun/star/awt/XWindowPeer.hpp>
35 
36 
37 using namespace css;
38 using namespace cssu;
39 
40 namespace sfx2 { namespace sidebar {
41 
42 Reference<css::ui::XSidebarPanel> SidebarPanel::Create (Panel* pPanel)
43 {
44     return Reference<css::ui::XSidebarPanel>(new SidebarPanel(pPanel));
45 }
46 
47 
48 
49 
50 SidebarPanel::SidebarPanel(Panel* pPanel)
51     : SidebarPanelInterfaceBase(m_aMutex),
52       mpPanel(pPanel),
53       mxCanvas()
54 {
55     if (mpPanel != NULL)
56         mpPanel->AddEventListener(LINK(this, SidebarPanel, HandleWindowEvent));
57     else
58     {
59         mpPanel = NULL;
60         dispose();
61     }
62 }
63 
64 
65 
66 
67 SidebarPanel::~SidebarPanel (void)
68 {
69 }
70 
71 
72 
73 
74 void SAL_CALL SidebarPanel::disposing (const css::lang::EventObject& rEventObject)
75 {
76     (void)rEventObject;
77 }
78 
79 
80 
81 
82 void SAL_CALL SidebarPanel::disposing (void)
83 {
84     if (mpPanel != NULL)
85     {
86         mpPanel->RemoveEventListener(LINK(this, SidebarPanel, HandleWindowEvent));
87         mpPanel = NULL;
88     }
89 }
90 
91 
92 
93 
94 cssu::Reference<css::rendering::XCanvas> SAL_CALL SidebarPanel::getCanvas (void)
95 {
96     if ( ! mxCanvas.is())
97     {
98         Sequence<Any> aArg (5);
99 
100         // common: first any is VCL pointer to window (for VCL canvas)
101         aArg[0] = makeAny(reinterpret_cast<sal_Int64>(mpPanel));
102         aArg[1] = Any();
103         aArg[2] = makeAny(::com::sun::star::awt::Rectangle());
104         aArg[3] = makeAny(sal_False);
105         aArg[4] = makeAny(mpPanel->GetComponentInterface());
106 
107         const ::comphelper::ComponentContext aComponentContext (::comphelper::getProcessServiceFactory());
108         mxCanvas = Reference<rendering::XCanvas>(
109             aComponentContext.createComponentWithArguments(
110                 "com.sun.star.rendering.VCLCanvas",
111                 aArg),
112             UNO_QUERY);
113     }
114 
115     return mxCanvas;
116 
117 }
118 
119 
120 
121 
122 awt::Point SAL_CALL SidebarPanel::getPositionOnScreen (void)
123 {
124     awt::Point aAwtPoint;
125 
126     if (mpPanel != NULL)
127     {
128         ::vos::OGuard aGuard (Application::GetSolarMutex());
129 
130         //        mpPanel->GetPosPixel()
131         const Point aLocationOnScreen (mpPanel->OutputToAbsoluteScreenPixel(Point(0,0)));
132 
133         aAwtPoint.X = aLocationOnScreen.X();
134         aAwtPoint.Y = aLocationOnScreen.Y();
135     }
136 
137     return aAwtPoint;
138 }
139 
140 
141 
142 
143 Reference<beans::XPropertySet> SAL_CALL SidebarPanel::getThemeProperties (void)
144 {
145     return Theme::GetPropertySet();
146 }
147 
148 
149 
150 
151 IMPL_LINK(SidebarPanel, HandleWindowEvent, VclWindowEvent*, pEvent)
152 {
153     if (pEvent != NULL)
154     {
155         switch (pEvent->GetId())
156         {
157             case SFX_HINT_DYING:
158                 dispose();
159                 break;
160 
161             default:
162                 break;
163         }
164     }
165 
166     return sal_True;
167 }
168 
169 
170 
171 } } // end of namespace sfx2::sidebar
172