26 #include <strings.hrc>
36 #include <svx/strings.hrc>
39 #define DEFAULT_GRADIENTSTEP 64
44 :
SfxTabPage(pPage, pController,
"cui/ui/gradientpage.ui",
"GradientPage", &rInAttrs)
45 , m_rOutAttrs(rInAttrs)
46 , m_pnGradientListState(nullptr)
47 , m_pnColorListState(nullptr)
48 , m_aXFillAttr(rInAttrs.GetPool())
50 , m_xLbGradientType(m_xBuilder->weld_combo_box(
"gradienttypelb"))
51 , m_xFtCenter(m_xBuilder->weld_label(
"centerft"))
52 , m_xMtrCenterX(m_xBuilder->weld_metric_spin_button(
"centerxmtr",
FieldUnit::
PERCENT))
53 , m_xMtrCenterY(m_xBuilder->weld_metric_spin_button(
"centerymtr",
FieldUnit::
PERCENT))
54 , m_xFtAngle(m_xBuilder->weld_label(
"angleft"))
55 , m_xMtrAngle(m_xBuilder->weld_metric_spin_button(
"anglemtr",
FieldUnit::
DEGREE))
56 , m_xSliderAngle(m_xBuilder->weld_scale(
"angleslider"))
57 , m_xMtrBorder(m_xBuilder->weld_metric_spin_button(
"bordermtr",
FieldUnit::
PERCENT))
58 , m_xSliderBorder(m_xBuilder->weld_scale(
"borderslider"))
59 , m_xLbColorFrom(new
ColorListBox(m_xBuilder->weld_menu_button(
"colorfromlb"), pController->getDialog()))
60 , m_xMtrColorFrom(m_xBuilder->weld_metric_spin_button(
"colorfrommtr",
FieldUnit::
PERCENT))
61 , m_xLbColorTo(new
ColorListBox(m_xBuilder->weld_menu_button(
"colortolb"), pController->getDialog()))
62 , m_xMtrColorTo(m_xBuilder->weld_metric_spin_button(
"colortomtr",
FieldUnit::
PERCENT))
63 , m_xGradientLB(new
SvxPresetListBox(m_xBuilder->weld_scrolled_window(
"gradientpresetlistwin", true)))
64 , m_xMtrIncrement(m_xBuilder->weld_spin_button(
"incrementmtr"))
65 , m_xCbIncrement(m_xBuilder->weld_check_button(
"autoincrement"))
66 , m_xBtnAdd(m_xBuilder->weld_button(
"add"))
67 , m_xBtnModify(m_xBuilder->weld_button(
"modify"))
68 , m_xCtlPreview(new
weld::CustomWeld(*m_xBuilder,
"previewctl", m_aCtlPreview))
69 , m_xGradientLBWin(new
weld::CustomWeld(*m_xBuilder,
"gradientpresetlist", *m_xGradientLB))
148 OUString aString =
CuiResId( RID_SVXSTR_TABLE ) +
": ";
152 SAL_WARN_IF(
aURL.GetProtocol() == INetProtocol::NotValid,
"cui.tabpages",
"invalid URL" );
154 if (
aURL.getBase().getLength() > 18 )
156 aString += OUString::Concat(
aURL.getBase().subView( 0, 15 )) +
"...";
159 aString +=
aURL.getBase();
177 return DeactivateRC::LeavePage;
182 std::unique_ptr<XGradient> pXGradient;
197 static_cast<sal_uInt16
>(
m_xMtrCenterX->get_value(FieldUnit::NONE)),
198 static_cast<sal_uInt16>(
m_xMtrCenterY->get_value(FieldUnit::NONE)),
199 static_cast<sal_uInt16>(
m_xMtrBorder->get_value(FieldUnit::NONE)),
201 static_cast<sal_uInt16>(
m_xMtrColorTo->get_value(FieldUnit::NONE)),
210 assert( pXGradient &&
"XGradient could not be created" );
231 return std::make_unique<SvxGradientTabPage>(pPage, pController, *rOutAttrs);
236 ModifiedHdl_Impl(&rListBox);
238 m_xGradientLB->SetNoSelection();
243 ModifiedHdl_Impl(&rListBox);
244 m_xGradientLB->SetNoSelection();
249 ModifiedHdl_Impl(&rBox);
250 m_xGradientLB->SetNoSelection();
255 ModifiedHdl_Impl(&rBox);
256 m_xGradientLB->SetNoSelection();
261 ModifiedHdl_Impl(&rSlider);
262 m_xGradientLB->SetNoSelection();
267 if (m_xCbIncrement->get_active())
269 m_xMtrIncrement->set_sensitive(
false);
273 m_xMtrIncrement->set_sensitive(
true);
275 ModifiedHdl_Impl(m_xMtrIncrement.get());
289 css::awt::GradientStyle eXGS =
static_cast<css::awt::GradientStyle
>(
m_xLbGradientType->get_active());
295 static_cast<sal_uInt16
>(
m_xMtrCenterX->get_value(FieldUnit::NONE)),
296 static_cast<sal_uInt16>(
m_xMtrCenterY->get_value(FieldUnit::NONE)),
297 static_cast<sal_uInt16>(
m_xMtrBorder->get_value(FieldUnit::NONE)),
299 static_cast<sal_uInt16>(
m_xMtrColorTo->get_value(FieldUnit::NONE)),
319 OUString aNewName(
SvxResId( RID_SVXSTR_GRADIENT ) );
320 OUString aDesc(
CuiResId( RID_SVXSTR_DESC_GRADIENT ) );
325 bool bValidGradientName =
false;
327 while( !bValidGradientName )
329 aName = aNewName +
" " + OUString::number( j++ );
330 bValidGradientName = (SearchGradientList(aName) == -1);
335 sal_uInt16 nError = 1;
337 while (pDlg->Execute() ==
RET_OK)
339 pDlg->GetName( aName );
341 bValidGradientName = (SearchGradientList(aName) == -1);
343 if (bValidGradientName)
350 std::unique_ptr<weld::MessageDialog> xWarnBox(xBuilder->weld_message_dialog(
"DuplicateNameDialog"));
351 if (xWarnBox->run() !=
RET_OK)
354 pDlg.disposeAndClear();
358 XGradient aXGradient( m_xLbColorFrom->GetSelectEntryColor(),
359 m_xLbColorTo->GetSelectEntryColor(),
360 static_cast<css::awt::GradientStyle
>(m_xLbGradientType->get_active()),
361 Degree10(static_cast<sal_Int16>(m_xMtrAngle->get_value(FieldUnit::NONE) * 10)),
362 static_cast<sal_uInt16
>(m_xMtrCenterX->get_value(FieldUnit::NONE)),
363 static_cast<sal_uInt16>(m_xMtrCenterY->get_value(FieldUnit::NONE)),
364 static_cast<sal_uInt16>(m_xMtrBorder->get_value(FieldUnit::NONE)),
365 static_cast<sal_uInt16>(m_xMtrColorFrom->get_value(FieldUnit::NONE)),
366 static_cast<sal_uInt16>(m_xMtrColorTo->get_value(FieldUnit::NONE)),
367 static_cast<sal_uInt16>(m_xMtrIncrement->get_value()) );
369 m_pGradientList->Insert(std::make_unique<XGradientEntry>(aXGradient, aName), nCount);
371 sal_Int32
nId = m_xGradientLB->GetItemId(nCount - 1);
372 BitmapEx aBitmap = m_pGradientList->GetBitmapForPreview( nCount, m_xGradientLB->GetIconSize() );
373 m_xGradientLB->InsertItem( nId + 1,
Image(aBitmap), aName );
374 m_xGradientLB->SelectItem( nId + 1 );
375 m_xGradientLB->Resize();
377 *m_pnGradientListState |= ChangeType::MODIFIED;
379 ChangeGradientHdl_Impl();
383 if (m_pGradientList->Count())
384 m_xBtnModify->set_sensitive(
true);
390 sal_uInt16
nId = m_xGradientLB->GetSelectedItemId();
391 size_t nPos = m_xGradientLB->GetSelectItemPos();
396 OUString
aName( m_pGradientList->GetGradient( static_cast<sal_uInt16>(nPos) )->GetName() );
398 XGradient aXGradient( m_xLbColorFrom->GetSelectEntryColor(),
399 m_xLbColorTo->GetSelectEntryColor(),
400 static_cast<css::awt::GradientStyle
>(m_xLbGradientType->get_active()),
401 Degree10(static_cast<sal_Int16>(m_xMtrAngle->get_value(FieldUnit::NONE) * 10)),
402 static_cast<sal_uInt16
>(m_xMtrCenterX->get_value(FieldUnit::NONE)),
403 static_cast<sal_uInt16>(m_xMtrCenterY->get_value(FieldUnit::NONE)),
404 static_cast<sal_uInt16>(m_xMtrBorder->get_value(FieldUnit::NONE)),
405 static_cast<sal_uInt16>(m_xMtrColorFrom->get_value(FieldUnit::NONE)),
406 static_cast<sal_uInt16>(m_xMtrColorTo->get_value(FieldUnit::NONE)),
407 static_cast<sal_uInt16>(m_xMtrIncrement->get_value()) );
409 m_pGradientList->Replace(std::make_unique<XGradientEntry>(aXGradient,
aName), nPos);
411 BitmapEx aBitmap = m_pGradientList->GetBitmapForPreview( static_cast<sal_uInt16>(nPos), m_xGradientLB->GetIconSize() );
412 m_xGradientLB->RemoveItem( nId );
413 m_xGradientLB->InsertItem( nId,
Image(aBitmap),
aName, static_cast<sal_uInt16>(nPos) );
414 m_xGradientLB->SelectItem( nId );
416 *m_pnGradientListState |= ChangeType::MODIFIED;
421 sal_uInt16
nId = m_xGradientLB->GetSelectedItemId();
422 size_t nPos = m_xGradientLB->GetSelectItemPos();
427 std::unique_ptr<weld::MessageDialog> xQueryBox(xBuilder->weld_message_dialog(
"AskDelGradientDialog"));
428 if (xQueryBox->run() ==
RET_YES)
430 m_pGradientList->Remove(nPos);
431 m_xGradientLB->RemoveItem( nId );
432 nId = m_xGradientLB->GetItemId( 0 );
433 m_xGradientLB->SelectItem( nId );
434 m_xGradientLB->Resize();
436 m_aCtlPreview.Invalidate();
438 ChangeGradientHdl_Impl();
440 *m_pnGradientListState |= ChangeType::MODIFIED;
444 if( !m_pGradientList->Count() )
445 m_xBtnModify->set_sensitive(
false);
450 sal_uInt16
nId = m_xGradientLB->GetSelectedItemId();
451 size_t nPos = m_xGradientLB->GetSelectItemPos();
456 OUString aDesc(
CuiResId( RID_SVXSTR_DESC_GRADIENT ) );
457 OUString
aName( m_pGradientList->GetGradient( nPos )->GetName() );
463 while( bLoop && pDlg->Execute() ==
RET_OK )
465 pDlg->GetName(
aName );
466 sal_Int32 nGradientPos = SearchGradientList(
aName);
467 bool bValidGradientName = (nGradientPos ==
static_cast<sal_Int32
>(nPos) ) || (nGradientPos == -1);
469 if( bValidGradientName )
472 m_pGradientList->GetGradient(nPos)->SetName(
aName);
474 m_xGradientLB->SetItemText( nId,
aName );
475 m_xGradientLB->SelectItem( nId );
477 *m_pnGradientListState |= ChangeType::MODIFIED;
482 std::unique_ptr<weld::MessageDialog> xBox(xBuilder->weld_message_dialog(
"DuplicateNameDialog"));
490 ChangeGradientHdl_Impl();
495 std::unique_ptr<XGradient> pGradient;
505 if( ( drawing::FillStyle_GRADIENT == static_cast<const XFillStyleItem*>( pPoolItem )->
GetValue() ) &&
508 pGradient.reset(
new XGradient( static_cast<const XFillGradientItem*>( pPoolItem )->GetGradientValue() ));
523 css::awt::GradientStyle eXGS = pGradient->GetGradientStyle();
524 sal_uInt16
nValue = pGradient->GetSteps();
537 sal::static_int_cast< sal_Int32 >( eXGS ) );
546 m_xMtrAngle->set_value(pGradient->GetAngle().get() / 10, FieldUnit::NONE);
548 m_xMtrBorder->set_value(pGradient->GetBorder(), FieldUnit::NONE);
550 m_xMtrCenterX->set_value(pGradient->GetXOffset(), FieldUnit::NONE);
551 m_xMtrCenterY->set_value(pGradient->GetYOffset(), FieldUnit::NONE);
552 m_xMtrColorFrom->set_value(pGradient->GetStartIntens(), FieldUnit::NONE);
553 m_xMtrColorTo->set_value(pGradient->GetEndIntens(), FieldUnit::NONE);
570 case css::awt::GradientStyle_LINEAR:
571 case css::awt::GradientStyle_AXIAL:
580 case css::awt::GradientStyle_RADIAL:
589 case css::awt::GradientStyle_ELLIPTICAL:
598 case css::awt::GradientStyle_SQUARE:
599 case css::awt::GradientStyle_RECT:
615 bool bValidGradientName =
true;
623 bValidGradientName =
false;
std::unique_ptr< weld::Button > m_xBtnAdd
#define LINK(Instance, Class, Member)
Size getDrawPreviewOptimalSize(const OutputDevice &rReference)
const XColorListRef & GetNewColorList() const
virtual DeactivateRC DeactivatePage(SfxItemSet *pSet) override
std::unique_ptr< weld::Scale > m_xSliderAngle
std::unique_ptr< weld::Button > m_xBtnModify
std::unique_ptr< weld::SpinButton > m_xMtrIncrement
#define VALUESET_ITEM_NOTFOUND
XGradientListRef m_pGradientList
static SvxAbstractDialogFactory * Create()
constexpr TypedWhichId< XFillStyleItem > XATTR_FILLSTYLE(XATTR_FILL_FIRST)
XColorListRef m_pColorList
constexpr OUStringLiteral PERCENT(u"Percent")
static weld::Builder * CreateBuilder(weld::Widget *pParent, const OUString &rUIFile, bool bMobile=false)
std::unique_ptr< weld::MetricSpinButton > m_xMtrBorder
std::unique_ptr< ColorListBox > m_xLbColorFrom
virtual VclPtr< AbstractSvxNameDialog > CreateSvxNameDialog(weld::Window *pParent, const OUString &rName, const OUString &rDesc)=0
virtual void Reset(const SfxItemSet *) override
void ModifiedHdl_Impl(void const *)
std::unique_ptr< weld::Scale > m_xSliderBorder
OUString SvxResId(const char *pId)
const BorderLinePrimitive2D *pCandidateB assert(pCandidateA)
void SetExchangeSupport()
std::unique_ptr< weld::CheckButton > m_xCbIncrement
void SetControlState_Impl(css::awt::GradientStyle eXGS)
ChangeType * m_pnColorListState
constexpr TypedWhichId< XFillGradientItem > XATTR_FILLGRADIENT(XATTR_FILL_FIRST+2)
SfxItemState GetItemState(sal_uInt16 nWhich, bool bSrchInParent=true, const SfxPoolItem **ppItem=nullptr) const
std::unique_ptr< SvxPresetListBox > m_xGradientLB
SvxGradientTabPage(weld::Container *pPage, weld::DialogController *pController, const SfxItemSet &rInAttrs)
sal_Int32 SearchGradientList(std::u16string_view rGradientName)
tools::Long Width() const
std::unique_ptr< weld::ComboBox > m_xLbGradientType
std::unique_ptr< weld::CustomWeld > m_xGradientLBWin
XFillAttrSetItem m_aXFillAttr
const SfxItemSet & m_rOutAttrs
void SetAttributes(const SfxItemSet &rItemSet)
std::unique_ptr< weld::MetricSpinButton > m_xMtrColorTo
IMPL_LINK(SvxGradientTabPage, ModifiedListBoxHdl_Impl, weld::ComboBox &, rListBox, void)
virtual void ActivatePage(const SfxItemSet &rSet) override
std::unique_ptr< weld::MetricSpinButton > m_xMtrAngle
SvxXRectPreview m_aCtlPreview
OUString CuiResId(const char *pKey)
std::unique_ptr< weld::MetricSpinButton > m_xMtrCenterY
std::unique_ptr< weld::CustomWeld > m_xCtlPreview
const SfxPoolItem * Put(const SfxPoolItem &rItem, sal_uInt16 nWhich)
std::unique_ptr< weld::MetricSpinButton > m_xMtrCenterX
virtual bool FillItemSet(SfxItemSet *) override
const SfxPoolItem & Get(sal_uInt16 nWhich, bool bSrchInParent=true) const
#define SAL_WARN_IF(condition, area, stream)
const ::std::vector< Color > ImpSvNumberformatScan::StandardColor COL_WHITE
tools::Long Height() const
#define DEFAULT_GRADIENTSTEP
SfxOkDialogController * GetDialogController() const
const ::std::vector< Color > ImpSvNumberformatScan::StandardColor COL_BLACK
std::unique_ptr< weld::Label > m_xFtAngle
std::unique_ptr< weld::MetricSpinButton > m_xMtrColorFrom
IMPL_LINK_NOARG(SvxGradientTabPage, ChangeAutoStepHdl_Impl, weld::ToggleButton &, void)
virtual ~SvxGradientTabPage() override
std::unique_ptr< weld::Label > m_xFtCenter
weld::Window * GetFrameWeld(const SfxFrame *pFrame)
std::unique_ptr< ColorListBox > m_xLbColorTo
sal_uInt16 GetWhich(sal_uInt16 nSlot, bool bDeep=true) const
static std::unique_ptr< SfxTabPage > Create(weld::Container *pPage, weld::DialogController *pController, const SfxItemSet *)
void ChangeGradientHdl_Impl()