Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include "Panel.hxx"
21 : #include "PanelTitleBar.hxx"
22 : #include "PanelDescriptor.hxx"
23 : #include <sfx2/sidebar/Theme.hxx>
24 : #include "Paint.hxx"
25 : #include "ResourceManager.hxx"
26 :
27 : #ifdef DEBUG
28 : #include <sfx2/sidebar/Tools.hxx>
29 : #include "Deck.hxx"
30 : #endif
31 :
32 : #include <tools/svborder.hxx>
33 : #include <toolkit/helper/vclunohelper.hxx>
34 :
35 : #include <com/sun/star/awt/XWindowPeer.hpp>
36 : #include <com/sun/star/awt/PosSize.hpp>
37 : #include <com/sun/star/ui/XToolPanel.hpp>
38 :
39 : #include <boost/bind.hpp>
40 :
41 :
42 : using namespace css;
43 : using namespace css::uno;
44 :
45 :
46 : namespace sfx2 { namespace sidebar {
47 :
48 6950 : Panel::Panel (
49 : const PanelDescriptor& rPanelDescriptor,
50 : vcl::Window* pParentWindow,
51 : const bool bIsInitiallyExpanded,
52 : const ::boost::function<void(void)>& rDeckLayoutTrigger,
53 : const ::boost::function<Context(void)>& rContextAccess)
54 : : Window(pParentWindow),
55 : msPanelId(rPanelDescriptor.msId),
56 : mpTitleBar(new PanelTitleBar(
57 : rPanelDescriptor.msTitle,
58 : pParentWindow,
59 6950 : this)),
60 : mbIsTitleBarOptional(rPanelDescriptor.mbIsTitleBarOptional),
61 : mxElement(),
62 : mxPanelComponent(),
63 : mbIsExpanded(bIsInitiallyExpanded),
64 : maDeckLayoutTrigger(rDeckLayoutTrigger),
65 13900 : maContextAccess(rContextAccess)
66 : {
67 6950 : SetBackground(Theme::GetPaint(Theme::Paint_PanelBackground).GetWallpaper());
68 :
69 : #ifdef DEBUG
70 : SetText(OUString("Panel"));
71 : #endif
72 6950 : }
73 :
74 :
75 :
76 :
77 20850 : Panel::~Panel (void)
78 : {
79 6950 : Dispose();
80 13900 : }
81 :
82 :
83 :
84 :
85 12110 : void Panel::Dispose (void)
86 : {
87 12110 : mxPanelComponent = NULL;
88 :
89 : {
90 12110 : Reference<lang::XComponent> xComponent (mxElement, UNO_QUERY);
91 12110 : mxElement = NULL;
92 12110 : if (xComponent.is())
93 5922 : xComponent->dispose();
94 : }
95 :
96 : {
97 12110 : Reference<lang::XComponent> xComponent (GetElementWindow(), UNO_QUERY);
98 12110 : if (xComponent.is())
99 0 : xComponent->dispose();
100 : }
101 :
102 12110 : mpTitleBar.reset();
103 12110 : }
104 :
105 :
106 :
107 :
108 75030 : PanelTitleBar* Panel::GetTitleBar (void) const
109 : {
110 75030 : return mpTitleBar.get();
111 : }
112 :
113 :
114 :
115 :
116 :
117 :
118 :
119 :
120 5922 : void Panel::SetUIElement (const Reference<ui::XUIElement>& rxElement)
121 : {
122 5922 : mxElement = rxElement;
123 5922 : if (mxElement.is())
124 : {
125 5922 : mxPanelComponent.set(mxElement->getRealInterface(), UNO_QUERY);
126 : }
127 5922 : }
128 :
129 :
130 :
131 :
132 50 : void Panel::SetExpanded (const bool bIsExpanded)
133 : {
134 50 : if (mbIsExpanded != bIsExpanded)
135 : {
136 0 : mbIsExpanded = bIsExpanded;
137 0 : maDeckLayoutTrigger();
138 :
139 0 : if (maContextAccess)
140 0 : ResourceManager::Instance().StorePanelExpansionState(
141 : msPanelId,
142 : bIsExpanded,
143 0 : maContextAccess());
144 : }
145 50 : }
146 :
147 :
148 :
149 :
150 :
151 :
152 :
153 :
154 2336 : bool Panel::HasIdPredicate (const ::rtl::OUString& rsId) const
155 : {
156 2336 : return msPanelId.equals(rsId);
157 : }
158 :
159 :
160 :
161 :
162 :
163 :
164 :
165 :
166 9223 : void Panel::Paint (const Rectangle& rUpdateArea)
167 : {
168 9223 : Window::Paint(rUpdateArea);
169 9223 : }
170 :
171 :
172 :
173 :
174 16256 : void Panel::Resize (void)
175 : {
176 16256 : Window::Resize();
177 :
178 : // Forward new size to window of XUIElement.
179 16256 : Reference<awt::XWindow> xElementWindow (GetElementWindow());
180 16256 : if (xElementWindow.is())
181 : {
182 16256 : const Size aSize (GetSizePixel());
183 16256 : xElementWindow->setPosSize(
184 : 0,
185 : 0,
186 16256 : aSize.Width(),
187 16256 : aSize.Height(),
188 48768 : awt::PosSize::POSSIZE);
189 16256 : }
190 16256 : }
191 :
192 :
193 :
194 :
195 0 : void Panel::Activate (void)
196 : {
197 0 : Window::Activate();
198 0 : }
199 :
200 :
201 :
202 :
203 :
204 0 : void Panel::DataChanged (const DataChangedEvent& rEvent)
205 : {
206 : (void)rEvent;
207 0 : SetBackground(Theme::GetPaint(Theme::Paint_PanelBackground).GetWallpaper());
208 0 : }
209 :
210 :
211 28366 : Reference<awt::XWindow> Panel::GetElementWindow (void)
212 : {
213 28366 : if (mxElement.is())
214 : {
215 16256 : Reference<ui::XToolPanel> xToolPanel(mxElement->getRealInterface(), UNO_QUERY);
216 16256 : if (xToolPanel.is())
217 16256 : return xToolPanel->getWindow();
218 : }
219 :
220 12110 : return NULL;
221 : }
222 :
223 :
224 951 : } } // end of namespace sfx2::sidebar
225 :
226 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|