LibreOffice Module svx (master) 1
AreaPropertyPanelBase.cxx
Go to the documentation of this file.
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 <osl/diagnose.h>
22#include <svx/drawitem.hxx>
23#include <svx/itemwin.hxx>
24#include <svx/svxids.hrc>
25#include <sfx2/objsh.hxx>
26#include <svx/xfltrit.hxx>
27#include <svx/xflftrit.hxx>
29#include <svx/xtable.hxx>
31#include <sfx2/opengrf.hxx>
32#include <sfx2/weldutils.hxx>
33#include <tools/urlobj.hxx>
34#include <bitmaps.hlst>
35#include <comphelper/lok.hxx>
36
37using namespace css;
38using namespace css::uno;
39
40constexpr OUStringLiteral SIDEBARGRADIENT = u"sidebargradient";
41
42namespace svx::sidebar {
43
44namespace {
45
46enum eFillStyle
47{
48 NONE,
49 SOLID,
51 HATCH,
52 BITMAP,
53 PATTERN,
54 USE_BACKGROUND
55};
56
57}
58
61const sal_Int32 AreaPropertyPanelBase::DEFAULT_ANGLE = 0;
63const sal_Int32 AreaPropertyPanelBase::DEFAULT_ENDVALUE = 16777215;
65
67 weld::Widget* pParent,
68 const css::uno::Reference<css::frame::XFrame>& rxFrame)
69 : PanelLayout(pParent, "AreaPropertyPanel", "svx/ui/sidebararea.ui"),
70 mxFrame(rxFrame),
71 meLastXFS(static_cast<sal_uInt16>(-1)),
72 mnLastPosHatch(0),
73 mnLastPosBitmap(0),
74 mnLastPosPattern(0),
75 mnLastTransSolid(50),
76 mxColorTextFT(m_xBuilder->weld_label("filllabel")),
77 mxLbFillType(m_xBuilder->weld_combo_box("fillstylearea")),
78 mxLbFillAttr(m_xBuilder->weld_combo_box("fillattrhb")),
79 mxLbFillGradFrom(new ColorListBox(m_xBuilder->weld_menu_button("fillgrad1"), [this]{ return GetFrameWeld(); })),
80 mxLbFillGradTo(new ColorListBox(m_xBuilder->weld_menu_button("fillgrad2"), [this]{ return GetFrameWeld(); })),
81 mxToolBoxColor(m_xBuilder->weld_toolbar("selectcolor")),
82 mxColorDispatch(new ToolbarUnoDispatcher(*mxToolBoxColor, *m_xBuilder, rxFrame)),
83 mxTrspTextFT(m_xBuilder->weld_label("transparencylabel")),
84 mxLBTransType(m_xBuilder->weld_combo_box("transtype")),
85 mxMTRTransparent(m_xBuilder->weld_metric_spin_button("settransparency", FieldUnit::PERCENT)),
86 mxSldTransparent(m_xBuilder->weld_scale("transparencyslider")),
87 mxBTNGradient(m_xBuilder->weld_toolbar("selectgradient")),
88 mxMTRAngle(m_xBuilder->weld_metric_spin_button("gradangle", FieldUnit::DEGREE)),
89 mxGradientStyle(m_xBuilder->weld_combo_box("gradientstyle")),
90 mxBmpImport(m_xBuilder->weld_button("bmpimport")),
91 maImgAxial(BMP_AXIAL),
92 maImgElli(BMP_ELLI),
93 maImgQuad(BMP_QUAD),
94 maImgRadial(BMP_RADIAL),
95 maImgSquare(BMP_SQUARE),
96 maImgLinear(BMP_LINEAR)
97{
98 Initialize();
99}
100
102{
103 mxTrGrPopup.reset();
104 mxColorTextFT.reset();
105 mxLbFillType.reset();
106 mxLbFillAttr.reset();
107 mxColorDispatch.reset();
108 mxToolBoxColor.reset();
109 mxTrspTextFT.reset();
110 mxLBTransType.reset();
111 mxMTRTransparent.reset();
112 mxSldTransparent.reset();
113 mxBTNGradient.reset();
114 mxMTRAngle.reset();
115 mxLbFillGradFrom.reset();
116 mxLbFillGradTo.reset();
117 mxGradientStyle.reset();
118 mxBmpImport.reset();
119}
120
122{
124
125 mxLbFillAttr->set_size_request(42, -1);
126
132 Color(DEFAULT_STARTVALUE).getBColor(),
133 Color(DEFAULT_ENDVALUE).getBColor()));
135 maGradientLinear.SetGradientStyle(css::awt::GradientStyle_LINEAR);
136
138 maGradientAxial.SetGradientStyle(css::awt::GradientStyle_AXIAL);
139
141 maGradientRadial.SetGradientStyle(css::awt::GradientStyle_RADIAL);
142
144 maGradientElliptical.SetGradientStyle(css::awt::GradientStyle_ELLIPTICAL);
145
147 maGradientSquare.SetGradientStyle(css::awt::GradientStyle_SQUARE);
148
150 maGradientRect.SetGradientStyle(css::awt::GradientStyle_RECT);
151
152
153 mxLbFillType->connect_changed( LINK( this, AreaPropertyPanelBase, SelectFillTypeHdl ) );
154
155 Link<weld::ComboBox&,void> aLink = LINK( this, AreaPropertyPanelBase, SelectFillAttrHdl );
156 mxLbFillAttr->connect_changed( aLink );
157 mxGradientStyle->connect_changed( aLink );
158 Link<ColorListBox&,void> aLink3 = LINK( this, AreaPropertyPanelBase, SelectFillColorHdl );
159 mxLbFillGradFrom->SetSelectHdl( aLink3 );
160 mxLbFillGradTo->SetSelectHdl( aLink3 );
161 mxMTRAngle->connect_value_changed(LINK(this,AreaPropertyPanelBase, ChangeGradientAngle));
162
163 // set a small width to force widgets to take their final width from other widgets in the grid
164 mxLbFillGradFrom->get_widget().set_size_request(42, -1);
165 mxLbFillGradTo->get_widget().set_size_request(42, -1);
166
167 mxLBTransType->connect_changed(LINK(this, AreaPropertyPanelBase, ChangeTrgrTypeHdl_Impl));
168
169 SetTransparency( 50 );
170 mxMTRTransparent->connect_value_changed(LINK(this, AreaPropertyPanelBase, ModifyTransparentHdl_Impl));
171 mxSldTransparent->connect_value_changed(LINK(this, AreaPropertyPanelBase, ModifyTransSliderHdl));
172
173 mxTrGrPopup = std::make_unique<AreaTransparencyGradientPopup>(mxFrame, *this, mxBTNGradient.get());
174
175 mxBTNGradient->set_item_popover(SIDEBARGRADIENT, mxTrGrPopup->getTopLevel());
176 mxBTNGradient->connect_clicked(LINK(this, AreaPropertyPanelBase, ToolbarHdl_Impl));
177
178 mxBTNGradient->set_item_icon_name(SIDEBARGRADIENT, maImgLinear);
179 mxBTNGradient->hide();
180 mxBmpImport->connect_clicked( LINK(this, AreaPropertyPanelBase, ClickImportBitmapHdl));
181}
182
183IMPL_LINK_NOARG(AreaPropertyPanelBase, ToolbarHdl_Impl, const OUString&, void)
184{
185 mxBTNGradient->set_menu_item_active(SIDEBARGRADIENT, !mxBTNGradient->get_menu_item_active(SIDEBARGRADIENT));
186}
187
189{
190 mxSldTransparent->set_value(nVal);
191 mxMTRTransparent->set_value(nVal, FieldUnit::PERCENT);
192}
193
195{
196 SvxOpenGraphicDialog aDlg("Import", GetFrameWeld());
197 aDlg.EnableLink(false);
198 if( aDlg.Execute() != ERRCODE_NONE )
199 return;
200
201 Graphic aGraphic;
202 auto xWait = std::make_unique<weld::WaitObject>(m_xContainer.get());
203 ErrCode nError = aDlg.GetGraphic( aGraphic );
204 xWait.reset();
205 if( nError != ERRCODE_NONE )
206 return;
207
208 mxLbFillAttr->clear();
209
211 {
212 INetURLObject aURL(aDlg.GetPath());
213 OUString aFileName = aURL.GetLastName().getToken(0, '.');
214 OUString aName = aFileName;
215
216 XBitmapListRef pList = pSh->GetItem(SID_BITMAP_LIST)->GetBitmapList();
217
218 tools::Long j = 1;
219 bool bValidBitmapName = false;
220 while( !bValidBitmapName )
221 {
222 bValidBitmapName = true;
223 for( tools::Long i = 0; i < pList->Count() && bValidBitmapName; i++ )
224 {
225 if( aName == pList->GetBitmap(i)->GetName() )
226 {
227 bValidBitmapName = false;
228 aName = aFileName + OUString::number(j++);
229 }
230 }
231 }
232
233 pList->Insert(std::make_unique<XBitmapEntry>(aGraphic, aName));
234 pList->Save();
235
236 SvxFillAttrBox::Fill(*mxLbFillAttr, pList);
237
238 mxLbFillAttr->set_active_text(aName);
239 SelectFillAttrHdl(*mxLbFillAttr);
240 }
241}
242
244{
245 FillStyleChanged(true);
246}
247
249{
250 SelectFillAttrHdl_Impl();
251}
252
254{
255 SelectFillAttrHdl_Impl();
256}
257
259{
260 SelectFillAttrHdl_Impl();
261}
262
264{
265 sal_Int32 nPosFillStyle = static_cast<eFillStyle>(mxLbFillType->get_active());
267
268 // #i122676# dependent from bFillStyleChange, do execute a single or two
269 // changes in one Execute call
270 const bool bFillStyleChange(static_cast<eFillStyle>(meLastXFS) != static_cast<eFillStyle>(nPosFillStyle));
271
272 switch(nPosFillStyle)
273 {
274 case eFillStyle::NONE:
275 {
276 if(bFillStyleChange)
277 {
278 const XFillStyleItem aXFillStyleItem(drawing::FillStyle_NONE);
279 // Need to disable the XFillUseSlideBackgroundItem
280 const XFillUseSlideBackgroundItem aXFillUseSlideBackgroundItem(false);
281 setFillUseBackground(&aXFillStyleItem, aXFillUseSlideBackgroundItem);
282 }
283 break;
284 }
285 case eFillStyle::SOLID:
286 {
287 if(bFillStyleChange)
288 {
289 // #i122676# Single FillStyle change call needed here
290 XFillStyleItem aXFillStyleItem(drawing::FillStyle_SOLID);
291 setFillStyle(aXFillStyleItem);
292 }
293 break;
294 }
295 case eFillStyle::GRADIENT:
296 {
297
298 if (pSh && pSh->GetItem(SID_COLOR_TABLE))
299 {
301 aGradient.SetAngle(Degree10(mxMTRAngle->get_value(FieldUnit::DEGREE) * 10));
302 aGradient.SetGradientStyle(static_cast<css::awt::GradientStyle>(mxGradientStyle->get_active()));
303
304 const XFillGradientItem aXFillGradientItem(mxLbFillAttr->get_active_text(), aGradient);
305
306 // #i122676# Change FillStyle and Gradient in one call
307 XFillStyleItem aXFillStyleItem(drawing::FillStyle_GRADIENT);
308 setFillStyleAndGradient(bFillStyleChange ? &aXFillStyleItem : nullptr, aXFillGradientItem);
309 }
310 break;
311 }
312 case eFillStyle::HATCH:
313 {
314 sal_Int32 nPos = mxLbFillAttr->get_active();
315
316 if (nPos == -1)
317 {
319 }
320
321 if (nPos != -1 && pSh && pSh->GetItem(SID_HATCH_LIST))
322 {
323 const SvxHatchListItem * pItem = pSh->GetItem(SID_HATCH_LIST);
324
325 if(nPos < pItem->GetHatchList()->Count())
326 {
327 const XHatch aHatch = pItem->GetHatchList()->GetHatch(nPos)->GetHatch();
328 const XFillHatchItem aXFillHatchItem( mxLbFillAttr->get_active_text(), aHatch);
329
330 // #i122676# Change FillStyle and Hatch in one call
331 XFillStyleItem aXFillStyleItem(drawing::FillStyle_HATCH);
332 setFillStyleAndHatch(bFillStyleChange ? &aXFillStyleItem : nullptr, aXFillHatchItem);
333 }
334 }
335
336 if (nPos != -1)
337 {
339 }
340 break;
341 }
342 case eFillStyle::BITMAP:
343 {
344 sal_Int32 nPos = mxLbFillAttr->get_active();
345
346 if (nPos == -1)
347 {
349 }
350
351 if (nPos != -1 && pSh && pSh->GetItem(SID_BITMAP_LIST))
352 {
353 const SvxBitmapListItem * pItem = pSh->GetItem(SID_BITMAP_LIST);
354
355 if(nPos < pItem->GetBitmapList()->Count())
356 {
357 const XBitmapEntry* pXBitmapEntry = pItem->GetBitmapList()->GetBitmap(nPos);
358 const XFillBitmapItem aXFillBitmapItem(mxLbFillAttr->get_active_text(), pXBitmapEntry->GetGraphicObject());
359
360 // #i122676# Change FillStyle and Bitmap in one call
361 XFillStyleItem aXFillStyleItem(drawing::FillStyle_BITMAP);
362 setFillStyleAndBitmap(bFillStyleChange ? &aXFillStyleItem : nullptr, aXFillBitmapItem);
363 }
364 }
365
366 if (nPos != -1)
367 {
369 }
370 break;
371 }
372 case eFillStyle::PATTERN:
373 {
374 sal_Int32 nPos = mxLbFillAttr->get_active();
375
376 if (nPos == -1)
377 {
379 }
380
381 if (nPos != -1 && pSh && pSh->GetItem(SID_PATTERN_LIST))
382 {
383 const SvxPatternListItem * pItem = pSh->GetItem(SID_PATTERN_LIST);
384
385 if(nPos < pItem->GetPatternList()->Count())
386 {
387 const XBitmapEntry* pXPatternEntry = pItem->GetPatternList()->GetBitmap(nPos);
388 const XFillBitmapItem aXFillBitmapItem(mxLbFillAttr->get_active_text(), pXPatternEntry->GetGraphicObject());
389
390 // #i122676# Change FillStyle and Bitmap in one call
391 XFillStyleItem aXFillStyleItem(drawing::FillStyle_BITMAP);
392 setFillStyleAndBitmap(bFillStyleChange ? &aXFillStyleItem : nullptr, aXFillBitmapItem);
393 }
394 }
395
396 if (nPos != -1)
397 {
399 }
400 break;
401 }
402 }
405}
406
408{
409 sal_Int32 nPos = static_cast<eFillStyle>(mxLbFillType->get_active());
410 mxLbFillAttr->clear();
412 if (!pSh)
413 return;
414
415 bool bShowLbFillAttr = false;
416 bool bShowLbFillGradFrom = false;
417 bool bShowLbFillGradTo = false;
418 bool bShowGradientStyle = false;
419 bool bShowMTRAngle = false;
420 bool bShowToolBoxColor = false;
421 bool bShowBmpImport = false;
422
423 // #i122676# Do no longer trigger two Execute calls, one for SID_ATTR_FILL_STYLE
424 // and one for setting the fill attribute itself, but add two SfxPoolItems to the
425 // call to get just one action at the SdrObject and to create only one Undo action, too.
426 // Checked that this works in all apps.
427 switch (nPos)
428 {
429 default:
430 case NONE:
431 {
432 if (bUpdateModel)
433 {
434 const XFillStyleItem aXFillStyleItem(drawing::FillStyle_NONE);
435 // Need to disable the XFillUseSlideBackgroundItem
436 const XFillUseSlideBackgroundItem aXFillUseSlideBackgroundItem(false);
437 setFillUseBackground(&aXFillStyleItem, aXFillUseSlideBackgroundItem);
438 }
439
440 break;
441 }
442 case SOLID:
443 {
444 bShowToolBoxColor = true;
445
446 if (bUpdateModel)
447 {
448 const Color aColor = mpColorItem ? mpColorItem->GetColorValue() : COL_AUTO;
449 const XFillColorItem aXFillColorItem("", aColor);
450
451 // #i122676# change FillStyle and Color in one call
452 XFillStyleItem aXFillStyleItem(drawing::FillStyle_SOLID);
453 setFillStyleAndColor(&aXFillStyleItem, aXFillColorItem);
454 }
455 break;
456 }
457 case GRADIENT:
458 {
459 bShowLbFillGradFrom = true;
460 bShowLbFillGradTo = true;
461 bShowGradientStyle = true;
462 bShowMTRAngle = true;
463
464 mxLbFillAttr->set_sensitive(true);
465 mxLbFillGradTo->set_sensitive(true);
466 mxLbFillGradFrom->set_sensitive(true);
467 mxGradientStyle->set_sensitive(true);
468 mxMTRAngle->set_sensitive(true);
469 mxLbFillAttr->clear();
470
471 if (bUpdateModel)
472 {
473 mxLbFillAttr->hide();
474 mxToolBoxColor->hide();
475 mxBmpImport->hide();
476
477 const SvxGradientListItem* pItem = pSh->GetItem(SID_GRADIENT_LIST);
478 if (pItem->GetGradientList()->Count() > 0)
479 {
480 const basegfx::BGradient aGradient
481 = pItem->GetGradientList()->GetGradient(0)->GetGradient();
482 const OUString aName = pItem->GetGradientList()->GetGradient(0)->GetName();
483 const XFillGradientItem aXFillGradientItem(aName, aGradient);
484
485 // #i122676# change FillStyle and Gradient in one call
486 XFillStyleItem aXFillStyleItem(drawing::FillStyle_GRADIENT);
487 setFillStyleAndGradient(&aXFillStyleItem, aXFillGradientItem);
488 mxLbFillGradFrom->SelectEntry(Color(aGradient.GetColorStops().front().getStopColor()));
489 mxLbFillGradTo->SelectEntry(Color(aGradient.GetColorStops().back().getStopColor()));
490
491 // MCGR: preserve in-between ColorStops if given
492 if (aGradient.GetColorStops().size() > 2)
493 maColorStops = basegfx::BColorStops(aGradient.GetColorStops().begin() + 1, aGradient.GetColorStops().end() - 1);
494 else
495 maColorStops.clear();
496
497 mxMTRAngle->set_value(toDegrees(aGradient.GetAngle()), FieldUnit::DEGREE);
498 css::awt::GradientStyle eXGS = aGradient.GetGradientStyle();
499 mxGradientStyle->set_active(sal::static_int_cast<sal_Int32>(eXGS));
500 }
501 }
502 else
503 {
504 if (pSh->GetItem(SID_GRADIENT_LIST))
505 {
507 pSh->GetItem(SID_GRADIENT_LIST)->GetGradientList());
508 mxLbFillGradTo->SetNoSelection();
509 mxLbFillGradFrom->SetNoSelection();
511 {
512 const OUString aString(mpFillGradientItem->GetName());
513 mxLbFillAttr->set_active_text(aString);
514 const basegfx::BGradient aGradient = mpFillGradientItem->GetGradientValue();
515 mxLbFillGradFrom->SelectEntry(Color(aGradient.GetColorStops().front().getStopColor()));
516 mxLbFillGradTo->SelectEntry(Color(aGradient.GetColorStops().back().getStopColor()));
517
518 // MCGR: preserve in-between ColorStops if given
519 if (aGradient.GetColorStops().size() > 2)
520 maColorStops = basegfx::BColorStops(aGradient.GetColorStops().begin() + 1, aGradient.GetColorStops().end() - 1);
521 else
522 maColorStops.clear();
523
524 mxGradientStyle->set_active(
525 sal::static_int_cast<sal_Int32>(aGradient.GetGradientStyle()));
526 if (mxGradientStyle->get_active() == sal_Int32(css::awt::GradientStyle_RADIAL))
527 mxMTRAngle->set_sensitive(false);
528 else
529 mxMTRAngle->set_value(toDegrees(aGradient.GetAngle()),
530 FieldUnit::DEGREE);
531 }
532 else
533 {
534 mxLbFillAttr->set_active(-1);
535 }
536 }
537 else
538 {
539 mxLbFillAttr->set_active(-1);
540 }
541 }
542 break;
543 }
544 case HATCH:
545 {
546 bShowLbFillAttr = true;
547
548 const SvxHatchListItem* pItem(pSh->GetItem(SID_HATCH_LIST));
549 if (pItem)
550 {
551 const XHatchListRef& pXHatchList(pItem->GetHatchList());
552 mxLbFillAttr->set_sensitive(true);
553 mxLbFillAttr->clear();
554 SvxFillAttrBox::Fill(*mxLbFillAttr, pXHatchList);
555
556 if (mnLastPosHatch != -1)
557 {
558 if (mnLastPosHatch < pXHatchList->Count())
559 {
560 const XHatch aHatch = pXHatchList->GetHatch(mnLastPosHatch)->GetHatch();
561 const OUString aName = pXHatchList->GetHatch(mnLastPosHatch)->GetName();
562 const XFillHatchItem aXFillHatchItem(aName, aHatch);
563
564 // #i122676# change FillStyle and Hatch in one call
565 if (bUpdateModel)
566 {
567 XFillStyleItem aXFillStyleItem(drawing::FillStyle_HATCH);
568 setFillStyleAndHatch(&aXFillStyleItem, aXFillHatchItem);
569 }
570 mxLbFillAttr->set_active(mnLastPosHatch);
571 }
572 }
573 }
574 else
575 {
576 mxLbFillAttr->set_sensitive(false);
577 }
578 break;
579 }
580 case BITMAP:
581 case PATTERN:
582 {
583 bShowLbFillAttr = true;
584 mxLbFillAttr->set_sensitive(true);
585 mxLbFillAttr->clear();
586
587 OUString aName;
588 GraphicObject aBitmap;
589 if (nPos == static_cast<sal_Int32>(BITMAP))
590 {
592 bShowBmpImport = true;
593 const SvxBitmapListItem* pItem = pSh->GetItem(SID_BITMAP_LIST);
594 if (pItem)
595 {
596 const XBitmapListRef& pXBitmapList(pItem->GetBitmapList());
597 SvxFillAttrBox::Fill(*mxLbFillAttr, pXBitmapList);
598
599 if (mnLastPosBitmap != -1)
600 {
601 if (mnLastPosBitmap < pXBitmapList->Count())
602 {
603 const XBitmapEntry* pXBitmapEntry
604 = pXBitmapList->GetBitmap(mnLastPosBitmap);
605 aBitmap = pXBitmapEntry->GetGraphicObject();
606 aName = pXBitmapEntry->GetName();
607 mxLbFillAttr->set_active(mnLastPosBitmap);
608 }
609 }
610 }
611 else
612 {
613 bShowBmpImport = false;
614 }
615 }
616 else if (nPos == static_cast<sal_Int32>(PATTERN))
617 {
618 const SvxPatternListItem* pItem = pSh->GetItem(SID_PATTERN_LIST);
619 if (pItem)
620 {
621 const XPatternListRef& pXPatternList(pItem->GetPatternList());
622 SvxFillAttrBox::Fill(*mxLbFillAttr, pXPatternList);
623
624 if (mnLastPosPattern != -1)
625 {
626 if (mnLastPosPattern < pXPatternList->Count())
627 {
628 const XBitmapEntry* pXPatternEntry
629 = pXPatternList->GetBitmap(mnLastPosPattern);
630 aBitmap = pXPatternEntry->GetGraphicObject();
631 aName = pXPatternEntry->GetName();
632 mxLbFillAttr->set_active(mnLastPosPattern);
633 }
634 }
635 }
636 else
637 {
638 bShowLbFillAttr = false;
639 }
640 }
641 if (bUpdateModel)
642 {
643 const XFillBitmapItem aXFillBitmapItem(aName, aBitmap);
644 const XFillStyleItem aXFillStyleItem(drawing::FillStyle_BITMAP);
645 setFillStyleAndBitmap(&aXFillStyleItem, aXFillBitmapItem);
646 }
647 break;
648 }
649 case USE_BACKGROUND:
650 {
651 // No transparencies here
652 mxLBTransType->hide();
653 mxTrspTextFT->hide();
654 mxMTRTransparent->hide();
655 mxSldTransparent->hide();
656 mxBTNGradient->hide();
657 if (bUpdateModel)
658 {
659 const XFillStyleItem aXFillStyleItem(drawing::FillStyle_NONE);
660 const XFillUseSlideBackgroundItem aXFillUseSlideBackgroundItem(true);
661 setFillUseBackground(&aXFillStyleItem, aXFillUseSlideBackgroundItem);
662 break;
663 }
664 }
665 }
666
667 mxLbFillAttr->set_visible(bShowLbFillAttr);
668 mxLbFillGradFrom->set_visible(bShowLbFillGradFrom);
669 mxLbFillGradTo->set_visible(bShowLbFillGradTo);
670 mxGradientStyle->set_visible(bShowGradientStyle);
671 mxMTRAngle->set_visible(bShowMTRAngle);
672 mxToolBoxColor->set_visible(bShowToolBoxColor);
673 mxBmpImport->set_visible(bShowBmpImport);
674
675 meLastXFS = static_cast<sal_uInt16>(nPos);
676
679}
680
682{
684 {
685 bool bZeroValue(false);
686
688 {
689 const sal_uInt16 nValue(mpTransparenceItem->GetValue());
690
691 if(!nValue)
692 {
693 bZeroValue = true;
694 }
695 else if(nValue <= 100)
696 {
697 mxLBTransType->set_sensitive(true);
698 mxTrspTextFT->set_sensitive(true);
699 mxLBTransType->set_active(1);
700 mxBTNGradient->hide();
701 mxMTRTransparent->show();
702 mxSldTransparent->show();
703 mxMTRTransparent->set_sensitive(true);
704 mxSldTransparent->set_sensitive(true);
706 }
707
708 if (!bZeroValue && mxTrGrPopup)
709 {
710 mxBTNGradient->set_menu_item_active(SIDEBARGRADIENT, false);
711 }
712 }
713
714 if(bZeroValue && mpFloatTransparenceItem)
715 {
716 if(mpFloatTransparenceItem->IsEnabled())
717 {
718 const basegfx::BGradient& rGradient = mpFloatTransparenceItem->GetGradientValue();
719 sal_Int32 nEntryPos(0);
720 OUString* pImage = nullptr;
721
722 mxLBTransType->set_sensitive(true);
723 mxTrspTextFT->set_sensitive(true);
724 mxMTRTransparent->hide();
725 mxSldTransparent->hide();
726 mxBTNGradient->set_sensitive(true);
727 mxBTNGradient->show();
728
729 switch(rGradient.GetGradientStyle())
730 {
731 default:
732 case css::awt::GradientStyle_LINEAR:
733 {
734 nEntryPos = 2;
735 pImage = &maImgLinear;
736 break;
737 }
738 case css::awt::GradientStyle_AXIAL:
739 {
740 nEntryPos = 3;
741 pImage = &maImgAxial;
742 break;
743 }
744 case css::awt::GradientStyle_RADIAL:
745 {
746 nEntryPos = 4;
747 pImage = &maImgRadial;
748 break;
749 }
750 case css::awt::GradientStyle_ELLIPTICAL:
751 {
752 nEntryPos = 5;
753 pImage = &maImgElli;
754 break;
755 }
756 case css::awt::GradientStyle_SQUARE:
757 {
758 nEntryPos = 6;
759 pImage = &maImgQuad;
760 break;
761 }
762 case css::awt::GradientStyle_RECT:
763 {
764 nEntryPos = 7;
765 pImage = &maImgSquare;
766 break;
767 }
768 }
769 mxLBTransType->set_active(nEntryPos);
770 mxBTNGradient->set_item_icon_name(SIDEBARGRADIENT, *pImage);
771 mxTrGrPopup->Rearrange(mpFloatTransparenceItem.get());
772 bZeroValue = false;
773 }
774 else
775 {
776 bZeroValue = true;
777 }
778 }
779
780 if(bZeroValue)
781 {
782 mxLBTransType->set_sensitive(true);
783 mxTrspTextFT->set_sensitive(true);
784 mxLBTransType->set_active(0);
785 mxBTNGradient->hide();
786 mxMTRTransparent->set_sensitive(true);
787 mxSldTransparent->set_sensitive(true);
788 mxMTRTransparent->show();
789 mxSldTransparent->show();
791 }
792 }
793 else
794 {
795 // no transparency at all
796 mxLBTransType->set_active(-1);
797 mxLBTransType->set_sensitive(false);
798 mxTrspTextFT->set_sensitive(false);
799 mxMTRTransparent->set_sensitive(false);
800 mxSldTransparent->set_sensitive(false);
801 mxMTRTransparent->show();
802 mxSldTransparent->show();
803 mxBTNGradient->set_sensitive(false);
804 mxBTNGradient->hide();
805 }
806}
807
808void AreaPropertyPanelBase::updateFillTransparence(bool bDisabled, bool bDefaultOrSet, const SfxPoolItem* pState)
809{
810 if (bDisabled)
811 {
812 mpTransparenceItem.reset();
813 return;
814 }
815 else if (bDefaultOrSet)
816 {
817 if (pState)
818 {
819 const SfxUInt16Item* pItem = static_cast<const SfxUInt16Item*>(pState);
820 mpTransparenceItem.reset(pItem->Clone());
821 }
822 else
823 {
824 mpTransparenceItem.reset();
825 }
826 }
827 else
828 {
829 mpTransparenceItem.reset();
830 }
831
832 // update transparency settings dependent of mpTransparenceItem and mpFloatTransparenceItem
834}
835
836void AreaPropertyPanelBase::updateFillFloatTransparence(bool bDisabled, bool bDefaultOrSet, const SfxPoolItem* pState)
837{
838 if (bDisabled)
839 {
841 return;
842 }
843
844 if (bDefaultOrSet)
845 {
846 if (pState)
847 {
848 const XFillFloatTransparenceItem* pItem = static_cast<const XFillFloatTransparenceItem*>(pState);
849 mpFloatTransparenceItem.reset(pItem->Clone());
850 }
851 else
852 {
854 }
855 }
856 else
857 {
859 }
860
861 // update transparency settings dependent of mpTransparenceItem and mpFloatTransparenceItem
863}
864
865void AreaPropertyPanelBase::updateFillStyle(bool bDisabled, bool bDefaultOrSet, const SfxPoolItem* pState)
866{
867 if(bDisabled)
868 {
869 mxLbFillType->set_sensitive(false);
870 mxColorTextFT->set_sensitive(false);
871 mxLbFillType->set_active(-1);
872 mxLbFillAttr->show();
873 mxLbFillAttr->set_sensitive(false);
874 mxLbFillAttr->set_active(-1);
875 mxToolBoxColor->hide();
876 meLastXFS = static_cast<sal_uInt16>(-1);
877 mpStyleItem.reset();
878 }
879 else if (bDefaultOrSet && pState)
880 {
881 const XFillStyleItem* pItem = static_cast<const XFillStyleItem*>(pState);
882 mpStyleItem.reset(pItem->Clone());
883 mxLbFillType->set_sensitive(true);
884 mxColorTextFT->set_sensitive(true);
885 drawing::FillStyle eXFS = mpStyleItem->GetValue();
886 eFillStyle nPos = NONE;
887 switch(eXFS)
888 {
889 default:
890 case drawing::FillStyle_NONE:
891 {
892 mxLbFillAttr->hide();
893 // "Use slide background" also uses FillStyle_NONE internally,
894 // don't switch listbox in that case (will be handled by updateFillUseBackground)
895 nPos = meLastXFS == USE_BACKGROUND ? USE_BACKGROUND : NONE;
896 break;
897 }
898 case drawing::FillStyle_SOLID:
899 nPos = SOLID;
900 break;
901 case drawing::FillStyle_GRADIENT:
902 nPos = GRADIENT;
903 break;
904 case drawing::FillStyle_HATCH:
905 nPos = HATCH;
906 break;
907 case drawing::FillStyle_BITMAP:
908 {
909 if(mpBitmapItem)
910 {
911 if(!mpBitmapItem->isPattern())
912 nPos = BITMAP;
913 else
914 nPos = PATTERN;
915 }
916 else
917 nPos = BITMAP;
918 break;
919 }
920 }
921 meLastXFS = static_cast< sal_uInt16 >(mxLbFillType->get_active());
922 mxLbFillType->set_active(static_cast< sal_Int32 >(nPos));
923 FillStyleChanged(false);
924 return;
925 }
926
927 mxLbFillType->set_active(-1);
928 mxLbFillAttr->show();
929 mxLbFillAttr->set_sensitive(false);
930 mxLbFillAttr->set_active(-1);
931 mxToolBoxColor->hide();
932 meLastXFS = static_cast<sal_uInt16>(-1);
933 mpStyleItem.reset();
934}
935
936void AreaPropertyPanelBase::updateFillGradient(bool bDisabled, bool bDefaultOrSet, const SfxPoolItem* pState)
937{
938 if (bDefaultOrSet)
939 {
940 const XFillGradientItem* pItem = static_cast<const XFillGradientItem*>(pState);
941 mpFillGradientItem.reset(pItem ? pItem->Clone() : nullptr);
942 }
943
944 if(mpStyleItem && drawing::FillStyle_GRADIENT == mpStyleItem->GetValue())
945 {
946 mxLbFillAttr->hide();
947 mxLbFillGradFrom->show();
948 mxLbFillGradTo->show();
949 mxMTRAngle->show();
950 mxGradientStyle->show();
951 mxToolBoxColor->hide();
952
953 if (bDefaultOrSet)
954 {
955 mxLbFillType->set_active(GRADIENT);
956 FillStyleChanged(false);
957 }
958 else if(bDisabled)
959 {
960 mxLbFillGradFrom->SetNoSelection();
961 mxLbFillGradTo->SetNoSelection();
962 mxLbFillGradFrom->set_sensitive(false);
963 mxLbFillGradTo->set_sensitive(false);
964 mxMTRAngle->set_sensitive(false);
965 mxGradientStyle->set_sensitive(false);
966 }
967 else
968 {
969 mxLbFillGradFrom->SetNoSelection();
970 mxLbFillGradTo->SetNoSelection();
971 }
972 }
973}
974
975void AreaPropertyPanelBase::updateFillHatch(bool bDisabled, bool bDefaultOrSet, const SfxPoolItem* pState)
976{
977 if (bDefaultOrSet)
978 {
979 const XFillHatchItem* pItem = static_cast<const XFillHatchItem*>(pState);
980 mpHatchItem.reset(pItem ? pItem->Clone() : nullptr);
981 }
982
983 if(mpStyleItem && drawing::FillStyle_HATCH == mpStyleItem->GetValue())
984 {
985 mxLbFillAttr->show();
986 mxToolBoxColor->hide();
987
988 if (bDefaultOrSet)
989 {
990 mxLbFillAttr->set_sensitive(true);
991 mxLbFillType->set_active(HATCH);
992 FillStyleChanged(false);
993 }
994 else if(bDisabled)
995 {
996 mxLbFillAttr->set_sensitive(false);
997 mxLbFillAttr->set_active(-1);
998 }
999 else
1000 {
1001 mxLbFillAttr->set_active(-1);
1002 }
1003 }
1004 FillStyleChanged(false);
1005}
1006
1007void AreaPropertyPanelBase::updateFillColor(bool bDefaultOrSet, const SfxPoolItem* pState)
1008{
1009 if (bDefaultOrSet)
1010 {
1011 const XFillColorItem* pItem = static_cast<const XFillColorItem*>(pState);
1012 mpColorItem.reset(pItem ? pItem->Clone() : nullptr);
1013 }
1014
1015 if(mpStyleItem && drawing::FillStyle_SOLID == mpStyleItem->GetValue())
1016 {
1017 mxLbFillAttr->hide();
1018 mxToolBoxColor->show();
1019 mxLbFillType->set_active(SOLID);
1020 FillStyleChanged(false);
1021 }
1022}
1023
1024void AreaPropertyPanelBase::updateFillBitmap(bool bDisabled, bool bDefaultOrSet, const SfxPoolItem* pState)
1025{
1026 if (bDefaultOrSet)
1027 {
1028 const XFillBitmapItem* pItem = static_cast<const XFillBitmapItem*>(pState);
1029 mpBitmapItem.reset(pItem ? pItem->Clone() : nullptr);
1030 }
1031
1032 if(mpStyleItem && drawing::FillStyle_BITMAP == mpStyleItem->GetValue())
1033 {
1034 mxLbFillAttr->show();
1035 mxToolBoxColor->hide();
1036
1037 if (bDefaultOrSet)
1038 {
1039 if(mpBitmapItem->isPattern())
1040 mxLbFillType->set_active(PATTERN);
1041 else
1042 mxLbFillType->set_active(BITMAP);
1043 FillStyleChanged(false);
1044 }
1045 else if(bDisabled)
1046 {
1047 mxLbFillAttr->hide();
1048 mxLbFillAttr->set_active(-1);
1049 }
1050 else
1051 {
1052 mxLbFillAttr->set_active(-1);
1053 }
1054 }
1055}
1056
1057void AreaPropertyPanelBase::updateFillUseBackground(bool bDisabled, bool bDefaultOrSet, const SfxPoolItem* pState)
1058{
1059 if (bDisabled)
1060 return;
1061
1062 if (bDefaultOrSet)
1063 {
1064 if (pState)
1065 {
1066 const XFillUseSlideBackgroundItem* pItem = static_cast<const XFillUseSlideBackgroundItem*>(pState);
1067 // When XFillUseSlideBackgroundItem is true, select "Use Background Fill". When false, select "None"
1068 int nPos = pItem->GetValue() ? USE_BACKGROUND : NONE;
1069 mxLbFillType->set_active(nPos);
1070 FillStyleChanged(false);
1071 }
1072 }
1073}
1074
1076 sal_uInt16 nSID,
1077 SfxItemState eState,
1078 const SfxPoolItem* pState)
1079{
1080 const bool bDisabled(SfxItemState::DISABLED == eState);
1081 const bool bDefaultOrSet(SfxItemState::DEFAULT <= eState);
1082 const bool bDefault(SfxItemState::DEFAULT == eState);
1083
1084 switch(nSID)
1085 {
1086 case SID_ATTR_FILL_TRANSPARENCE:
1087 updateFillTransparence(bDisabled, bDefaultOrSet, pState);
1088 break;
1089 case SID_ATTR_FILL_FLOATTRANSPARENCE:
1090 updateFillFloatTransparence(bDisabled, bDefaultOrSet, pState);
1091 break;
1092 case SID_ATTR_FILL_STYLE:
1093 updateFillStyle(bDisabled, bDefaultOrSet, pState);
1094 break;
1095 case SID_ATTR_FILL_COLOR:
1096 updateFillColor(bDefaultOrSet, pState);
1097 break;
1098 case SID_ATTR_FILL_GRADIENT:
1099 updateFillGradient(bDisabled, bDefaultOrSet, pState);
1100 break;
1101 case SID_ATTR_FILL_HATCH:
1102 updateFillHatch(bDisabled, bDefaultOrSet, pState);
1103 break;
1104 case SID_ATTR_FILL_BITMAP:
1105 updateFillBitmap(bDisabled, bDefaultOrSet, pState);
1106 break;
1107 case SID_ATTR_FILL_USE_SLIDE_BACKGROUND:
1108 updateFillUseBackground(bDisabled, bDefaultOrSet, pState);
1109 break;
1110 case SID_GRADIENT_LIST:
1111 {
1112 if(bDefault)
1113 {
1114 if(mpStyleItem && drawing::FillStyle_GRADIENT == mpStyleItem->GetValue())
1115 {
1117 {
1118 const OUString aString( mpFillGradientItem->GetName() );
1120 mxLbFillAttr->clear();
1121 if (pSh)
1122 {
1123 mxLbFillAttr->set_sensitive(true);
1124 SvxFillAttrBox::Fill(*mxLbFillAttr, pSh->GetItem(SID_GRADIENT_LIST)->GetGradientList());
1125 }
1126 mxLbFillAttr->set_active_text(aString);
1127 }
1128 else
1129 {
1130 mxLbFillAttr->set_active(-1);
1131 }
1132 }
1133 }
1134 break;
1135 }
1136 case SID_HATCH_LIST:
1137 {
1138 if(bDefault)
1139 {
1140 if(mpStyleItem && drawing::FillStyle_HATCH == mpStyleItem->GetValue())
1141 {
1142 if(mpHatchItem)
1143 {
1144 const OUString aString( mpHatchItem->GetName() );
1146 mxLbFillAttr->clear();
1147 if (pSh)
1148 {
1149 mxLbFillAttr->set_sensitive(true);
1150 SvxFillAttrBox::Fill(*mxLbFillAttr, pSh->GetItem(SID_HATCH_LIST)->GetHatchList());
1151 }
1152 mxLbFillAttr->set_active_text(aString);
1153 }
1154 else
1155 {
1156 mxLbFillAttr->set_active(-1);
1157 }
1158 }
1159 }
1160 break;
1161 }
1162 case SID_BITMAP_LIST:
1163 case SID_PATTERN_LIST:
1164 {
1165 if(bDefault)
1166 {
1167 if(mpStyleItem && drawing::FillStyle_BITMAP == mpStyleItem->GetValue())
1168 {
1169 if(mpBitmapItem)
1170 {
1171 const OUString aString( mpBitmapItem->GetName() );
1173 mxLbFillAttr->clear();
1174 mxLbFillAttr->show();
1175 if (pSh)
1176 {
1177 if(nSID == SID_BITMAP_LIST)
1178 SvxFillAttrBox::Fill(*mxLbFillAttr, pSh->GetItem(SID_BITMAP_LIST)->GetBitmapList());
1179 else if(nSID == SID_PATTERN_LIST)
1180 SvxFillAttrBox::Fill(*mxLbFillAttr, pSh->GetItem(SID_PATTERN_LIST)->GetPatternList());
1181 }
1182 mxLbFillAttr->set_active_text(aString);
1183 }
1184 else
1185 {
1186 mxLbFillAttr->set_active(-1);
1187 }
1188 }
1189 }
1190 break;
1191 }
1192 }
1193 FillStyleChanged(false);
1194}
1195
1197{
1198 const sal_uInt16 nVal = mxSldTransparent->get_value();
1199 SetTransparency(nVal);
1200 const XFillTransparenceItem aLinearItem(nVal);
1201 setFillTransparence(aLinearItem);
1202}
1203
1205{
1206 sal_Int32 nSelectType = mxLBTransType->get_active();
1207 bool bGradient = false;
1208 sal_uInt16 nTrans = 0;
1209
1210 if(!nSelectType)
1211 {
1212 mxBTNGradient->hide();
1213 mxMTRTransparent->show();
1214 mxSldTransparent->show();
1215 mxMTRTransparent->set_sensitive(true);
1216 mxSldTransparent->set_sensitive(true);
1217 SetTransparency(0);
1218 }
1219 else if(1 == nSelectType)
1220 {
1221 mxBTNGradient->hide();
1222 mxMTRTransparent->show();
1223 mxSldTransparent->show();
1224 nTrans = mnLastTransSolid;
1225 mxMTRTransparent->set_value(nTrans, FieldUnit::PERCENT);
1226 mxLBTransType->set_active(1);
1227 mxMTRTransparent->set_sensitive(true);
1228 mxSldTransparent->set_sensitive(true);
1229 }
1230 else
1231 {
1232 mxBTNGradient->show();
1233
1234 switch (nSelectType)
1235 {
1236 case 2:
1237 mxBTNGradient->set_item_icon_name(SIDEBARGRADIENT, maImgLinear);
1238 break;
1239 case 3:
1240 mxBTNGradient->set_item_icon_name(SIDEBARGRADIENT, maImgAxial);
1241 break;
1242 case 4:
1243 mxBTNGradient->set_item_icon_name(SIDEBARGRADIENT, maImgRadial);
1244 break;
1245 case 5:
1246 mxBTNGradient->set_item_icon_name(SIDEBARGRADIENT, maImgElli);
1247 break;
1248 case 6:
1249 mxBTNGradient->set_item_icon_name(SIDEBARGRADIENT, maImgQuad);
1250 break;
1251 case 7:
1252 mxBTNGradient->set_item_icon_name(SIDEBARGRADIENT, maImgSquare);
1253 break;
1254 }
1255
1256 mxMTRTransparent->hide();
1257 mxSldTransparent->hide();
1258 mxBTNGradient->set_sensitive(true);
1259 bGradient = true;
1260 }
1261
1262 const XFillTransparenceItem aLinearItem(nTrans);
1263 setFillTransparence(aLinearItem);
1264
1265 if(nSelectType > 1)
1266 {
1267 nSelectType -= 2;
1268 }
1269
1270 basegfx::BGradient aTmpGradient;
1271
1272 switch(static_cast<css::awt::GradientStyle>(nSelectType))
1273 {
1274 case css::awt::GradientStyle_LINEAR:
1275 aTmpGradient = maGradientLinear;
1276 break;
1277 case css::awt::GradientStyle_AXIAL:
1278 aTmpGradient = maGradientAxial;
1279 break;
1280 case css::awt::GradientStyle_RADIAL:
1281 aTmpGradient = maGradientRadial;
1282 break;
1283 case css::awt::GradientStyle_ELLIPTICAL:
1284 aTmpGradient = maGradientElliptical;
1285 break;
1286 case css::awt::GradientStyle_SQUARE:
1287 aTmpGradient = maGradientSquare;
1288 break;
1289 case css::awt::GradientStyle_RECT:
1290 aTmpGradient = maGradientRect;
1291 break;
1292 default:
1293 break;
1294 }
1295
1296 const XFillFloatTransparenceItem aGradientItem(aTmpGradient, bGradient);
1297 setFillFloatTransparence(aGradientItem);
1298}
1299
1301{
1302 const sal_uInt16 nTrans = static_cast<sal_uInt16>(mxMTRTransparent->get_value(FieldUnit::PERCENT));
1303 mnLastTransSolid = nTrans;
1304 SetTransparency(nTrans);
1305 const sal_Int32 nSelectType = mxLBTransType->get_active();
1306
1307 if(nTrans && !nSelectType)
1308 {
1309 mxLBTransType->set_active(1);
1310 }
1311
1312 const XFillTransparenceItem aLinearItem(nTrans);
1313 setFillTransparence(aLinearItem);
1314}
1315
1316const basegfx::BGradient& AreaPropertyPanelBase::GetGradient (const css::awt::GradientStyle eStyle) const
1317{
1318 switch (eStyle)
1319 {
1320 default:
1321 case css::awt::GradientStyle_LINEAR:
1322 return maGradientLinear;
1323 case css::awt::GradientStyle_AXIAL:
1324 return maGradientAxial;
1325 case css::awt::GradientStyle_RADIAL:
1326 return maGradientRadial;
1327 case css::awt::GradientStyle_ELLIPTICAL:
1328 return maGradientElliptical;
1329 case css::awt::GradientStyle_SQUARE:
1330 return maGradientSquare;
1331 case css::awt::GradientStyle_RECT:
1332 return maGradientRect;
1333 }
1334}
1335
1337{
1338 switch (rGradient.GetGradientStyle())
1339 {
1340 case css::awt::GradientStyle_LINEAR:
1341 maGradientLinear = rGradient;
1342 break;
1343 case css::awt::GradientStyle_AXIAL:
1344 maGradientAxial = rGradient;
1345 break;
1346 case css::awt::GradientStyle_RADIAL:
1347 maGradientRadial = rGradient;
1348 break;
1349 case css::awt::GradientStyle_ELLIPTICAL:
1350 maGradientElliptical = rGradient;
1351 break;
1352 case css::awt::GradientStyle_SQUARE:
1353 maGradientSquare = rGradient;
1354 break;
1355 case css::awt::GradientStyle_RECT:
1356 maGradientRect = rGradient;
1357 break;
1358 default:
1359 break;
1360 }
1361}
1362
1364{
1365 return mxLBTransType->get_active();
1366}
1367
1369{
1370 basegfx::BColorStops aColorStops;
1371
1372 aColorStops.emplace_back(0.0, mxLbFillGradFrom->GetSelectEntryColor().getBColor());
1373
1374 if(!maColorStops.empty())
1375 {
1376 aColorStops.insert(aColorStops.begin(), maColorStops.begin(), maColorStops.end());
1377 }
1378
1379 aColorStops.emplace_back(1.0, mxLbFillGradTo->GetSelectEntryColor().getBColor());
1380
1381 return aColorStops;
1382}
1383
1384} // end of namespace svx::sidebar
1385
1386/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
constexpr OUStringLiteral SIDEBARGRADIENT
sfx2::sidebar::Panel * m_pPanel
virtual weld::Window * GetFrameWeld() const
bool GetValue() const
static SAL_WARN_UNUSED_RESULT SfxObjectShell * Current()
const SfxPoolItem * GetItem(sal_uInt16 nSlotId) const
virtual SfxUInt16Item * Clone(SfxItemPool *=nullptr) const override
const XBitmapListRef & GetBitmapList() const
Definition: drawitem.hxx:122
const XGradientListRef & GetGradientList() const
Definition: drawitem.hxx:73
const XHatchListRef & GetHatchList() const
Definition: drawitem.hxx:97
OUString GetPath() const
ErrCode GetGraphic(Graphic &) const
const XPatternListRef & GetPatternList() const
Definition: drawitem.hxx:146
const GraphicObject & GetGraphicObject() const
Definition: xtable.hxx:125
virtual XFillBitmapItem * Clone(SfxItemPool *pPool=nullptr) const override
Definition: xattrbmp.cxx:150
virtual XFillColorItem * Clone(SfxItemPool *pPool=nullptr) const override
Definition: xattr.cxx:1933
virtual XFillFloatTransparenceItem * Clone(SfxItemPool *pPool=nullptr) const override
Definition: xattr.cxx:2430
virtual XFillGradientItem * Clone(SfxItemPool *pPool=nullptr) const override
Definition: xattr.cxx:2123
virtual XFillHatchItem * Clone(SfxItemPool *pPool=nullptr) const override
Definition: xattr.cxx:2559
virtual XFillStyleItem * Clone(SfxItemPool *pPool=nullptr) const override
Definition: xattr.cxx:1799
Item to enable slide background for filled objects.
const OUString & GetName() const
void SetGradientStyle(css::awt::GradientStyle eNewStyle)
void SetColorStops(const basegfx::BColorStops &rSteps)
void SetYOffset(sal_uInt16 nNewOffset)
void SetXOffset(sal_uInt16 nNewOffset)
void SetBorder(sal_uInt16 nNewBorder)
const basegfx::BColorStops & GetColorStops() const
Degree10 GetAngle() const
css::awt::GradientStyle GetGradientStyle() const
void SetAngle(Degree10 nNewAngle)
std::unique_ptr< XFillStyleItem > mpStyleItem
std::unique_ptr< weld::ComboBox > mxLbFillAttr
virtual void setFillUseBackground(const XFillStyleItem *pStyleItem, const XFillUseSlideBackgroundItem &rItem)=0
std::unique_ptr< ToolbarUnoDispatcher > mxColorDispatch
std::unique_ptr< XFillBitmapItem > mpBitmapItem
AreaPropertyPanelBase(weld::Widget *pParent, const css::uno::Reference< css::frame::XFrame > &rxFrame)
void updateFillUseBackground(bool BDisabled, bool bDefaultOrSet, const SfxPoolItem *pState)
std::unique_ptr< SfxUInt16Item > mpTransparenceItem
void updateFillFloatTransparence(bool bDisabled, bool bDefaultOrSet, const SfxPoolItem *pState)
std::unique_ptr< weld::ComboBox > mxLbFillType
std::unique_ptr< weld::ComboBox > mxGradientStyle
virtual void setFillStyleAndBitmap(const XFillStyleItem *pStyleItem, const XFillBitmapItem &aHatchItem)=0
void updateFillColor(bool bDefaultOrSet, const SfxPoolItem *pState)
void updateFillHatch(bool bDisabled, bool bDefaultOrSet, const SfxPoolItem *pState)
const basegfx::BGradient & GetGradient(const css::awt::GradientStyle eStyle) const
std::unique_ptr< weld::Button > mxBmpImport
std::unique_ptr< ColorListBox > mxLbFillGradFrom
std::unique_ptr< XFillGradientItem > mpFillGradientItem
virtual void setFillStyle(const XFillStyleItem &rItem)=0
const css::uno::Reference< css::frame::XFrame > & mxFrame
std::unique_ptr< ColorListBox > mxLbFillGradTo
std::unique_ptr< weld::Toolbar > mxBTNGradient
std::unique_ptr< XFillHatchItem > mpHatchItem
std::unique_ptr< XFillFloatTransparenceItem > mpFloatTransparenceItem
void SetGradient(const basegfx::BGradient &rGradient)
void updateFillStyle(bool bDisabled, bool bDefaultOrSet, const SfxPoolItem *pState)
virtual void setFillStyleAndHatch(const XFillStyleItem *pStyleItem, const XFillHatchItem &aHatchItem)=0
std::unique_ptr< weld::Label > mxTrspTextFT
virtual void setFillStyleAndGradient(const XFillStyleItem *pStyleItem, const XFillGradientItem &aGradientItem)=0
virtual void NotifyItemUpdate(const sal_uInt16 nSId, const SfxItemState eState, const SfxPoolItem *pState) override
std::unique_ptr< AreaTransparencyGradientPopup > mxTrGrPopup
void updateFillBitmap(bool BDisabled, bool bDefaultOrSet, const SfxPoolItem *pState)
void updateFillGradient(bool bDisabled, bool bDefaultOrSet, const SfxPoolItem *pState)
std::unique_ptr< XFillColorItem > mpColorItem
std::unique_ptr< weld::MetricSpinButton > mxMTRTransparent
std::unique_ptr< weld::Scale > mxSldTransparent
std::unique_ptr< weld::ComboBox > mxLBTransType
std::unique_ptr< weld::Label > mxColorTextFT
virtual void setFillStyleAndColor(const XFillStyleItem *pStyleItem, const XFillColorItem &aColorItem)=0
std::unique_ptr< weld::Toolbar > mxToolBoxColor
void updateFillTransparence(bool bDisabled, bool bDefaultOrSet, const SfxPoolItem *pState)
std::unique_ptr< weld::MetricSpinButton > mxMTRAngle
constexpr ::Color COL_AUTO(ColorTransparency, 0xFF, 0xFF, 0xFF, 0xFF)
double toDegrees(D x)
weld::Window * GetFrameWeld(const SfxFrame *pFrame)
URL aURL
float u
#define ERRCODE_NONE
sal_Int16 nValue
Definition: fmsrccfg.cxx:81
OUString aName
sal_uInt16 nPos
SVX_DLLPUBLIC void Fill(weld::ComboBox &, const XHatchListRef &pList)
Definition: itemwin.cxx:244
SVX_DLLPUBLIC void Fill(weld::ComboBox &rListBox)
Definition: itemwin.cxx:173
NONE
int i
Count
IMPL_LINK_NOARG(AreaPropertyPanelBase, ToolbarHdl_Impl, const OUString &, void)
long Long
Reference< XNameAccess > m_xContainer
SfxItemState
constexpr OUStringLiteral PATTERN