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