xref: /aoo41x/main/sfx2/source/sidebar/Panel.cxx (revision ff12d537)
122de8995SAndre Fischer /**************************************************************
222de8995SAndre Fischer  *
322de8995SAndre Fischer  * Licensed to the Apache Software Foundation (ASF) under one
422de8995SAndre Fischer  * or more contributor license agreements.  See the NOTICE file
522de8995SAndre Fischer  * distributed with this work for additional information
622de8995SAndre Fischer  * regarding copyright ownership.  The ASF licenses this file
722de8995SAndre Fischer  * to you under the Apache License, Version 2.0 (the
822de8995SAndre Fischer  * "License"); you may not use this file except in compliance
922de8995SAndre Fischer  * with the License.  You may obtain a copy of the License at
1022de8995SAndre Fischer  *
1122de8995SAndre Fischer  *   http://www.apache.org/licenses/LICENSE-2.0
1222de8995SAndre Fischer  *
1322de8995SAndre Fischer  * Unless required by applicable law or agreed to in writing,
1422de8995SAndre Fischer  * software distributed under the License is distributed on an
1522de8995SAndre Fischer  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
1622de8995SAndre Fischer  * KIND, either express or implied.  See the License for the
1722de8995SAndre Fischer  * specific language governing permissions and limitations
1822de8995SAndre Fischer  * under the License.
1922de8995SAndre Fischer  *
2022de8995SAndre Fischer  *************************************************************/
2122de8995SAndre Fischer 
2222de8995SAndre Fischer #include "precompiled_sfx2.hxx"
2322de8995SAndre Fischer 
2422de8995SAndre Fischer #include "Panel.hxx"
25*ff12d537SAndre Fischer #include "PanelTitleBar.hxx"
26*ff12d537SAndre Fischer #include "PanelDescriptor.hxx"
27*ff12d537SAndre Fischer #include "Theme.hxx"
28*ff12d537SAndre Fischer #include "Paint.hxx"
2922de8995SAndre Fischer 
3022de8995SAndre Fischer #include <tools/svborder.hxx>
3122de8995SAndre Fischer 
32*ff12d537SAndre Fischer #include <com/sun/star/ui/XToolPanel.hpp>
33*ff12d537SAndre Fischer 
3422de8995SAndre Fischer 
3522de8995SAndre Fischer using namespace css;
3622de8995SAndre Fischer using namespace cssu;
3722de8995SAndre Fischer 
3822de8995SAndre Fischer namespace {
3922de8995SAndre Fischer     static const char* VerticalStackLayouterName("vertical-stack");
4022de8995SAndre Fischer }
4122de8995SAndre Fischer 
4222de8995SAndre Fischer 
43*ff12d537SAndre Fischer namespace sfx2 { namespace sidebar {
4422de8995SAndre Fischer 
4522de8995SAndre Fischer Panel::Panel (
46*ff12d537SAndre Fischer     const PanelDescriptor& rPanelDescriptor,
47*ff12d537SAndre Fischer     Window* pParentWindow,
48*ff12d537SAndre Fischer     const ::boost::function<void(void)>& rDeckLayoutTrigger)
4922de8995SAndre Fischer     : Window(pParentWindow),
5022de8995SAndre Fischer       msLayoutHint(rPanelDescriptor.msLayout),
51*ff12d537SAndre Fischer       mpTitleBar(new PanelTitleBar(rPanelDescriptor.msTitle, pParentWindow, this)),
5222de8995SAndre Fischer       mbIsTitleBarOptional(rPanelDescriptor.mbIsTitleBarOptional),
5322de8995SAndre Fischer       mxElement(),
54*ff12d537SAndre Fischer       mxVerticalStackLayoutElement(),
55*ff12d537SAndre Fischer       mbIsExpanded(true),
56*ff12d537SAndre Fischer       maDeckLayoutTrigger(rDeckLayoutTrigger)
5722de8995SAndre Fischer {
58*ff12d537SAndre Fischer     const sidebar::Paint aPaint (Theme::GetPanelBackground());
59*ff12d537SAndre Fischer     switch(aPaint.GetType())
60*ff12d537SAndre Fischer     {
61*ff12d537SAndre Fischer         case Paint::NoPaint:
62*ff12d537SAndre Fischer         default:
63*ff12d537SAndre Fischer             SetBackground();
64*ff12d537SAndre Fischer             break;
65*ff12d537SAndre Fischer 
66*ff12d537SAndre Fischer         case Paint::ColorPaint:
67*ff12d537SAndre Fischer         {
68*ff12d537SAndre Fischer             const Color aColor (aPaint.GetColor());
69*ff12d537SAndre Fischer             SetBackground(Wallpaper(aColor));
70*ff12d537SAndre Fischer             break;
71*ff12d537SAndre Fischer         }
72*ff12d537SAndre Fischer         case Paint::GradientPaint:
73*ff12d537SAndre Fischer             SetBackground(Wallpaper(aPaint.GetGradient()));
74*ff12d537SAndre Fischer             break;
75*ff12d537SAndre Fischer     }
7622de8995SAndre Fischer }
7722de8995SAndre Fischer 
7822de8995SAndre Fischer 
7922de8995SAndre Fischer 
8022de8995SAndre Fischer 
8122de8995SAndre Fischer Panel::~Panel (void)
8222de8995SAndre Fischer {
8322de8995SAndre Fischer }
8422de8995SAndre Fischer 
8522de8995SAndre Fischer 
8622de8995SAndre Fischer 
8722de8995SAndre Fischer 
88*ff12d537SAndre Fischer void Panel::Dispose (void)
89*ff12d537SAndre Fischer {
90*ff12d537SAndre Fischer     mxVerticalStackLayoutElement = NULL;
91*ff12d537SAndre Fischer     {
92*ff12d537SAndre Fischer         Reference<lang::XComponent> xComponent (mxElement, UNO_QUERY);
93*ff12d537SAndre Fischer         mxElement = NULL;
94*ff12d537SAndre Fischer         if (xComponent.is())
95*ff12d537SAndre Fischer             xComponent->dispose();
96*ff12d537SAndre Fischer     }
97*ff12d537SAndre Fischer     {
98*ff12d537SAndre Fischer         Reference<lang::XComponent> xComponent (mxElementWindow, UNO_QUERY);
99*ff12d537SAndre Fischer         mxElementWindow = NULL;
100*ff12d537SAndre Fischer         if (xComponent.is())
101*ff12d537SAndre Fischer             xComponent->dispose();
102*ff12d537SAndre Fischer     }
103*ff12d537SAndre Fischer }
104*ff12d537SAndre Fischer 
105*ff12d537SAndre Fischer 
106*ff12d537SAndre Fischer 
107*ff12d537SAndre Fischer 
10822de8995SAndre Fischer const ::rtl::OUString& Panel::GetLayoutHint (void) const
10922de8995SAndre Fischer {
11022de8995SAndre Fischer     return msLayoutHint;
11122de8995SAndre Fischer }
11222de8995SAndre Fischer 
11322de8995SAndre Fischer 
11422de8995SAndre Fischer 
11522de8995SAndre Fischer 
11622de8995SAndre Fischer TitleBar* Panel::GetTitleBar (void) const
11722de8995SAndre Fischer {
11822de8995SAndre Fischer     return mpTitleBar;
11922de8995SAndre Fischer }
12022de8995SAndre Fischer 
12122de8995SAndre Fischer 
12222de8995SAndre Fischer 
12322de8995SAndre Fischer 
12422de8995SAndre Fischer bool Panel::IsTitleBarOptional (void) const
12522de8995SAndre Fischer {
12622de8995SAndre Fischer     return mbIsTitleBarOptional;
12722de8995SAndre Fischer }
12822de8995SAndre Fischer 
12922de8995SAndre Fischer 
13022de8995SAndre Fischer 
13122de8995SAndre Fischer 
13222de8995SAndre Fischer void Panel::SetUIElement (const Reference<ui::XUIElement>& rxElement)
13322de8995SAndre Fischer {
13422de8995SAndre Fischer     mxElement = rxElement;
13522de8995SAndre Fischer     if (mxElement.is())
13622de8995SAndre Fischer     {
137*ff12d537SAndre Fischer         Reference<ui::XToolPanel> xToolPanel(mxElement->getRealInterface(), UNO_QUERY);
138*ff12d537SAndre Fischer         if (xToolPanel.is())
139*ff12d537SAndre Fischer         {
140*ff12d537SAndre Fischer             mxElementWindow = xToolPanel->getWindow();
141*ff12d537SAndre Fischer             Reference<awt::XWindowPeer> xPeer (mxElementWindow, UNO_QUERY);
142*ff12d537SAndre Fischer             if (xPeer.is())
143*ff12d537SAndre Fischer                 xPeer->setBackground(0x00000000);
144*ff12d537SAndre Fischer         }
14522de8995SAndre Fischer 
14622de8995SAndre Fischer         if (msLayoutHint.equalsAscii(VerticalStackLayouterName))
14722de8995SAndre Fischer             mxVerticalStackLayoutElement.set(mxElement->getRealInterface(), UNO_QUERY);
14822de8995SAndre Fischer     }
14922de8995SAndre Fischer }
15022de8995SAndre Fischer 
15122de8995SAndre Fischer 
15222de8995SAndre Fischer 
15322de8995SAndre Fischer 
154*ff12d537SAndre Fischer void Panel::SetExpanded (const bool bIsExpanded)
155*ff12d537SAndre Fischer {
156*ff12d537SAndre Fischer     if (mbIsExpanded != bIsExpanded)
157*ff12d537SAndre Fischer     {
158*ff12d537SAndre Fischer         mbIsExpanded = bIsExpanded;
159*ff12d537SAndre Fischer         maDeckLayoutTrigger();
160*ff12d537SAndre Fischer     }
161*ff12d537SAndre Fischer }
162*ff12d537SAndre Fischer 
163*ff12d537SAndre Fischer 
164*ff12d537SAndre Fischer 
165*ff12d537SAndre Fischer 
166*ff12d537SAndre Fischer bool Panel::IsExpanded (void) const
167*ff12d537SAndre Fischer {
168*ff12d537SAndre Fischer     return mbIsExpanded;
169*ff12d537SAndre Fischer }
170*ff12d537SAndre Fischer 
171*ff12d537SAndre Fischer 
172*ff12d537SAndre Fischer 
173*ff12d537SAndre Fischer 
17422de8995SAndre Fischer void Panel::Paint (const Rectangle& rUpdateArea)
17522de8995SAndre Fischer {
17622de8995SAndre Fischer     Window::Paint(rUpdateArea);
17722de8995SAndre Fischer }
17822de8995SAndre Fischer 
17922de8995SAndre Fischer 
18022de8995SAndre Fischer 
18122de8995SAndre Fischer 
182*ff12d537SAndre Fischer void Panel::SetPosSizePixel (
183*ff12d537SAndre Fischer     long nX,
184*ff12d537SAndre Fischer     long nY,
185*ff12d537SAndre Fischer     long nWidth,
186*ff12d537SAndre Fischer     long nHeight,
187*ff12d537SAndre Fischer     sal_uInt16 nFlags)
188*ff12d537SAndre Fischer {
189*ff12d537SAndre Fischer     Window::SetPosSizePixel(nX, nY, nWidth, nHeight, nFlags);
190*ff12d537SAndre Fischer 
191*ff12d537SAndre Fischer     if (mxElementWindow.is())
192*ff12d537SAndre Fischer         mxElementWindow->setPosSize(0, 0, nWidth, nHeight, nFlags);
193*ff12d537SAndre Fischer }
194*ff12d537SAndre Fischer 
195*ff12d537SAndre Fischer 
196*ff12d537SAndre Fischer 
197*ff12d537SAndre Fischer 
19822de8995SAndre Fischer Reference<ui::XVerticalStackLayoutElement> Panel::GetVerticalStackElement (void) const
19922de8995SAndre Fischer {
20022de8995SAndre Fischer     return mxVerticalStackLayoutElement;
20122de8995SAndre Fischer }
20222de8995SAndre Fischer 
20322de8995SAndre Fischer 
204*ff12d537SAndre Fischer } } // end of namespace sfx2::sidebar
205