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_sd.hxx"
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski #include "framework/TaskPanelResource.hxx"
25*b1cdbd2cSJim Jagielski 
26*b1cdbd2cSJim Jagielski #include <vcl/window.hxx>
27*b1cdbd2cSJim Jagielski #include <toolkit/helper/vclunohelper.hxx>
28*b1cdbd2cSJim Jagielski 
29*b1cdbd2cSJim Jagielski 
30*b1cdbd2cSJim Jagielski using namespace css;
31*b1cdbd2cSJim Jagielski using namespace cssu;
32*b1cdbd2cSJim Jagielski using namespace cssdf;
33*b1cdbd2cSJim Jagielski 
34*b1cdbd2cSJim Jagielski 
35*b1cdbd2cSJim Jagielski namespace sd { namespace framework {
36*b1cdbd2cSJim Jagielski 
37*b1cdbd2cSJim Jagielski namespace {
GetWindowForResource(ViewShellBase & rViewShellBase,const cssu::Reference<cssdf::XResourceId> & rxResourceId)38*b1cdbd2cSJim Jagielski     ::Window* GetWindowForResource (
39*b1cdbd2cSJim Jagielski         ViewShellBase& rViewShellBase,
40*b1cdbd2cSJim Jagielski         const cssu::Reference<cssdf::XResourceId>& rxResourceId)
41*b1cdbd2cSJim Jagielski     {
42*b1cdbd2cSJim Jagielski         ::Window* pWindow = NULL;
43*b1cdbd2cSJim Jagielski         if (rxResourceId.is() && rxResourceId->getAnchor().is())
44*b1cdbd2cSJim Jagielski         {
45*b1cdbd2cSJim Jagielski             ::boost::shared_ptr<FrameworkHelper> pFrameworkHelper (FrameworkHelper::Instance(rViewShellBase));
46*b1cdbd2cSJim Jagielski             Reference<awt::XWindow> xWindow (
47*b1cdbd2cSJim Jagielski                 pFrameworkHelper->GetPaneWindow(rxResourceId->getAnchor()->getAnchor()));
48*b1cdbd2cSJim Jagielski             pWindow = VCLUnoHelper::GetWindow(xWindow);
49*b1cdbd2cSJim Jagielski         }
50*b1cdbd2cSJim Jagielski         return pWindow;
51*b1cdbd2cSJim Jagielski     }
52*b1cdbd2cSJim Jagielski }
53*b1cdbd2cSJim Jagielski 
54*b1cdbd2cSJim Jagielski 
55*b1cdbd2cSJim Jagielski 
56*b1cdbd2cSJim Jagielski 
TaskPanelResource(sidebar::SidebarViewShell & rSidebarViewShell,sidebar::PanelId ePanelId,const Reference<XResourceId> & rxResourceId)57*b1cdbd2cSJim Jagielski TaskPanelResource::TaskPanelResource (
58*b1cdbd2cSJim Jagielski     sidebar::SidebarViewShell& rSidebarViewShell,
59*b1cdbd2cSJim Jagielski     sidebar::PanelId ePanelId,
60*b1cdbd2cSJim Jagielski     const Reference<XResourceId>& rxResourceId)
61*b1cdbd2cSJim Jagielski     : TaskPanelResourceInterfaceBase(m_aMutex),
62*b1cdbd2cSJim Jagielski       mxResourceId(rxResourceId),
63*b1cdbd2cSJim Jagielski       mpControl(rSidebarViewShell.CreatePanel(
64*b1cdbd2cSJim Jagielski               GetWindowForResource(rSidebarViewShell.GetViewShellBase(), rxResourceId),
65*b1cdbd2cSJim Jagielski               ePanelId))
66*b1cdbd2cSJim Jagielski {
67*b1cdbd2cSJim Jagielski     if (mpControl.get() != NULL)
68*b1cdbd2cSJim Jagielski     {
69*b1cdbd2cSJim Jagielski         mpControl->Show();
70*b1cdbd2cSJim Jagielski         mpControl->GetParent()->Show();
71*b1cdbd2cSJim Jagielski         mpControl->AddEventListener(LINK(this,TaskPanelResource,WindowEventHandler));
72*b1cdbd2cSJim Jagielski     }
73*b1cdbd2cSJim Jagielski }
74*b1cdbd2cSJim Jagielski 
75*b1cdbd2cSJim Jagielski 
76*b1cdbd2cSJim Jagielski 
77*b1cdbd2cSJim Jagielski 
~TaskPanelResource(void)78*b1cdbd2cSJim Jagielski TaskPanelResource::~TaskPanelResource (void)
79*b1cdbd2cSJim Jagielski {
80*b1cdbd2cSJim Jagielski     mpControl.reset();
81*b1cdbd2cSJim Jagielski }
82*b1cdbd2cSJim Jagielski 
83*b1cdbd2cSJim Jagielski 
84*b1cdbd2cSJim Jagielski 
85*b1cdbd2cSJim Jagielski 
disposing()86*b1cdbd2cSJim Jagielski void SAL_CALL TaskPanelResource::disposing ()
87*b1cdbd2cSJim Jagielski {
88*b1cdbd2cSJim Jagielski     mpControl.reset();
89*b1cdbd2cSJim Jagielski }
90*b1cdbd2cSJim Jagielski 
91*b1cdbd2cSJim Jagielski 
92*b1cdbd2cSJim Jagielski 
93*b1cdbd2cSJim Jagielski 
getResourceId()94*b1cdbd2cSJim Jagielski Reference<XResourceId> SAL_CALL TaskPanelResource::getResourceId ()
95*b1cdbd2cSJim Jagielski     throw (css::uno::RuntimeException)
96*b1cdbd2cSJim Jagielski {
97*b1cdbd2cSJim Jagielski     return mxResourceId;
98*b1cdbd2cSJim Jagielski }
99*b1cdbd2cSJim Jagielski 
100*b1cdbd2cSJim Jagielski 
101*b1cdbd2cSJim Jagielski 
102*b1cdbd2cSJim Jagielski 
isAnchorOnly(void)103*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL TaskPanelResource::isAnchorOnly (void)
104*b1cdbd2cSJim Jagielski     throw (RuntimeException)
105*b1cdbd2cSJim Jagielski {
106*b1cdbd2cSJim Jagielski     return false;
107*b1cdbd2cSJim Jagielski }
108*b1cdbd2cSJim Jagielski 
109*b1cdbd2cSJim Jagielski 
110*b1cdbd2cSJim Jagielski 
111*b1cdbd2cSJim Jagielski 
GetControl(void) const112*b1cdbd2cSJim Jagielski ::Window* TaskPanelResource::GetControl (void) const
113*b1cdbd2cSJim Jagielski {
114*b1cdbd2cSJim Jagielski     return mpControl.get();
115*b1cdbd2cSJim Jagielski }
116*b1cdbd2cSJim Jagielski 
117*b1cdbd2cSJim Jagielski 
118*b1cdbd2cSJim Jagielski 
119*b1cdbd2cSJim Jagielski 
IMPL_LINK(TaskPanelResource,WindowEventHandler,VclWindowEvent *,pEvent)120*b1cdbd2cSJim Jagielski IMPL_LINK(TaskPanelResource,WindowEventHandler,VclWindowEvent*,pEvent)
121*b1cdbd2cSJim Jagielski {
122*b1cdbd2cSJim Jagielski     if (pEvent!=NULL && pEvent->GetId()==SFX_HINT_DYING)
123*b1cdbd2cSJim Jagielski     {
124*b1cdbd2cSJim Jagielski         // Somebody else deleted the window.  Release our reference so
125*b1cdbd2cSJim Jagielski         // that we do not delete it again.
126*b1cdbd2cSJim Jagielski         mpControl.release();
127*b1cdbd2cSJim Jagielski         return sal_True;
128*b1cdbd2cSJim Jagielski     }
129*b1cdbd2cSJim Jagielski     else
130*b1cdbd2cSJim Jagielski         return sal_False;
131*b1cdbd2cSJim Jagielski }
132*b1cdbd2cSJim Jagielski 
133*b1cdbd2cSJim Jagielski } } // end of namespace sd::framework
134