xref: /aoo4110/main/sfx2/source/sidebar/Panel.cxx (revision b1cdbd2c)
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 "Panel.hxx"
25*b1cdbd2cSJim Jagielski #include "PanelTitleBar.hxx"
26*b1cdbd2cSJim Jagielski #include "PanelDescriptor.hxx"
27*b1cdbd2cSJim Jagielski #include "sfx2/sidebar/Theme.hxx"
28*b1cdbd2cSJim Jagielski #include "Paint.hxx"
29*b1cdbd2cSJim Jagielski #include "ResourceManager.hxx"
30*b1cdbd2cSJim Jagielski 
31*b1cdbd2cSJim Jagielski #ifdef DEBUG
32*b1cdbd2cSJim Jagielski #include "sfx2/sidebar/Tools.hxx"
33*b1cdbd2cSJim Jagielski #include "Deck.hxx"
34*b1cdbd2cSJim Jagielski #endif
35*b1cdbd2cSJim Jagielski 
36*b1cdbd2cSJim Jagielski #include <tools/svborder.hxx>
37*b1cdbd2cSJim Jagielski #include <toolkit/helper/vclunohelper.hxx>
38*b1cdbd2cSJim Jagielski 
39*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/XWindowPeer.hpp>
40*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/PosSize.hpp>
41*b1cdbd2cSJim Jagielski #include <com/sun/star/ui/XToolPanel.hpp>
42*b1cdbd2cSJim Jagielski 
43*b1cdbd2cSJim Jagielski #include <boost/bind.hpp>
44*b1cdbd2cSJim Jagielski 
45*b1cdbd2cSJim Jagielski 
46*b1cdbd2cSJim Jagielski using namespace css;
47*b1cdbd2cSJim Jagielski using namespace cssu;
48*b1cdbd2cSJim Jagielski 
49*b1cdbd2cSJim Jagielski 
50*b1cdbd2cSJim Jagielski 
51*b1cdbd2cSJim Jagielski namespace sfx2 { namespace sidebar {
52*b1cdbd2cSJim Jagielski 
Panel(const PanelDescriptor & rPanelDescriptor,Window * pParentWindow,const bool bIsInitiallyExpanded,const::boost::function<void (void)> & rDeckLayoutTrigger,const::boost::function<Context (void)> & rContextAccess)53*b1cdbd2cSJim Jagielski Panel::Panel (
54*b1cdbd2cSJim Jagielski     const PanelDescriptor& rPanelDescriptor,
55*b1cdbd2cSJim Jagielski     Window* pParentWindow,
56*b1cdbd2cSJim Jagielski     const bool bIsInitiallyExpanded,
57*b1cdbd2cSJim Jagielski     const ::boost::function<void(void)>& rDeckLayoutTrigger,
58*b1cdbd2cSJim Jagielski     const ::boost::function<Context(void)>& rContextAccess)
59*b1cdbd2cSJim Jagielski     : Window(pParentWindow),
60*b1cdbd2cSJim Jagielski       msPanelId(rPanelDescriptor.msId),
61*b1cdbd2cSJim Jagielski       mpTitleBar(new PanelTitleBar(
62*b1cdbd2cSJim Jagielski               rPanelDescriptor.msTitle,
63*b1cdbd2cSJim Jagielski               pParentWindow,
64*b1cdbd2cSJim Jagielski               this)),
65*b1cdbd2cSJim Jagielski       mbIsTitleBarOptional(rPanelDescriptor.mbIsTitleBarOptional),
66*b1cdbd2cSJim Jagielski       mxElement(),
67*b1cdbd2cSJim Jagielski       mxPanelComponent(),
68*b1cdbd2cSJim Jagielski       mbIsExpanded(bIsInitiallyExpanded),
69*b1cdbd2cSJim Jagielski       maDeckLayoutTrigger(rDeckLayoutTrigger),
70*b1cdbd2cSJim Jagielski       maContextAccess(rContextAccess)
71*b1cdbd2cSJim Jagielski {
72*b1cdbd2cSJim Jagielski     SetBackground(Theme::GetPaint(Theme::Paint_PanelBackground).GetWallpaper());
73*b1cdbd2cSJim Jagielski 
74*b1cdbd2cSJim Jagielski #ifdef DEBUG
75*b1cdbd2cSJim Jagielski     SetText(A2S("Panel"));
76*b1cdbd2cSJim Jagielski #endif
77*b1cdbd2cSJim Jagielski }
78*b1cdbd2cSJim Jagielski 
79*b1cdbd2cSJim Jagielski 
80*b1cdbd2cSJim Jagielski 
81*b1cdbd2cSJim Jagielski 
~Panel(void)82*b1cdbd2cSJim Jagielski Panel::~Panel (void)
83*b1cdbd2cSJim Jagielski {
84*b1cdbd2cSJim Jagielski     Dispose();
85*b1cdbd2cSJim Jagielski }
86*b1cdbd2cSJim Jagielski 
87*b1cdbd2cSJim Jagielski 
88*b1cdbd2cSJim Jagielski 
89*b1cdbd2cSJim Jagielski 
Dispose(void)90*b1cdbd2cSJim Jagielski void Panel::Dispose (void)
91*b1cdbd2cSJim Jagielski {
92*b1cdbd2cSJim Jagielski     mxPanelComponent = NULL;
93*b1cdbd2cSJim Jagielski 
94*b1cdbd2cSJim Jagielski     {
95*b1cdbd2cSJim Jagielski         Reference<lang::XComponent> xComponent (mxElement, UNO_QUERY);
96*b1cdbd2cSJim Jagielski         mxElement = NULL;
97*b1cdbd2cSJim Jagielski         if (xComponent.is())
98*b1cdbd2cSJim Jagielski             xComponent->dispose();
99*b1cdbd2cSJim Jagielski     }
100*b1cdbd2cSJim Jagielski 
101*b1cdbd2cSJim Jagielski     {
102*b1cdbd2cSJim Jagielski         Reference<lang::XComponent> xComponent (GetElementWindow(), UNO_QUERY);
103*b1cdbd2cSJim Jagielski         if (xComponent.is())
104*b1cdbd2cSJim Jagielski             xComponent->dispose();
105*b1cdbd2cSJim Jagielski     }
106*b1cdbd2cSJim Jagielski 
107*b1cdbd2cSJim Jagielski     mpTitleBar.reset();
108*b1cdbd2cSJim Jagielski }
109*b1cdbd2cSJim Jagielski 
110*b1cdbd2cSJim Jagielski 
111*b1cdbd2cSJim Jagielski 
112*b1cdbd2cSJim Jagielski 
GetTitleBar(void) const113*b1cdbd2cSJim Jagielski PanelTitleBar* Panel::GetTitleBar (void) const
114*b1cdbd2cSJim Jagielski {
115*b1cdbd2cSJim Jagielski     return mpTitleBar.get();
116*b1cdbd2cSJim Jagielski }
117*b1cdbd2cSJim Jagielski 
118*b1cdbd2cSJim Jagielski 
119*b1cdbd2cSJim Jagielski 
120*b1cdbd2cSJim Jagielski 
IsTitleBarOptional(void) const121*b1cdbd2cSJim Jagielski bool Panel::IsTitleBarOptional (void) const
122*b1cdbd2cSJim Jagielski {
123*b1cdbd2cSJim Jagielski     return mbIsTitleBarOptional;
124*b1cdbd2cSJim Jagielski }
125*b1cdbd2cSJim Jagielski 
126*b1cdbd2cSJim Jagielski 
127*b1cdbd2cSJim Jagielski 
128*b1cdbd2cSJim Jagielski 
SetUIElement(const Reference<ui::XUIElement> & rxElement)129*b1cdbd2cSJim Jagielski void Panel::SetUIElement (const Reference<ui::XUIElement>& rxElement)
130*b1cdbd2cSJim Jagielski {
131*b1cdbd2cSJim Jagielski     mxElement = rxElement;
132*b1cdbd2cSJim Jagielski     if (mxElement.is())
133*b1cdbd2cSJim Jagielski     {
134*b1cdbd2cSJim Jagielski         mxPanelComponent.set(mxElement->getRealInterface(), UNO_QUERY);
135*b1cdbd2cSJim Jagielski     }
136*b1cdbd2cSJim Jagielski }
137*b1cdbd2cSJim Jagielski 
138*b1cdbd2cSJim Jagielski 
139*b1cdbd2cSJim Jagielski 
140*b1cdbd2cSJim Jagielski 
SetExpanded(const bool bIsExpanded)141*b1cdbd2cSJim Jagielski void Panel::SetExpanded (const bool bIsExpanded)
142*b1cdbd2cSJim Jagielski {
143*b1cdbd2cSJim Jagielski     if (mbIsExpanded != bIsExpanded)
144*b1cdbd2cSJim Jagielski     {
145*b1cdbd2cSJim Jagielski         mbIsExpanded = bIsExpanded;
146*b1cdbd2cSJim Jagielski         maDeckLayoutTrigger();
147*b1cdbd2cSJim Jagielski 
148*b1cdbd2cSJim Jagielski         if (maContextAccess)
149*b1cdbd2cSJim Jagielski             ResourceManager::Instance().StorePanelExpansionState(
150*b1cdbd2cSJim Jagielski                 msPanelId,
151*b1cdbd2cSJim Jagielski                 bIsExpanded,
152*b1cdbd2cSJim Jagielski                 maContextAccess());
153*b1cdbd2cSJim Jagielski     }
154*b1cdbd2cSJim Jagielski }
155*b1cdbd2cSJim Jagielski 
156*b1cdbd2cSJim Jagielski 
157*b1cdbd2cSJim Jagielski 
158*b1cdbd2cSJim Jagielski 
IsExpanded(void) const159*b1cdbd2cSJim Jagielski bool Panel::IsExpanded (void) const
160*b1cdbd2cSJim Jagielski {
161*b1cdbd2cSJim Jagielski     return mbIsExpanded;
162*b1cdbd2cSJim Jagielski }
163*b1cdbd2cSJim Jagielski 
164*b1cdbd2cSJim Jagielski 
165*b1cdbd2cSJim Jagielski 
166*b1cdbd2cSJim Jagielski 
HasIdPredicate(const::rtl::OUString & rsId) const167*b1cdbd2cSJim Jagielski bool Panel::HasIdPredicate (const ::rtl::OUString& rsId) const
168*b1cdbd2cSJim Jagielski {
169*b1cdbd2cSJim Jagielski     if (this == NULL)
170*b1cdbd2cSJim Jagielski         return false;
171*b1cdbd2cSJim Jagielski     else
172*b1cdbd2cSJim Jagielski         return msPanelId.equals(rsId);
173*b1cdbd2cSJim Jagielski }
174*b1cdbd2cSJim Jagielski 
175*b1cdbd2cSJim Jagielski 
176*b1cdbd2cSJim Jagielski 
177*b1cdbd2cSJim Jagielski 
GetId(void) const178*b1cdbd2cSJim Jagielski const ::rtl::OUString& Panel::GetId (void) const
179*b1cdbd2cSJim Jagielski {
180*b1cdbd2cSJim Jagielski     return msPanelId;
181*b1cdbd2cSJim Jagielski }
182*b1cdbd2cSJim Jagielski 
183*b1cdbd2cSJim Jagielski 
184*b1cdbd2cSJim Jagielski 
185*b1cdbd2cSJim Jagielski 
Paint(const Rectangle & rUpdateArea)186*b1cdbd2cSJim Jagielski void Panel::Paint (const Rectangle& rUpdateArea)
187*b1cdbd2cSJim Jagielski {
188*b1cdbd2cSJim Jagielski     Window::Paint(rUpdateArea);
189*b1cdbd2cSJim Jagielski }
190*b1cdbd2cSJim Jagielski 
191*b1cdbd2cSJim Jagielski 
192*b1cdbd2cSJim Jagielski 
193*b1cdbd2cSJim Jagielski 
Resize(void)194*b1cdbd2cSJim Jagielski void Panel::Resize (void)
195*b1cdbd2cSJim Jagielski {
196*b1cdbd2cSJim Jagielski     Window::Resize();
197*b1cdbd2cSJim Jagielski 
198*b1cdbd2cSJim Jagielski     // Forward new size to window of XUIElement.
199*b1cdbd2cSJim Jagielski     Reference<awt::XWindow> xElementWindow (GetElementWindow());
200*b1cdbd2cSJim Jagielski     if (xElementWindow.is())
201*b1cdbd2cSJim Jagielski     {
202*b1cdbd2cSJim Jagielski         const Size aSize (GetSizePixel());
203*b1cdbd2cSJim Jagielski         xElementWindow->setPosSize(
204*b1cdbd2cSJim Jagielski             0,
205*b1cdbd2cSJim Jagielski             0,
206*b1cdbd2cSJim Jagielski             aSize.Width(),
207*b1cdbd2cSJim Jagielski             aSize.Height(),
208*b1cdbd2cSJim Jagielski             awt::PosSize::POSSIZE);
209*b1cdbd2cSJim Jagielski     }
210*b1cdbd2cSJim Jagielski }
211*b1cdbd2cSJim Jagielski 
212*b1cdbd2cSJim Jagielski 
213*b1cdbd2cSJim Jagielski 
214*b1cdbd2cSJim Jagielski 
Activate(void)215*b1cdbd2cSJim Jagielski void Panel::Activate (void)
216*b1cdbd2cSJim Jagielski {
217*b1cdbd2cSJim Jagielski     Window::Activate();
218*b1cdbd2cSJim Jagielski }
219*b1cdbd2cSJim Jagielski 
220*b1cdbd2cSJim Jagielski 
221*b1cdbd2cSJim Jagielski 
222*b1cdbd2cSJim Jagielski 
223*b1cdbd2cSJim Jagielski 
DataChanged(const DataChangedEvent & rEvent)224*b1cdbd2cSJim Jagielski void Panel::DataChanged (const DataChangedEvent& rEvent)
225*b1cdbd2cSJim Jagielski {
226*b1cdbd2cSJim Jagielski     (void)rEvent;
227*b1cdbd2cSJim Jagielski     SetBackground(Theme::GetPaint(Theme::Paint_PanelBackground).GetWallpaper());
228*b1cdbd2cSJim Jagielski }
229*b1cdbd2cSJim Jagielski 
230*b1cdbd2cSJim Jagielski 
231*b1cdbd2cSJim Jagielski 
232*b1cdbd2cSJim Jagielski 
GetPanelComponent(void) const233*b1cdbd2cSJim Jagielski Reference<ui::XSidebarPanel> Panel::GetPanelComponent (void) const
234*b1cdbd2cSJim Jagielski {
235*b1cdbd2cSJim Jagielski     return mxPanelComponent;
236*b1cdbd2cSJim Jagielski }
237*b1cdbd2cSJim Jagielski 
238*b1cdbd2cSJim Jagielski 
239*b1cdbd2cSJim Jagielski 
240*b1cdbd2cSJim Jagielski 
PrintWindowTree(void)241*b1cdbd2cSJim Jagielski void Panel::PrintWindowTree (void)
242*b1cdbd2cSJim Jagielski {
243*b1cdbd2cSJim Jagielski #ifdef DEBUG
244*b1cdbd2cSJim Jagielski     Window* pElementWindow = VCLUnoHelper::GetWindow(GetElementWindow());
245*b1cdbd2cSJim Jagielski     if (pElementWindow != NULL)
246*b1cdbd2cSJim Jagielski     {
247*b1cdbd2cSJim Jagielski         OSL_TRACE("panel parent is %x", pElementWindow->GetParent());
248*b1cdbd2cSJim Jagielski         Deck::PrintWindowSubTree(pElementWindow, 2);
249*b1cdbd2cSJim Jagielski     }
250*b1cdbd2cSJim Jagielski     else
251*b1cdbd2cSJim Jagielski         OSL_TRACE("    panel is empty");
252*b1cdbd2cSJim Jagielski #endif
253*b1cdbd2cSJim Jagielski }
254*b1cdbd2cSJim Jagielski 
255*b1cdbd2cSJim Jagielski 
256*b1cdbd2cSJim Jagielski 
257*b1cdbd2cSJim Jagielski 
GetElementWindow(void)258*b1cdbd2cSJim Jagielski Reference<awt::XWindow> Panel::GetElementWindow (void)
259*b1cdbd2cSJim Jagielski {
260*b1cdbd2cSJim Jagielski     if (mxElement.is())
261*b1cdbd2cSJim Jagielski     {
262*b1cdbd2cSJim Jagielski         Reference<ui::XToolPanel> xToolPanel(mxElement->getRealInterface(), UNO_QUERY);
263*b1cdbd2cSJim Jagielski         if (xToolPanel.is())
264*b1cdbd2cSJim Jagielski             return xToolPanel->getWindow();
265*b1cdbd2cSJim Jagielski     }
266*b1cdbd2cSJim Jagielski 
267*b1cdbd2cSJim Jagielski     return NULL;
268*b1cdbd2cSJim Jagielski }
269*b1cdbd2cSJim Jagielski 
270*b1cdbd2cSJim Jagielski 
271*b1cdbd2cSJim Jagielski } } // end of namespace sfx2::sidebar
272