Line data Source code
1 : /*
2 : * This file is part of the LibreOffice project.
3 : *
4 : * This Source Code Form is subject to the terms of the Mozilla Public
5 : * License, v. 2.0. If a copy of the MPL was not distributed with this
6 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
7 : *
8 : * This file incorporates work covered by the following license notice:
9 : *
10 : * Licensed to the Apache Software Foundation (ASF) under one or more
11 : * contributor license agreements. See the NOTICE file distributed
12 : * with this work for additional information regarding copyright
13 : * ownership. The ASF licenses this file to you under the Apache
14 : * License, Version 2.0 (the "License"); you may not use this file
15 : * except in compliance with the License. You may obtain a copy of
16 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
17 : */
18 : #include "svx/sidebar/PopupContainer.hxx"
19 : #include "AreaTransparencyGradientControl.hxx"
20 :
21 : #include <sfx2/sidebar/ResourceDefinitions.hrc>
22 : #include <sfx2/sidebar/Theme.hxx>
23 : #include <sfx2/sidebar/ControlFactory.hxx>
24 : #include <AreaPropertyPanel.hxx>
25 : #include <AreaPropertyPanel.hrc>
26 : #include <svx/dialogs.hrc>
27 : #include <svx/dialmgr.hxx>
28 : #include <sfx2/objsh.hxx>
29 : #include <svx/xfltrit.hxx>
30 : #include <svx/xflftrit.hxx>
31 : #include <svx/xtable.hxx>
32 : #include <sfx2/dispatch.hxx>
33 : #include <sfx2/bindings.hxx>
34 : #include <helpid.hrc>
35 : #include <svtools/valueset.hxx>
36 : #include <unotools/pathoptions.hxx>
37 : #include <svx/svxitems.hrc>
38 : #include <vcl/toolbox.hxx>
39 : #include <svtools/toolbarmenu.hxx>
40 : #include <svx/sidebar/ColorControl.hxx>
41 :
42 : #include <boost/bind.hpp>
43 :
44 : using namespace css;
45 : using namespace cssu;
46 : using ::sfx2::sidebar::Theme;
47 :
48 : const char UNO_SIDEBARCOLOR[] = ".uno:sidebarcolor";
49 : const char UNO_SIDEBARGRADIENT[] = ".uno:sidebargradient";
50 :
51 : namespace svx { namespace sidebar {
52 :
53 : const sal_Int32 AreaPropertyPanel::DEFAULT_CENTERX = 50;
54 : const sal_Int32 AreaPropertyPanel::DEFAULT_CENTERY = 50;
55 : const sal_Int32 AreaPropertyPanel::DEFAULT_ANGLE = 0;
56 : const sal_Int32 AreaPropertyPanel::DEFAULT_STARTVALUE = 0;
57 : const sal_Int32 AreaPropertyPanel::DEFAULT_ENDVALUE = 16777215;
58 : const sal_Int32 AreaPropertyPanel::DEFAULT_BORDER = 0;
59 :
60 :
61 0 : AreaPropertyPanel::AreaPropertyPanel(
62 : Window* pParent,
63 : const cssu::Reference<css::frame::XFrame>& rxFrame,
64 : SfxBindings* pBindings)
65 : : PanelLayout(pParent, "AreaPropertyPanel", "svx/ui/sidebararea.ui", rxFrame),
66 : meLastXFS(-1),
67 : maLastColor(Color(COL_DEFAULT_SHAPE_FILLING)),
68 : mnLastPosGradient(0),
69 : mnLastPosHatch(0),
70 : mnLastPosBitmap(0),
71 : mnLastTransSolid(50),
72 : maGradientLinear(),
73 : maGradientAxial(),
74 : maGradientRadial(),
75 : maGradientElliptical(),
76 : maGradientSquare(),
77 : maGradientRect(),
78 : mpStyleItem(),
79 : mpColorItem(),
80 : mpFillGradientItem(),
81 : mpHatchItem(),
82 : mpBitmapItem(),
83 : maStyleControl(SID_ATTR_FILL_STYLE, *pBindings, *this),
84 : maColorControl(SID_ATTR_FILL_COLOR, *pBindings, *this),
85 : maGradientControl(SID_ATTR_FILL_GRADIENT, *pBindings, *this),
86 : maHatchControl(SID_ATTR_FILL_HATCH, *pBindings, *this),
87 : maBitmapControl(SID_ATTR_FILL_BITMAP, *pBindings, *this),
88 : maColorTableControl(SID_COLOR_TABLE, *pBindings, *this),
89 : maGradientListControl(SID_GRADIENT_LIST, *pBindings, *this),
90 : maHatchListControl(SID_HATCH_LIST, *pBindings, *this),
91 : maBitmapListControl(SID_BITMAP_LIST, *pBindings, *this),
92 : maFillTransparenceController(SID_ATTR_FILL_TRANSPARENCE, *pBindings, *this),
93 : maFillFloatTransparenceController(SID_ATTR_FILL_FLOATTRANSPARENCE, *pBindings, *this),
94 0 : maImgAxial(SVX_RES(IMG_AXIAL)),
95 0 : maImgElli(SVX_RES(IMG_ELLI)),
96 0 : maImgQuad(SVX_RES(IMG_QUAD)),
97 0 : maImgRadial(SVX_RES(IMG_RADIAL)),
98 0 : maImgSquare(SVX_RES(IMG_SQUARE)),
99 0 : maImgLinear(SVX_RES(IMG_LINEAR)),
100 0 : maImgColor(SVX_RES(IMG_COLOR)),
101 : maTrGrPopup(this, ::boost::bind(&AreaPropertyPanel::CreateTransparencyGradientControl, this, _1)),
102 : maColorPopup(this, ::boost::bind(&AreaPropertyPanel::CreateColorPopupControl, this, _1)),
103 : mpFloatTransparenceItem(),
104 : mpTransparanceItem(),
105 : mxFrame(rxFrame),
106 : mpBindings(pBindings),
107 0 : mbColorAvail(true)
108 : {
109 0 : get(mpColorTextFT, "filllabel");
110 0 : get(mpLbFillType, "fillstyle");
111 0 : get(mpLbFillAttr, "fillattr");
112 0 : get(mpTrspTextFT, "transparencylabel");
113 0 : get(mpToolBoxColor, "selectcolor");
114 0 : get(mpLBTransType, "transtype");
115 0 : get(mpMTRTransparent, "settransparency");
116 0 : get(mpBTNGradient, "selectgradient");
117 :
118 0 : const sal_uInt16 nIdColor = mpToolBoxColor->GetItemId(UNO_SIDEBARCOLOR);
119 0 : mpColorUpdater.reset(new ::svx::ToolboxButtonColorUpdater(SID_ATTR_FILL_COLOR, nIdColor, mpToolBoxColor)),
120 :
121 0 : Initialize();
122 0 : }
123 :
124 :
125 :
126 0 : AreaPropertyPanel::~AreaPropertyPanel()
127 : {
128 0 : }
129 :
130 :
131 :
132 0 : void AreaPropertyPanel::Initialize()
133 : {
134 0 : maGradientLinear.SetXOffset(DEFAULT_CENTERX);
135 0 : maGradientLinear.SetYOffset(DEFAULT_CENTERY);
136 0 : maGradientLinear.SetAngle(DEFAULT_ANGLE);
137 0 : maGradientLinear.SetStartColor(Color(DEFAULT_STARTVALUE));
138 0 : maGradientLinear.SetEndColor(Color(DEFAULT_ENDVALUE));
139 0 : maGradientLinear.SetBorder(DEFAULT_BORDER);
140 0 : maGradientLinear.SetGradientStyle(XGRAD_LINEAR);
141 :
142 0 : maGradientAxial = maGradientLinear;
143 0 : maGradientAxial.SetGradientStyle(XGRAD_AXIAL);
144 :
145 0 : maGradientRadial = maGradientLinear;
146 0 : maGradientRadial.SetGradientStyle(XGRAD_RADIAL);
147 :
148 0 : maGradientElliptical = maGradientLinear;
149 0 : maGradientElliptical.SetGradientStyle(XGRAD_ELLIPTICAL);
150 :
151 0 : maGradientSquare = maGradientLinear;
152 0 : maGradientSquare.SetGradientStyle(XGRAD_SQUARE);
153 :
154 0 : maGradientRect = maGradientLinear;
155 0 : maGradientRect.SetGradientStyle(XGRAD_RECT);
156 :
157 0 : mpLbFillType->SetAccessibleName(OUString( "Fill")); //wj acc
158 0 : mpLbFillAttr->SetAccessibleName(OUString( "Fill")); //wj acc
159 :
160 0 : Link aLink = LINK( this, AreaPropertyPanel, SelectFillTypeHdl );
161 0 : mpLbFillType->SetSelectHdl( aLink );
162 :
163 0 : aLink = LINK( this, AreaPropertyPanel, SelectFillAttrHdl );
164 0 : mpLbFillAttr->SetSelectHdl( aLink );
165 :
166 : //add for new color picker
167 0 : mpLbFillAttr->Hide();
168 0 : const sal_uInt16 nIdColor = mpToolBoxColor->GetItemId(UNO_SIDEBARCOLOR);
169 0 : mpToolBoxColor->SetItemImage(nIdColor, maImgColor);
170 0 : mpToolBoxColor->SetItemBits( nIdColor, mpToolBoxColor->GetItemBits( nIdColor ) | TIB_DROPDOWNONLY );
171 0 : mpToolBoxColor->SetItemText(nIdColor, msHelpFillAttr);
172 :
173 0 : aLink = LINK(this, AreaPropertyPanel, ToolBoxColorDropHdl);
174 0 : mpToolBoxColor->SetDropdownClickHdl ( aLink );
175 0 : mpToolBoxColor->SetSelectHdl ( aLink );
176 :
177 : //add end
178 0 : mpLBTransType->SetSelectHdl(LINK(this, AreaPropertyPanel, ChangeTrgrTypeHdl_Impl));
179 0 : mpLBTransType->SetAccessibleName(OUString( "Transparency")); //wj acc
180 :
181 0 : mpMTRTransparent->SetValue( 50 );
182 0 : mpMTRTransparent->SetModifyHdl(LINK(this, AreaPropertyPanel, ModifyTransparentHdl_Impl));
183 0 : mpMTRTransparent->SetAccessibleName(OUString( "Transparency")); //wj acc
184 :
185 0 : const sal_uInt16 nIdGradient = mpBTNGradient->GetItemId(UNO_SIDEBARGRADIENT);
186 0 : mpBTNGradient->SetItemBits( nIdGradient, mpBTNGradient->GetItemBits( nIdGradient ) | TIB_DROPDOWNONLY );
187 0 : aLink = LINK( this, AreaPropertyPanel, ClickTrGrHdl_Impl );
188 0 : mpBTNGradient->SetDropdownClickHdl( aLink );
189 0 : mpBTNGradient->SetSelectHdl( aLink );
190 0 : mpBTNGradient->SetItemImage(nIdGradient,maImgLinear);
191 0 : mpBTNGradient->Hide();
192 :
193 0 : mpLbFillType->SetAccessibleRelationLabeledBy(mpColorTextFT);
194 0 : mpLbFillAttr->SetAccessibleRelationLabeledBy(mpLbFillAttr);
195 0 : mpToolBoxColor->SetAccessibleRelationLabeledBy(mpToolBoxColor);
196 0 : mpLBTransType->SetAccessibleRelationLabeledBy(mpTrspTextFT);
197 0 : mpMTRTransparent->SetAccessibleRelationLabeledBy(mpMTRTransparent);
198 0 : mpBTNGradient->SetAccessibleRelationLabeledBy(mpBTNGradient);
199 :
200 0 : SetupIcons();
201 0 : }
202 :
203 :
204 :
205 0 : IMPL_LINK( AreaPropertyPanel, SelectFillTypeHdl, ListBox *, pToolBox )
206 : {
207 0 : const XFillStyle eXFS = (XFillStyle)mpLbFillType->GetSelectEntryPos();
208 :
209 0 : if((XFillStyle)meLastXFS != eXFS)
210 : {
211 0 : mpLbFillAttr->Clear();
212 0 : SfxObjectShell* pSh = SfxObjectShell::Current();
213 0 : const XFillStyleItem aXFillStyleItem(eXFS);
214 :
215 : // #i122676# Do no longer trigger two Execute calls, one for SID_ATTR_FILL_STYLE
216 : // and one for setting the fill attribute itself, but add two SfxPoolItems to the
217 : // call to get just one action at the SdrObject and to create only one Undo action, too.
218 : // Checked that this works in all apps.
219 0 : switch( eXFS )
220 : {
221 : case XFILL_NONE:
222 : {
223 0 : mpLbFillAttr->Show();
224 0 : mpToolBoxColor->Hide();
225 0 : mpLbFillType->Selected();
226 0 : mpLbFillAttr->Disable();
227 :
228 : // #i122676# need to call a single SID_ATTR_FILL_STYLE change
229 : GetBindings()->GetDispatcher()->Execute(
230 0 : SID_ATTR_FILL_STYLE, SFX_CALLMODE_RECORD, &aXFillStyleItem, 0L);
231 0 : break;
232 : }
233 : case XFILL_SOLID:
234 : {
235 0 : mpLbFillAttr->Hide();
236 0 : mpToolBoxColor->Show();
237 0 : const OUString aTmpStr;
238 0 : const Color aColor = maLastColor;
239 0 : const XFillColorItem aXFillColorItem( aTmpStr, aColor );
240 :
241 : // #i122676# change FillStyle and Color in one call
242 : GetBindings()->GetDispatcher()->Execute(
243 0 : SID_ATTR_FILL_COLOR, SFX_CALLMODE_RECORD, &aXFillColorItem, &aXFillStyleItem, 0L);
244 0 : break;
245 : }
246 : case XFILL_GRADIENT:
247 : {
248 0 : mpLbFillAttr->Show();
249 0 : mpToolBoxColor->Hide();
250 :
251 0 : if(pSh && pSh->GetItem(SID_GRADIENT_LIST))
252 : {
253 0 : if(!mpLbFillAttr->GetEntryCount())
254 : {
255 0 : const SvxGradientListItem aItem(*(const SvxGradientListItem*)(pSh->GetItem(SID_GRADIENT_LIST)));
256 0 : mpLbFillAttr->Enable();
257 0 : mpLbFillAttr->Clear();
258 0 : mpLbFillAttr->Fill(aItem.GetGradientList());
259 : }
260 :
261 0 : mpLbFillAttr->AdaptDropDownLineCountToMaximum();
262 :
263 0 : if(LISTBOX_ENTRY_NOTFOUND != mnLastPosGradient)
264 : {
265 0 : const SvxGradientListItem aItem(*(const SvxGradientListItem*)(pSh->GetItem(SID_GRADIENT_LIST)));
266 :
267 0 : if(mnLastPosGradient < aItem.GetGradientList()->Count())
268 : {
269 0 : const XGradient aGradient = aItem.GetGradientList()->GetGradient(mnLastPosGradient)->GetGradient();
270 0 : const XFillGradientItem aXFillGradientItem(mpLbFillAttr->GetEntry(mnLastPosGradient), aGradient);
271 :
272 : // #i122676# change FillStyle and Gradient in one call
273 : GetBindings()->GetDispatcher()->Execute(
274 0 : SID_ATTR_FILL_GRADIENT, SFX_CALLMODE_RECORD, &aXFillGradientItem, &aXFillStyleItem, 0L);
275 0 : mpLbFillAttr->SelectEntryPos(mnLastPosGradient);
276 0 : }
277 : }
278 : }
279 : else
280 : {
281 0 : mpLbFillAttr->Disable();
282 : }
283 0 : break;
284 : }
285 : case XFILL_HATCH:
286 : {
287 0 : mpLbFillAttr->Show();
288 0 : mpToolBoxColor->Hide();
289 :
290 0 : if(pSh && pSh->GetItem(SID_HATCH_LIST))
291 : {
292 0 : if(!mpLbFillAttr->GetEntryCount())
293 : {
294 0 : const SvxHatchListItem aItem( *(const SvxHatchListItem*)(pSh->GetItem(SID_HATCH_LIST)));
295 0 : mpLbFillAttr->Enable();
296 0 : mpLbFillAttr->Clear();
297 0 : mpLbFillAttr->Fill(aItem.GetHatchList());
298 : }
299 :
300 0 : mpLbFillAttr->AdaptDropDownLineCountToMaximum();
301 :
302 0 : if(LISTBOX_ENTRY_NOTFOUND != mnLastPosHatch)
303 : {
304 0 : const SvxHatchListItem aItem(*(const SvxHatchListItem*)(pSh->GetItem(SID_HATCH_LIST)));
305 :
306 0 : if(mnLastPosHatch < aItem.GetHatchList()->Count())
307 : {
308 0 : const XHatch aHatch = aItem.GetHatchList()->GetHatch(mnLastPosHatch)->GetHatch();
309 0 : const XFillHatchItem aXFillHatchItem(mpLbFillAttr->GetSelectEntry(), aHatch);
310 :
311 : // #i122676# change FillStyle and Hatch in one call
312 : GetBindings()->GetDispatcher()->Execute(
313 0 : SID_ATTR_FILL_HATCH, SFX_CALLMODE_RECORD, &aXFillHatchItem, &aXFillStyleItem, 0L);
314 0 : mpLbFillAttr->SelectEntryPos(mnLastPosHatch);
315 0 : }
316 : }
317 : }
318 : else
319 : {
320 0 : mpLbFillAttr->Disable();
321 : }
322 0 : break;
323 : }
324 : case XFILL_BITMAP:
325 : {
326 0 : mpLbFillAttr->Show();
327 0 : mpToolBoxColor->Hide();
328 :
329 0 : if(pSh && pSh->GetItem(SID_BITMAP_LIST))
330 : {
331 0 : if(!mpLbFillAttr->GetEntryCount())
332 : {
333 0 : const SvxBitmapListItem aItem( *(const SvxBitmapListItem*)(pSh->GetItem(SID_BITMAP_LIST)));
334 0 : mpLbFillAttr->Enable();
335 0 : mpLbFillAttr->Clear();
336 0 : mpLbFillAttr->Fill(aItem.GetBitmapList());
337 : }
338 :
339 0 : mpLbFillAttr->AdaptDropDownLineCountToMaximum();
340 :
341 0 : if(LISTBOX_ENTRY_NOTFOUND != mnLastPosBitmap)
342 : {
343 0 : const SvxBitmapListItem aItem(*(const SvxBitmapListItem*)(pSh->GetItem(SID_BITMAP_LIST)));
344 :
345 0 : if(mnLastPosBitmap < aItem.GetBitmapList()->Count())
346 : {
347 0 : const XBitmapEntry* pXBitmapEntry = aItem.GetBitmapList()->GetBitmap(mnLastPosBitmap);
348 0 : const XFillBitmapItem aXFillBitmapItem(mpLbFillAttr->GetSelectEntry(), pXBitmapEntry->GetGraphicObject());
349 :
350 : // #i122676# change FillStyle and Bitmap in one call
351 : GetBindings()->GetDispatcher()->Execute(
352 0 : SID_ATTR_FILL_BITMAP, SFX_CALLMODE_RECORD, &aXFillBitmapItem, &aXFillStyleItem, 0L);
353 0 : mpLbFillAttr->SelectEntryPos(mnLastPosBitmap);
354 0 : }
355 : }
356 : }
357 : else
358 : {
359 0 : mpLbFillAttr->Disable();
360 : }
361 0 : break;
362 : }
363 : }
364 :
365 0 : meLastXFS = (sal_uInt16)eXFS;
366 :
367 0 : if(XFILL_NONE != eXFS)
368 : {
369 0 : if(pToolBox)
370 : {
371 0 : mpLbFillType->Selected();
372 : }
373 0 : }
374 : }
375 :
376 0 : return 0;
377 : }
378 :
379 :
380 :
381 0 : IMPL_LINK( AreaPropertyPanel, SelectFillAttrHdl, ListBox*, pToolBox )
382 : {
383 0 : const XFillStyle eXFS = (XFillStyle)mpLbFillType->GetSelectEntryPos();
384 0 : const XFillStyleItem aXFillStyleItem(eXFS);
385 0 : SfxObjectShell* pSh = SfxObjectShell::Current();
386 :
387 0 : if(pToolBox)
388 : {
389 : // #i122676# dependent from bFillStyleChange, do execute a single or two
390 : // changes in one Execute call
391 0 : const bool bFillStyleChange((XFillStyle) meLastXFS != eXFS);
392 :
393 0 : switch(eXFS)
394 : {
395 : case XFILL_SOLID:
396 : {
397 0 : if(bFillStyleChange)
398 : {
399 : // #i122676# Single FillStyle change call needed here
400 0 : GetBindings()->GetDispatcher()->Execute(SID_ATTR_FILL_STYLE, SFX_CALLMODE_RECORD, &aXFillStyleItem, 0L);
401 : }
402 0 : break;
403 : }
404 : case XFILL_GRADIENT:
405 : {
406 0 : sal_Int32 nPos = mpLbFillAttr->GetSelectEntryPos();
407 :
408 0 : if(LISTBOX_ENTRY_NOTFOUND == nPos)
409 : {
410 0 : nPos = mnLastPosGradient;
411 : }
412 :
413 0 : if(LISTBOX_ENTRY_NOTFOUND != nPos && pSh && pSh->GetItem(SID_GRADIENT_LIST))
414 : {
415 0 : const SvxGradientListItem aItem(*(const SvxGradientListItem*)(pSh->GetItem(SID_GRADIENT_LIST)));
416 :
417 0 : if(nPos < aItem.GetGradientList()->Count())
418 : {
419 0 : const XGradient aGradient = aItem.GetGradientList()->GetGradient(nPos)->GetGradient();
420 0 : const XFillGradientItem aXFillGradientItem(mpLbFillAttr->GetSelectEntry(), aGradient);
421 :
422 : // #i122676# Change FillStale and Gradinet in one call
423 : GetBindings()->GetDispatcher()->Execute(
424 : SID_ATTR_FILL_GRADIENT, SFX_CALLMODE_RECORD, &aXFillGradientItem,
425 0 : bFillStyleChange ? &aXFillStyleItem : 0L, 0L);
426 0 : }
427 : }
428 :
429 0 : if(LISTBOX_ENTRY_NOTFOUND != nPos)
430 : {
431 0 : mnLastPosGradient = nPos;
432 : }
433 0 : break;
434 : }
435 : case XFILL_HATCH:
436 : {
437 0 : sal_Int32 nPos = mpLbFillAttr->GetSelectEntryPos();
438 :
439 0 : if(LISTBOX_ENTRY_NOTFOUND == nPos)
440 : {
441 0 : nPos = mnLastPosHatch;
442 : }
443 :
444 0 : if(LISTBOX_ENTRY_NOTFOUND != nPos && pSh && pSh->GetItem(SID_HATCH_LIST))
445 : {
446 0 : const SvxHatchListItem aItem(*(const SvxHatchListItem*)(pSh->GetItem(SID_HATCH_LIST)));
447 :
448 0 : if(nPos < aItem.GetHatchList()->Count())
449 : {
450 0 : const XHatch aHatch = aItem.GetHatchList()->GetHatch(nPos)->GetHatch();
451 0 : const XFillHatchItem aXFillHatchItem( mpLbFillAttr->GetSelectEntry(), aHatch);
452 :
453 : // #i122676# Change FillStale and Hatch in one call
454 : GetBindings()->GetDispatcher()->Execute(
455 : SID_ATTR_FILL_HATCH, SFX_CALLMODE_RECORD, &aXFillHatchItem,
456 0 : bFillStyleChange ? &aXFillStyleItem : 0L, 0L);
457 0 : }
458 : }
459 :
460 0 : if(LISTBOX_ENTRY_NOTFOUND != nPos)
461 : {
462 0 : mnLastPosHatch = nPos;
463 : }
464 0 : break;
465 : }
466 : case XFILL_BITMAP:
467 : {
468 0 : sal_Int32 nPos = mpLbFillAttr->GetSelectEntryPos();
469 :
470 0 : if(LISTBOX_ENTRY_NOTFOUND == nPos)
471 : {
472 0 : nPos = mnLastPosBitmap;
473 : }
474 :
475 0 : if(LISTBOX_ENTRY_NOTFOUND != nPos && pSh && pSh->GetItem(SID_BITMAP_LIST))
476 : {
477 0 : const SvxBitmapListItem aItem(*(const SvxBitmapListItem*)(pSh->GetItem(SID_BITMAP_LIST)));
478 :
479 0 : if(nPos < aItem.GetBitmapList()->Count())
480 : {
481 0 : const XBitmapEntry* pXBitmapEntry = aItem.GetBitmapList()->GetBitmap(nPos);
482 0 : const XFillBitmapItem aXFillBitmapItem(mpLbFillAttr->GetSelectEntry(), pXBitmapEntry->GetGraphicObject());
483 :
484 : // #i122676# Change FillStale and Bitmap in one call
485 : GetBindings()->GetDispatcher()->Execute(
486 : SID_ATTR_FILL_BITMAP, SFX_CALLMODE_RECORD, &aXFillBitmapItem,
487 0 : bFillStyleChange ? &aXFillStyleItem : 0L, 0L);
488 0 : }
489 : }
490 :
491 0 : if(LISTBOX_ENTRY_NOTFOUND != nPos)
492 : {
493 0 : mnLastPosBitmap = nPos;
494 : }
495 0 : break;
496 : }
497 0 : default: break;
498 : }
499 : }
500 :
501 0 : return 0;
502 : }
503 :
504 :
505 0 : IMPL_LINK(AreaPropertyPanel, ToolBoxColorDropHdl, ToolBox*, pToolBox)
506 : {
507 0 : const OUString aCommand(pToolBox->GetItemCommand(pToolBox->GetCurItemId()));
508 :
509 0 : if(UNO_SIDEBARCOLOR == aCommand)
510 : {
511 0 : maColorPopup.Show(*pToolBox);
512 :
513 0 : if (mpColorItem)
514 : {
515 0 : maColorPopup.SetCurrentColor(mpColorItem->GetColorValue(), mbColorAvail);
516 : }
517 : else
518 : {
519 0 : maColorPopup.SetCurrentColor(COL_WHITE, false);
520 : }
521 : }
522 :
523 0 : return 0;
524 : }
525 :
526 :
527 :
528 0 : void AreaPropertyPanel::SetColor (
529 : const OUString& rsColorName,
530 : const Color aColor)
531 : {
532 0 : const XFillColorItem aXFillColorItem(rsColorName, aColor);
533 0 : mpBindings->GetDispatcher()->Execute(SID_ATTR_FILL_COLOR, SFX_CALLMODE_RECORD, &aXFillColorItem, 0L);
534 0 : maLastColor = aColor;
535 0 : }
536 :
537 :
538 :
539 :
540 0 : PopupControl* AreaPropertyPanel::CreateTransparencyGradientControl (PopupContainer* pParent)
541 : {
542 0 : return new AreaTransparencyGradientControl(pParent, *this);
543 : }
544 :
545 :
546 :
547 :
548 0 : PopupControl* AreaPropertyPanel::CreateColorPopupControl (PopupContainer* pParent)
549 : {
550 : return new ColorControl(
551 : pParent,
552 : mpBindings,
553 0 : SVX_RES(RID_POPUPPANEL_AERAPAGE_COLOR),
554 0 : SVX_RES(VS_COLOR),
555 : ::boost::bind(&AreaPropertyPanel::GetLastColor, this),
556 : ::boost::bind(&AreaPropertyPanel::SetColor, this, _1,_2),
557 : pParent,
558 0 : 0);
559 : }
560 :
561 :
562 :
563 :
564 0 : void AreaPropertyPanel::SetupIcons(void)
565 : {
566 0 : if(Theme::GetBoolean(Theme::Bool_UseSymphonyIcons))
567 : {
568 : // todo
569 : }
570 : else
571 : {
572 : // todo
573 : }
574 0 : }
575 :
576 :
577 :
578 0 : AreaPropertyPanel* AreaPropertyPanel::Create (
579 : Window* pParent,
580 : const cssu::Reference<css::frame::XFrame>& rxFrame,
581 : SfxBindings* pBindings)
582 : {
583 0 : if (pParent == NULL)
584 0 : throw lang::IllegalArgumentException("no parent Window given to AreaPropertyPanel::Create", NULL, 0);
585 0 : if ( ! rxFrame.is())
586 0 : throw lang::IllegalArgumentException("no XFrame given to AreaPropertyPanel::Create", NULL, 1);
587 0 : if (pBindings == NULL)
588 0 : throw lang::IllegalArgumentException("no SfxBindings given to AreaPropertyPanel::Create", NULL, 2);
589 :
590 : return new AreaPropertyPanel(
591 : pParent,
592 : rxFrame,
593 0 : pBindings);
594 : }
595 :
596 :
597 :
598 0 : void AreaPropertyPanel::DataChanged(
599 : const DataChangedEvent& rEvent)
600 : {
601 : (void)rEvent;
602 :
603 0 : SetupIcons();
604 0 : }
605 :
606 :
607 :
608 0 : void AreaPropertyPanel::ImpUpdateTransparencies()
609 : {
610 0 : if(mpTransparanceItem.get() && mpFloatTransparenceItem.get())
611 : {
612 0 : bool bZeroValue(false);
613 :
614 0 : if(mpTransparanceItem.get())
615 : {
616 0 : const sal_uInt16 nValue(mpTransparanceItem->GetValue());
617 :
618 0 : if(!nValue)
619 : {
620 0 : bZeroValue = true;
621 : }
622 0 : else if(nValue <= 100)
623 : {
624 0 : mpLBTransType->Enable();
625 0 : mpTrspTextFT->Enable();
626 0 : mpLBTransType->SelectEntryPos(1);
627 0 : mpBTNGradient->Hide();
628 0 : mpMTRTransparent->Show();
629 0 : mpMTRTransparent->Enable();
630 0 : mpMTRTransparent->SetValue(nValue);
631 : }
632 :
633 0 : if(!bZeroValue)
634 : {
635 0 : maTrGrPopup.Hide();
636 : }
637 : }
638 :
639 0 : if(bZeroValue && mpFloatTransparenceItem.get())
640 : {
641 0 : if(mpFloatTransparenceItem->IsEnabled())
642 : {
643 0 : const XGradient& rGradient = mpFloatTransparenceItem->GetGradientValue();
644 0 : sal_Int32 nEntryPos(0);
645 0 : Image* pImage = 0;
646 :
647 0 : mpLBTransType->Enable();
648 0 : mpTrspTextFT->Enable();
649 0 : mpMTRTransparent->Hide();
650 0 : mpBTNGradient->Enable();
651 0 : mpBTNGradient->Show();
652 :
653 0 : switch(rGradient.GetGradientStyle())
654 : {
655 : case XGRAD_LINEAR:
656 : {
657 0 : nEntryPos = 2;
658 0 : pImage = &maImgLinear;
659 0 : break;
660 : }
661 : case XGRAD_AXIAL:
662 : {
663 0 : nEntryPos = 3;
664 0 : pImage = &maImgAxial;
665 0 : break;
666 : }
667 : case XGRAD_RADIAL:
668 : {
669 0 : nEntryPos = 4;
670 0 : pImage = &maImgRadial;
671 0 : break;
672 : }
673 : case XGRAD_ELLIPTICAL:
674 : {
675 0 : nEntryPos = 5;
676 0 : pImage = &maImgElli;
677 0 : break;
678 : }
679 : case XGRAD_SQUARE:
680 : {
681 0 : nEntryPos = 6;
682 0 : pImage = &maImgQuad;
683 0 : break;
684 : }
685 : case XGRAD_RECT:
686 : {
687 0 : nEntryPos = 7;
688 0 : pImage = &maImgSquare;
689 0 : break;
690 : }
691 : }
692 :
693 0 : const sal_uInt16 nIdGradient = mpBTNGradient->GetItemId(UNO_SIDEBARGRADIENT);
694 0 : mpLBTransType->SelectEntryPos(nEntryPos);
695 0 : mpBTNGradient->SetItemImage(nIdGradient, *pImage);
696 0 : bZeroValue = false;
697 : }
698 : else
699 : {
700 0 : bZeroValue = true;
701 : }
702 : }
703 :
704 0 : if(bZeroValue)
705 : {
706 0 : mpLBTransType->Enable();
707 0 : mpTrspTextFT->Enable();
708 0 : mpLBTransType->SelectEntryPos(0);
709 0 : mpBTNGradient->Hide();
710 0 : mpMTRTransparent->Enable();
711 0 : mpMTRTransparent->Show();
712 0 : mpMTRTransparent->SetValue(0);
713 : }
714 : }
715 : else
716 : {
717 : // no transparency at all
718 0 : mpLBTransType->SetNoSelection();
719 0 : mpLBTransType->Disable();
720 0 : mpTrspTextFT->Disable();
721 0 : mpMTRTransparent->Disable();
722 0 : mpMTRTransparent->Show();
723 0 : mpBTNGradient->Disable();
724 0 : mpBTNGradient->Hide();
725 : }
726 0 : }
727 :
728 :
729 :
730 0 : void AreaPropertyPanel::NotifyItemUpdate(
731 : sal_uInt16 nSID,
732 : SfxItemState eState,
733 : const SfxPoolItem* pState,
734 : const bool bIsEnabled)
735 : {
736 : (void)bIsEnabled;
737 0 : const bool bDisabled(SFX_ITEM_DISABLED == eState);
738 :
739 0 : switch(nSID)
740 : {
741 : case SID_ATTR_FILL_TRANSPARENCE:
742 : case SID_ATTR_FILL_FLOATTRANSPARENCE:
743 : {
744 0 : bool bFillTransparenceChanged(false);
745 :
746 0 : if(SID_ATTR_FILL_TRANSPARENCE == nSID)
747 : {
748 0 : bFillTransparenceChanged = true;
749 :
750 0 : if(eState >= SFX_ITEM_AVAILABLE)
751 : {
752 0 : const SfxUInt16Item* pItem = dynamic_cast< const SfxUInt16Item* >(pState);
753 :
754 0 : if(pItem && (!mpTransparanceItem || *pItem != *mpTransparanceItem))
755 : {
756 0 : mpTransparanceItem.reset((SfxUInt16Item*)pItem->Clone());
757 : }
758 : else
759 : {
760 0 : mpTransparanceItem.reset();
761 : }
762 : }
763 : else
764 : {
765 0 : mpTransparanceItem.reset();
766 : }
767 : }
768 : else // if(SID_ATTR_FILL_FLOATTRANSPARENCE == nSID)
769 : {
770 0 : bFillTransparenceChanged = true;
771 :
772 0 : if(eState >= SFX_ITEM_AVAILABLE)
773 : {
774 0 : const XFillFloatTransparenceItem* pItem = dynamic_cast< const XFillFloatTransparenceItem* >(pState);
775 :
776 0 : if(pItem && (!mpFloatTransparenceItem || *pItem != *mpFloatTransparenceItem))
777 : {
778 0 : mpFloatTransparenceItem.reset((XFillFloatTransparenceItem*)pItem->Clone());
779 : }
780 : else
781 : {
782 0 : mpFloatTransparenceItem.reset();
783 : }
784 : }
785 : else
786 : {
787 0 : mpFloatTransparenceItem.reset();
788 : }
789 : }
790 :
791 0 : if(bFillTransparenceChanged)
792 : {
793 : // update transparency settings dependent of mpTransparanceItem and mpFloatTransparenceItem
794 0 : ImpUpdateTransparencies();
795 : }
796 0 : break;
797 : }
798 : case SID_ATTR_FILL_STYLE:
799 : {
800 0 : if(bDisabled)
801 : {
802 0 : mpLbFillType->Disable();
803 0 : mpColorTextFT->Disable();
804 0 : mpLbFillType->SetNoSelection();
805 0 : mpLbFillAttr->Show();
806 0 : mpLbFillAttr->Disable();
807 0 : mpLbFillAttr->SetNoSelection();
808 0 : mpToolBoxColor->Hide();
809 0 : meLastXFS = -1;
810 0 : mpStyleItem.reset();
811 : }
812 :
813 0 : if(eState >= SFX_ITEM_AVAILABLE)
814 : {
815 0 : const XFillStyleItem* pItem = dynamic_cast< const XFillStyleItem* >(pState);
816 :
817 0 : if(pItem)
818 : {
819 0 : mpStyleItem.reset(dynamic_cast< XFillStyleItem* >(pItem->Clone()));
820 0 : mpLbFillType->Enable();
821 0 : mpColorTextFT->Enable();
822 0 : XFillStyle eXFS = (XFillStyle)mpStyleItem->GetValue();
823 0 : meLastXFS = eXFS;
824 0 : mpLbFillType->SelectEntryPos(sal::static_int_cast< sal_Int32 >(eXFS));
825 :
826 0 : if(XFILL_NONE == eXFS)
827 : {
828 0 : mpLbFillAttr->SetNoSelection();
829 0 : mpLbFillAttr->Disable();
830 : }
831 :
832 0 : Update();
833 0 : break;
834 : }
835 : }
836 :
837 0 : mpLbFillType->SetNoSelection();
838 0 : mpLbFillAttr->Show();
839 0 : mpLbFillAttr->Disable();
840 0 : mpLbFillAttr->SetNoSelection();
841 0 : mpToolBoxColor->Hide();
842 0 : meLastXFS = -1;
843 0 : mpStyleItem.reset();
844 0 : break;
845 : }
846 : case SID_ATTR_FILL_COLOR:
847 : {
848 0 : if(SFX_ITEM_AVAILABLE == eState)
849 : {
850 0 : mpColorItem.reset(pState ? (XFillColorItem*)pState->Clone() : 0);
851 : }
852 :
853 0 : if(mpStyleItem && XFILL_SOLID == (XFillStyle)mpStyleItem->GetValue())
854 : {
855 0 : mpLbFillAttr->Hide();
856 0 : mpToolBoxColor->Show();
857 :
858 0 : if(SFX_ITEM_AVAILABLE == eState)
859 : {
860 0 : mpToolBoxColor->Enable();
861 0 : mbColorAvail = true;
862 : // maLastColor = mpColorItem->GetColorValue();
863 0 : Update();
864 : }
865 0 : else if(SFX_ITEM_DISABLED == eState)
866 : {
867 0 : mpToolBoxColor->Disable();
868 0 : mbColorAvail = false;
869 0 : mpColorUpdater->Update(COL_WHITE);
870 : }
871 : else
872 : {
873 0 : mbColorAvail = false;
874 0 : mpColorUpdater->Update(COL_WHITE);
875 : }
876 : }
877 0 : break;
878 : }
879 : case SID_ATTR_FILL_GRADIENT:
880 : {
881 0 : if(SFX_ITEM_AVAILABLE == eState)
882 : {
883 0 : mpFillGradientItem.reset(pState ? (XFillGradientItem*)pState->Clone() : 0);
884 : }
885 :
886 0 : if(mpStyleItem && XFILL_GRADIENT == (XFillStyle)mpStyleItem->GetValue())
887 : {
888 0 : mpLbFillAttr->Show();
889 0 : mpToolBoxColor->Hide();
890 :
891 0 : if(SFX_ITEM_AVAILABLE == eState)
892 : {
893 0 : mpLbFillAttr->Enable();
894 0 : Update();
895 : }
896 0 : else if(SFX_ITEM_DISABLED == eState )
897 : {
898 0 : mpLbFillAttr->Disable();
899 0 : mpLbFillAttr->SetNoSelection();
900 : }
901 : else
902 : {
903 0 : mpLbFillAttr->SetNoSelection();
904 : }
905 : }
906 0 : break;
907 : }
908 : case SID_ATTR_FILL_HATCH:
909 : {
910 0 : if(SFX_ITEM_AVAILABLE == eState)
911 : {
912 0 : mpHatchItem.reset(pState ? (XFillHatchItem*)pState->Clone() : 0);
913 : }
914 :
915 0 : if(mpStyleItem && XFILL_HATCH == (XFillStyle)mpStyleItem->GetValue())
916 : {
917 0 : mpLbFillAttr->Show();
918 0 : mpToolBoxColor->Hide();
919 :
920 0 : if(SFX_ITEM_AVAILABLE == eState)
921 : {
922 0 : mpLbFillAttr->Enable();
923 0 : Update();
924 : }
925 0 : else if(SFX_ITEM_DISABLED == eState )
926 : {
927 0 : mpLbFillAttr->Disable();
928 0 : mpLbFillAttr->SetNoSelection();
929 : }
930 : else
931 : {
932 0 : mpLbFillAttr->SetNoSelection();
933 : }
934 : }
935 0 : break;
936 : }
937 : case SID_ATTR_FILL_BITMAP:
938 : {
939 0 : if(SFX_ITEM_AVAILABLE == eState)
940 : {
941 0 : mpBitmapItem.reset(pState ? (XFillBitmapItem*)pState->Clone() : 0);
942 : }
943 :
944 0 : if(mpStyleItem && XFILL_BITMAP == (XFillStyle)mpStyleItem->GetValue())
945 : {
946 0 : mpLbFillAttr->Show();
947 0 : mpToolBoxColor->Hide();
948 :
949 0 : if(SFX_ITEM_AVAILABLE == eState)
950 : {
951 0 : mpLbFillAttr->Enable();
952 0 : Update();
953 : }
954 0 : else if(SFX_ITEM_DISABLED == eState )
955 : {
956 0 : mpLbFillAttr->Disable();
957 0 : mpLbFillAttr->SetNoSelection();
958 : }
959 : else
960 : {
961 0 : mpLbFillAttr->SetNoSelection();
962 : }
963 : }
964 0 : break;
965 : }
966 : case SID_COLOR_TABLE:
967 : {
968 0 : if(SFX_ITEM_AVAILABLE == eState)
969 : {
970 0 : if(mpStyleItem && XFILL_SOLID == (XFillStyle)mpStyleItem->GetValue())
971 : {
972 0 : if(mpColorItem)
973 : {
974 0 : const Color aColor = mpColorItem->GetColorValue();
975 0 : const SfxObjectShell* pSh = SfxObjectShell::Current();
976 0 : const SvxColorListItem aItem(*(const SvxColorListItem*)(pSh->GetItem(SID_COLOR_TABLE)));
977 :
978 0 : mpLbFillAttr->Clear();
979 0 : mpLbFillAttr->Enable();
980 0 : mpLbFillAttr->Fill(aItem.GetColorList());
981 0 : mpLbFillAttr->SelectEntry(aColor);
982 : }
983 : else
984 : {
985 0 : mpLbFillAttr->SetNoSelection();
986 : }
987 : }
988 : }
989 0 : break;
990 : }
991 : case SID_GRADIENT_LIST:
992 : {
993 0 : if(SFX_ITEM_AVAILABLE == eState)
994 : {
995 0 : if(mpStyleItem && XFILL_GRADIENT == (XFillStyle)mpStyleItem->GetValue())
996 : {
997 0 : if(mpFillGradientItem)
998 : {
999 0 : const OUString aString( mpFillGradientItem->GetName() );
1000 0 : const SfxObjectShell* pSh = SfxObjectShell::Current();
1001 0 : const SvxGradientListItem aItem( *(const SvxGradientListItem*)(pSh->GetItem(SID_GRADIENT_LIST)));
1002 :
1003 0 : mpLbFillAttr->Clear();
1004 0 : mpLbFillAttr->Enable();
1005 0 : mpLbFillAttr->Fill(aItem.GetGradientList());
1006 0 : mpLbFillAttr->SelectEntry(aString);
1007 : }
1008 : else
1009 : {
1010 0 : mpLbFillAttr->SetNoSelection();
1011 : }
1012 : }
1013 : }
1014 0 : break;
1015 : }
1016 : case SID_HATCH_LIST:
1017 : {
1018 0 : if(SFX_ITEM_AVAILABLE == eState)
1019 : {
1020 0 : if(mpStyleItem && XFILL_HATCH == (XFillStyle)mpStyleItem->GetValue())
1021 : {
1022 0 : if(mpHatchItem)
1023 : {
1024 0 : const OUString aString( mpHatchItem->GetName() );
1025 0 : const SfxObjectShell* pSh = SfxObjectShell::Current();
1026 0 : const SvxHatchListItem aItem(*(const SvxHatchListItem*)(pSh->GetItem(SID_HATCH_LIST)));
1027 :
1028 0 : mpLbFillAttr->Clear();
1029 0 : mpLbFillAttr->Enable();
1030 0 : mpLbFillAttr->Fill(aItem.GetHatchList());
1031 0 : mpLbFillAttr->SelectEntry(aString);
1032 : }
1033 : else
1034 : {
1035 0 : mpLbFillAttr->SetNoSelection();
1036 : }
1037 : }
1038 : }
1039 0 : break;
1040 : }
1041 : case SID_BITMAP_LIST:
1042 : {
1043 0 : if(SFX_ITEM_AVAILABLE == eState)
1044 : {
1045 0 : if(mpStyleItem && XFILL_BITMAP == (XFillStyle)mpStyleItem->GetValue())
1046 : {
1047 0 : if(mpBitmapItem)
1048 : {
1049 0 : const OUString aString( mpBitmapItem->GetName() );
1050 0 : const SfxObjectShell* pSh = SfxObjectShell::Current();
1051 0 : const SvxBitmapListItem aItem(*(const SvxBitmapListItem*)(pSh->GetItem(SID_BITMAP_LIST)));
1052 :
1053 0 : mpLbFillAttr->Clear();
1054 0 : mpLbFillAttr->Enable();
1055 0 : mpLbFillAttr->Fill(aItem.GetBitmapList());
1056 0 : mpLbFillAttr->SelectEntry(aString);
1057 : }
1058 : else
1059 : {
1060 0 : mpLbFillAttr->SetNoSelection();
1061 : }
1062 : }
1063 : }
1064 0 : break;
1065 : }
1066 : }
1067 0 : }
1068 :
1069 :
1070 :
1071 0 : SfxBindings* AreaPropertyPanel::GetBindings()
1072 : {
1073 0 : return mpBindings;
1074 : }
1075 :
1076 :
1077 :
1078 0 : void AreaPropertyPanel::Update()
1079 : {
1080 0 : if(mpStyleItem)
1081 : {
1082 0 : const XFillStyle eXFS = (XFillStyle)mpStyleItem->GetValue();
1083 0 : SfxObjectShell* pSh = SfxObjectShell::Current();
1084 :
1085 0 : switch( eXFS )
1086 : {
1087 : case XFILL_NONE:
1088 : {
1089 0 : mpLbFillAttr->Show();
1090 0 : mpToolBoxColor->Hide();
1091 0 : break;
1092 : }
1093 : case XFILL_SOLID:
1094 : {
1095 0 : if(mpColorItem)
1096 : {
1097 0 : mpLbFillAttr->Hide();
1098 0 : mpToolBoxColor->Show();
1099 0 : mpColorUpdater->Update(mpColorItem->GetColorValue());
1100 : }
1101 : else
1102 : {
1103 0 : mpColorUpdater->Update(COL_WHITE);
1104 : }
1105 0 : break;
1106 : }
1107 : case XFILL_GRADIENT:
1108 : {
1109 0 : mpLbFillAttr->Show();
1110 0 : mpToolBoxColor->Hide();
1111 :
1112 0 : if(pSh && pSh->GetItem(SID_GRADIENT_LIST))
1113 : {
1114 0 : const SvxGradientListItem aItem(*(const SvxGradientListItem*)(pSh->GetItem(SID_GRADIENT_LIST)));
1115 0 : mpLbFillAttr->Enable();
1116 0 : mpLbFillAttr->Clear();
1117 0 : mpLbFillAttr->Fill(aItem.GetGradientList());
1118 :
1119 0 : if(mpFillGradientItem)
1120 : {
1121 0 : const OUString aString(mpFillGradientItem->GetName());
1122 :
1123 0 : mpLbFillAttr->SelectEntry(aString);
1124 : }
1125 : else
1126 : {
1127 0 : mpLbFillAttr->SetNoSelection();
1128 0 : }
1129 : }
1130 : else
1131 : {
1132 0 : mpLbFillAttr->SetNoSelection();
1133 : }
1134 0 : break;
1135 : }
1136 : case XFILL_HATCH:
1137 : {
1138 0 : mpLbFillAttr->Show();
1139 0 : mpToolBoxColor->Hide();
1140 :
1141 0 : if(pSh && pSh->GetItem(SID_HATCH_LIST))
1142 : {
1143 0 : const SvxHatchListItem aItem(*(const SvxHatchListItem*)(pSh->GetItem(SID_HATCH_LIST)));
1144 0 : mpLbFillAttr->Enable();
1145 0 : mpLbFillAttr->Clear();
1146 0 : mpLbFillAttr->Fill(aItem.GetHatchList());
1147 :
1148 0 : if(mpHatchItem)
1149 : {
1150 0 : const OUString aString(mpHatchItem->GetName());
1151 :
1152 0 : mpLbFillAttr->SelectEntry( aString );
1153 : }
1154 : else
1155 : {
1156 0 : mpLbFillAttr->SetNoSelection();
1157 0 : }
1158 : }
1159 : else
1160 : {
1161 0 : mpLbFillAttr->SetNoSelection();
1162 : }
1163 0 : break;
1164 : }
1165 : case XFILL_BITMAP:
1166 : {
1167 0 : mpLbFillAttr->Show();
1168 0 : mpToolBoxColor->Hide();
1169 :
1170 0 : if(pSh && pSh->GetItem(SID_BITMAP_LIST))
1171 : {
1172 0 : const SvxBitmapListItem aItem(*(const SvxBitmapListItem*)(pSh->GetItem(SID_BITMAP_LIST)));
1173 0 : mpLbFillAttr->Enable();
1174 0 : mpLbFillAttr->Clear();
1175 0 : mpLbFillAttr->Fill(aItem.GetBitmapList());
1176 :
1177 0 : if(mpBitmapItem)
1178 : {
1179 0 : const OUString aString(mpBitmapItem->GetName());
1180 :
1181 0 : mpLbFillAttr->SelectEntry(aString);
1182 : }
1183 : else
1184 : {
1185 0 : mpLbFillAttr->SetNoSelection();
1186 0 : }
1187 : }
1188 : else
1189 : {
1190 0 : mpLbFillAttr->SetNoSelection();
1191 : }
1192 0 : break;
1193 : }
1194 : default:
1195 : OSL_ENSURE(false, "Non supported FillType (!)");
1196 0 : break;
1197 : }
1198 : }
1199 0 : }
1200 :
1201 :
1202 :
1203 0 : IMPL_LINK( AreaPropertyPanel, ClickTrGrHdl_Impl, ToolBox*, pToolBox )
1204 : {
1205 0 : maTrGrPopup.Rearrange(mpFloatTransparenceItem.get());
1206 : OSL_ASSERT( pToolBox->GetItemCommand(pToolBox->GetCurItemId()) == UNO_SIDEBARGRADIENT);
1207 0 : maTrGrPopup.Show(*pToolBox);
1208 :
1209 0 : return (0L);
1210 : }
1211 :
1212 :
1213 :
1214 0 : IMPL_LINK(AreaPropertyPanel, ChangeTrgrTypeHdl_Impl, void *, EMPTYARG)
1215 : {
1216 0 : sal_Int32 nSelectType = mpLBTransType->GetSelectEntryPos();
1217 0 : bool bGradient = false;
1218 0 : sal_uInt16 nTrans = 0;
1219 :
1220 0 : if(!nSelectType)
1221 : {
1222 0 : mpBTNGradient->Hide();
1223 0 : mpMTRTransparent->Show();
1224 0 : mpMTRTransparent->Enable();
1225 0 : mpMTRTransparent->SetValue(0);
1226 : }
1227 0 : else if(1 == nSelectType)
1228 : {
1229 0 : mpBTNGradient->Hide();
1230 0 : mpMTRTransparent->Show();
1231 0 : nTrans = mnLastTransSolid;
1232 0 : mpMTRTransparent->SetValue(nTrans);
1233 0 : mpLBTransType->SelectEntryPos(1);
1234 0 : mpMTRTransparent->Enable();
1235 : }
1236 : else
1237 : {
1238 0 : mpBTNGradient->Show();
1239 :
1240 0 : const sal_uInt16 nIdGradient = mpBTNGradient->GetItemId(UNO_SIDEBARGRADIENT);
1241 0 : switch (nSelectType)
1242 : {
1243 : case 2:
1244 0 : mpBTNGradient->SetItemImage(nIdGradient, maImgLinear);
1245 0 : break;
1246 : case 3:
1247 0 : mpBTNGradient->SetItemImage(nIdGradient, maImgAxial);
1248 0 : break;
1249 : case 4:
1250 0 : mpBTNGradient->SetItemImage(nIdGradient, maImgRadial);
1251 0 : break;
1252 : case 5:
1253 0 : mpBTNGradient->SetItemImage(nIdGradient, maImgElli );
1254 0 : break;
1255 : case 6:
1256 0 : mpBTNGradient->SetItemImage(nIdGradient, maImgQuad );
1257 0 : break;
1258 : case 7:
1259 0 : mpBTNGradient->SetItemImage(nIdGradient, maImgSquare);
1260 0 : break;
1261 : }
1262 :
1263 0 : mpMTRTransparent->Hide();
1264 0 : mpBTNGradient->Enable();
1265 0 : bGradient = true;
1266 : }
1267 :
1268 0 : const XFillTransparenceItem aLinearItem(nTrans);
1269 0 : GetBindings()->GetDispatcher()->Execute( SID_ATTR_FILL_TRANSPARENCE, SFX_CALLMODE_RECORD, &aLinearItem, 0L );
1270 :
1271 0 : if(nSelectType > 1)
1272 : {
1273 0 : nSelectType -= 2;
1274 : }
1275 :
1276 0 : XGradient aTmpGradient;
1277 :
1278 0 : switch(nSelectType)
1279 : {
1280 : case XGRAD_LINEAR:
1281 0 : aTmpGradient = maGradientLinear;
1282 0 : break;
1283 : case XGRAD_AXIAL:
1284 0 : aTmpGradient = maGradientAxial;
1285 0 : break;
1286 : case XGRAD_RADIAL:
1287 0 : aTmpGradient = maGradientRadial;
1288 0 : break;
1289 : case XGRAD_ELLIPTICAL:
1290 0 : aTmpGradient = maGradientElliptical;
1291 0 : break;
1292 : case XGRAD_SQUARE:
1293 0 : aTmpGradient = maGradientSquare;
1294 0 : break;
1295 : case XGRAD_RECT:
1296 0 : aTmpGradient = maGradientRect;
1297 0 : break;
1298 : }
1299 :
1300 0 : SfxItemPool* pPool = 0;
1301 0 : const XFillFloatTransparenceItem aGradientItem(pPool, aTmpGradient, bGradient);
1302 0 : GetBindings()->GetDispatcher()->Execute( SID_ATTR_FILL_FLOATTRANSPARENCE, SFX_CALLMODE_RECORD, &aGradientItem, 0L );
1303 :
1304 0 : return( 0L );
1305 : }
1306 :
1307 :
1308 :
1309 0 : IMPL_LINK(AreaPropertyPanel, ModifyTransparentHdl_Impl, void*, EMPTYARG)
1310 : {
1311 0 : const sal_uInt16 nTrans = (sal_uInt16)mpMTRTransparent->GetValue();
1312 0 : mnLastTransSolid = nTrans;
1313 0 : const sal_Int32 nSelectType = mpLBTransType->GetSelectEntryPos();
1314 :
1315 0 : if(nTrans && !nSelectType)
1316 : {
1317 0 : mpLBTransType->SelectEntryPos(1);
1318 : }
1319 :
1320 0 : const XFillTransparenceItem aLinearItem(nTrans);
1321 0 : GetBindings()->GetDispatcher()->Execute( SID_ATTR_FILL_TRANSPARENCE, SFX_CALLMODE_RECORD, &aLinearItem, 0L );
1322 :
1323 0 : return 0L;
1324 : }
1325 :
1326 :
1327 0 : Color AreaPropertyPanel::GetLastColor (void) const
1328 : {
1329 0 : return maLastColor;
1330 : }
1331 :
1332 :
1333 :
1334 :
1335 0 : XGradient AreaPropertyPanel::GetGradient (const XGradientStyle eStyle) const
1336 : {
1337 0 : switch (eStyle)
1338 : {
1339 : default:
1340 : case XGRAD_LINEAR:
1341 0 : return maGradientLinear;
1342 : case XGRAD_AXIAL:
1343 0 : return maGradientAxial;
1344 : case XGRAD_RADIAL:
1345 0 : return maGradientRadial;
1346 : case XGRAD_ELLIPTICAL:
1347 0 : return maGradientElliptical;
1348 : case XGRAD_SQUARE:
1349 0 : return maGradientSquare;
1350 : case XGRAD_RECT:
1351 0 : return maGradientRect;
1352 : }
1353 : }
1354 :
1355 :
1356 :
1357 :
1358 0 : void AreaPropertyPanel::SetGradient (const XGradient& rGradient)
1359 : {
1360 0 : switch (rGradient.GetGradientStyle())
1361 : {
1362 : case XGRAD_LINEAR:
1363 0 : maGradientLinear = rGradient;
1364 0 : break;
1365 : case XGRAD_AXIAL:
1366 0 : maGradientAxial = rGradient;
1367 0 : break;
1368 : case XGRAD_RADIAL:
1369 0 : maGradientRadial = rGradient;
1370 0 : break;
1371 : case XGRAD_ELLIPTICAL:
1372 0 : maGradientElliptical = rGradient;
1373 0 : break;
1374 : case XGRAD_SQUARE:
1375 0 : maGradientSquare = rGradient;
1376 0 : break;
1377 : case XGRAD_RECT:
1378 0 : maGradientRect = rGradient;
1379 0 : break;
1380 : }
1381 0 : }
1382 :
1383 :
1384 :
1385 :
1386 0 : sal_Int32 AreaPropertyPanel::GetSelectedTransparencyTypeIndex (void) const
1387 : {
1388 0 : return mpLBTransType->GetSelectEntryPos();
1389 : }
1390 :
1391 0 : } } // end of namespace svx::sidebar
1392 :
1393 : // eof
|