21 #include <com/sun/star/text/WritingMode.hpp>
33 #include <svx/strings.hrc>
55 : GenericDialogController(pParent,
"svx/ui/fontworkgallerydialog.ui",
"FontworkGalleryDialog")
58 , mppSdrObject(nullptr)
59 , mpDestModel(nullptr)
60 , maCtlFavorites(m_xBuilder->weld_scrolled_window(
"ctlFavoriteswin", true))
61 , mxCtlFavorites(new
weld::CustomWeld(*m_xBuilder,
"ctlFavorites", maCtlFavorites))
62 , mxOKButton(m_xBuilder->weld_button(
"ok"))
93 for( nModelPos = 0; nModelPos < nFavCount; nModelPos++ )
100 const Point aNull(0, 0);
102 if (pVDev->GetDPIScaleFactor() > 1)
103 aThumb.
Scale(pVDev->GetDPIScaleFactor(), pVDev->GetDPIScaleFactor());
107 pVDev->SetOutputSizePixel(aSize);
109 static const sal_uInt32 nLen(8);
111 static const Color aG(0xef, 0xef, 0xef);
113 pVDev->DrawCheckered(aNull, aSize, nLen, aW, aG);
115 pVDev->DrawBitmapEx(aNull, aThumb);
130 aThumbSize.setHeight( aThumbSize.Height() /
nLineCount );
131 aThumbSize.AdjustWidth( -12 );
132 aThumbSize.AdjustHeight( -12 );
137 if( nFavCount > (nColCount * nLineCount) )
146 for(
size_t nFavorite = 1; nFavorite <= nFavCount; nFavorite++ )
148 OUString
aStr =
SvxResId(RID_SVXFLOAT3D_FAVORITE) +
" " + OUString::number(nFavorite);
170 std::unique_ptr<FmFormModel> pModel(
new FmFormModel());
171 pModel->GetItemPool().FreezeIdRanges();
176 SdrPage* pPage = pModel->GetPage(0);
215 Point aPagePos = aVisArea.Center();
216 aPagePos.AdjustX( -(aObjRect.GetWidth() / 2) );
217 aPagePos.AdjustY( -(aObjRect.GetHeight() / 2) );
221 if (bUseSpecialCalcMode)
243 insertSelectedFontwork();
249 insertSelectedFontwork();
261 mxLeft->grab_focus();
263 virtual void statusChanged(
const css::frame::FeatureStateEvent& Event )
override;
267 std::unique_ptr<weld::RadioButton> mxLeft;
268 std::unique_ptr<weld::RadioButton> mxCenter;
269 std::unique_ptr<weld::RadioButton> mxRight;
270 std::unique_ptr<weld::RadioButton> mxWord;
271 std::unique_ptr<weld::RadioButton> mxStretch;
276 void implSetAlignment(
int nAlignmentMode,
bool bEnabled );
284 :
WeldToolbarPopup(pControl->getFrameInterface(), pParent,
"svx/ui/fontworkalignmentcontrol.ui",
"FontworkAlignmentControl")
285 , mxControl(pControl)
286 , mxLeft(m_xBuilder->weld_radio_button(
"left"))
287 , mxCenter(m_xBuilder->weld_radio_button(
"center"))
288 , mxRight(m_xBuilder->weld_radio_button(
"right"))
289 , mxWord(m_xBuilder->weld_radio_button(
"word"))
290 , mxStretch(m_xBuilder->weld_radio_button(
"stretch"))
291 , mbSettingValue(false)
293 mxLeft->connect_toggled(
LINK(
this, FontworkAlignmentWindow, SelectHdl));
294 mxCenter->connect_toggled(
LINK(
this, FontworkAlignmentWindow, SelectHdl));
295 mxRight->connect_toggled(
LINK(
this, FontworkAlignmentWindow, SelectHdl));
296 mxWord->connect_toggled(
LINK(
this, FontworkAlignmentWindow, SelectHdl));
297 mxStretch->connect_toggled(
LINK(
this, FontworkAlignmentWindow, SelectHdl));
302 void FontworkAlignmentWindow::implSetAlignment(
int nSurface,
bool bEnabled )
304 bool bSettingValue = mbSettingValue;
305 mbSettingValue =
true;
306 mxLeft->set_active(nSurface == 0 && bEnabled);
307 mxLeft->set_sensitive(bEnabled);
308 mxCenter->set_active(nSurface == 1 && bEnabled);
309 mxCenter->set_sensitive(bEnabled);
310 mxRight->set_active(nSurface == 2 && bEnabled);
311 mxRight->set_sensitive(bEnabled);
312 mxWord->set_active(nSurface == 3 && bEnabled);
313 mxWord->set_sensitive(bEnabled);
314 mxStretch->set_active(nSurface == 4 && bEnabled);
315 mxStretch->set_sensitive(bEnabled);
316 mbSettingValue = bSettingValue;
319 void FontworkAlignmentWindow::statusChanged(
const css::frame::FeatureStateEvent& Event )
324 if( !Event.IsEnabled )
326 implSetAlignment( 0,
false );
331 if( Event.State >>= nValue )
332 implSetAlignment( nValue,
true );
338 if (mbSettingValue || !rButton.get_active())
341 sal_Int32 nAlignment;
342 if (mxLeft->get_active())
344 else if (mxCenter->get_active())
346 else if (mxRight->get_active())
348 else if (mxWord->get_active())
353 Sequence< PropertyValue > aArgs( 1 );
355 aArgs[0].Value <<= nAlignment;
359 implSetAlignment( nAlignment,
true );
361 mxControl->EndPopupMode();
369 explicit FontworkAlignmentControl(
const css::uno::Reference< css::uno::XComponentContext >& rxContext );
375 virtual void SAL_CALL initialize(
const css::uno::Sequence< css::uno::Any >& aArguments )
override;
385 :
svt::PopupWindowController( rxContext,
Reference<
css::
frame::XFrame >(),
".uno:FontworkAlignment" )
389 std::unique_ptr<WeldToolbarPopup> FontworkAlignmentControl::weldPopupWindow()
391 return std::make_unique<FontworkAlignmentWindow>(
this, m_pToolbar);
397 std::make_unique<FontworkAlignmentWindow>(
this, pParent->
GetFrameWeld()));
399 mxInterimPopover->Show();
401 return mxInterimPopover;
405 void SAL_CALL FontworkAlignmentControl::initialize(
const css::uno::Sequence< css::uno::Any >& aArguments )
407 svt::PopupWindowController::initialize( aArguments );
411 if ( getToolboxId( nId, &pToolBox ) )
418 OUString FontworkAlignmentControl::getImplementationName()
420 return "com.sun.star.comp.svx.FontworkAlignmentController";
426 return {
"com.sun.star.frame.ToolbarController" };
430 extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
432 css::uno::XComponentContext* xContext,
433 css::uno::Sequence<css::uno::Any>
const &)
435 return cppu::acquire(
new FontworkAlignmentControl(xContext));
446 virtual void statusChanged(
const css::frame::FeatureStateEvent& Event )
override;
449 std::unique_ptr<weld::RadioButton> mxVeryTight;
450 std::unique_ptr<weld::RadioButton> mxTight;
451 std::unique_ptr<weld::RadioButton> mxNormal;
452 std::unique_ptr<weld::RadioButton> mxLoose;
453 std::unique_ptr<weld::RadioButton> mxVeryLoose;
454 std::unique_ptr<weld::RadioButton> mxCustom;
455 std::unique_ptr<weld::CheckButton> mxKernPairs;
461 void implSetCharacterSpacing( sal_Int32 nCharacterSpacing,
bool bEnabled );
462 void implSetKernCharacterPairs(
bool bKernOnOff,
bool bEnabled);
471 :
WeldToolbarPopup(pControl->getFrameInterface(), pParent,
"svx/ui/fontworkcharacterspacingcontrol.ui",
"FontworkCharacterSpacingControl")
472 , mxControl(pControl)
473 , mxVeryTight(m_xBuilder->weld_radio_button(
"verytight"))
474 , mxTight(m_xBuilder->weld_radio_button(
"tight"))
475 , mxNormal(m_xBuilder->weld_radio_button(
"normal"))
476 , mxLoose(m_xBuilder->weld_radio_button(
"loose"))
477 , mxVeryLoose(m_xBuilder->weld_radio_button(
"veryloose"))
478 , mxCustom(m_xBuilder->weld_radio_button(
"custom"))
479 , mxKernPairs(m_xBuilder->weld_check_button(
"kernpairs"))
480 , mbSettingValue(false)
482 mxVeryTight->connect_toggled(
LINK(
this, FontworkCharacterSpacingWindow, SelectHdl));
483 mxTight->connect_toggled(
LINK(
this, FontworkCharacterSpacingWindow, SelectHdl));
484 mxNormal->connect_toggled(
LINK(
this, FontworkCharacterSpacingWindow, SelectHdl));
485 mxLoose->connect_toggled(
LINK(
this, FontworkCharacterSpacingWindow, SelectHdl));
486 mxVeryLoose->connect_toggled(
LINK(
this, FontworkCharacterSpacingWindow, SelectHdl));
487 mxCustom->connect_clicked(
LINK(
this, FontworkCharacterSpacingWindow, ClickHdl));
489 mxKernPairs->connect_toggled(
LINK(
this, FontworkCharacterSpacingWindow, SelectHdl));
499 void FontworkCharacterSpacingWindow::GrabFocus()
501 mxVeryTight->grab_focus();
504 void FontworkCharacterSpacingWindow::implSetCharacterSpacing( sal_Int32 nCharacterSpacing,
bool bEnabled )
506 bool bSettingValue = mbSettingValue;
507 mbSettingValue =
true;
509 mxVeryTight->set_sensitive(bEnabled);
510 mxTight->set_sensitive(bEnabled);
511 mxNormal->set_sensitive(bEnabled);
512 mxLoose->set_sensitive(bEnabled);
513 mxVeryLoose->set_sensitive(bEnabled);
514 mxCustom->set_sensitive(bEnabled);
516 mxVeryTight->set_active(
false);
517 mxTight->set_active(
false);
518 mxNormal->set_active(
false);
519 mxLoose->set_active(
false);
520 mxVeryLoose->set_active(
false);
521 mxCustom->set_active(
true);
523 switch(nCharacterSpacing)
526 mxVeryTight->set_active(
true);
529 mxTight->set_active(
true);
532 mxNormal->set_active(
true);
535 mxLoose->set_active(
true);
538 mxVeryLoose->set_active(
true);
542 mbSettingValue = bSettingValue;
545 void FontworkCharacterSpacingWindow::implSetKernCharacterPairs(
bool bKernOnOff,
bool bEnabled)
547 mxKernPairs->set_sensitive(bEnabled);
548 mxKernPairs->set_active(bKernOnOff);
551 void FontworkCharacterSpacingWindow::statusChanged(
const css::frame::FeatureStateEvent& Event )
555 if( !Event.IsEnabled )
557 implSetCharacterSpacing( 0,
false );
562 if( Event.State >>= nValue )
563 implSetCharacterSpacing( nValue,
true );
568 if( !Event.IsEnabled )
570 implSetKernCharacterPairs(
false,
false);
575 if( Event.State >>= bValue )
576 implSetKernCharacterPairs(bValue,
true);
583 SelectHdl(*mxCustom);
588 if (mbSettingValue || !rButton.get_active())
591 if (&rButton == mxCustom.get())
593 Sequence< PropertyValue > aArgs( 1 );
595 aArgs[0].Value <<= sal_Int32(100);
598 xControl->EndPopupMode();
599 xControl->dispatchCommand(
".uno:FontworkCharacterSpacingDialog", aArgs);
601 else if (&rButton == mxKernPairs.get())
603 Sequence< PropertyValue > aArgs( 1 );
605 bool bKernOnOff = mxKernPairs->get_active();
606 aArgs[0].Value <<= bKernOnOff;
610 implSetKernCharacterPairs(bKernOnOff,
true);
614 sal_Int32 nCharacterSpacing;
615 if (&rButton == mxVeryTight.get())
616 nCharacterSpacing = 80;
617 else if (&rButton == mxTight.get())
618 nCharacterSpacing = 90;
619 else if (&rButton == mxLoose.get())
620 nCharacterSpacing = 120;
621 else if (&rButton == mxVeryLoose.get())
622 nCharacterSpacing = 150;
624 nCharacterSpacing = 100;
626 Sequence< PropertyValue > aArgs( 1 );
628 aArgs[0].Value <<= nCharacterSpacing;
632 implSetCharacterSpacing( nCharacterSpacing,
true );
635 mxControl->EndPopupMode();
643 explicit FontworkCharacterSpacingControl(
const css::uno::Reference< css::uno::XComponentContext >& rxContext );
649 virtual void SAL_CALL initialize(
const css::uno::Sequence< css::uno::Any >& aArguments )
override;
659 :
svt::PopupWindowController( rxContext,
Reference<
css::
frame::XFrame >(),
".uno:FontworkCharacterSpacingFloater" )
663 std::unique_ptr<WeldToolbarPopup> FontworkCharacterSpacingControl::weldPopupWindow()
665 return std::make_unique<FontworkCharacterSpacingWindow>(
this, m_pToolbar);
671 std::make_unique<FontworkCharacterSpacingWindow>(
this, pParent->
GetFrameWeld()));
673 mxInterimPopover->Show();
675 return mxInterimPopover;
679 void SAL_CALL FontworkCharacterSpacingControl::initialize(
const css::uno::Sequence< css::uno::Any >& aArguments )
681 svt::PopupWindowController::initialize( aArguments );
685 if ( getToolboxId( nId, &pToolBox ) )
692 OUString FontworkCharacterSpacingControl::getImplementationName()
694 return "com.sun.star.comp.svx.FontworkCharacterSpacingController";
705 extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
707 css::uno::XComponentContext* xContext,
708 css::uno::Sequence<css::uno::Any>
const &)
710 return cppu::acquire(
new FontworkCharacterSpacingControl(xContext));
713 FontworkCharacterSpacingDialog::FontworkCharacterSpacingDialog(
weld::Window* pParent, sal_Int32 nScale)
714 : GenericDialogController(pParent,
"svx/ui/fontworkspacingdialog.ui",
"FontworkSpacingDialog")
715 , m_xMtrScale(m_xBuilder->weld_metric_spin_button(
"entry",
FieldUnit::
PERCENT))
717 m_xMtrScale->set_value(nScale, FieldUnit::PERCENT);
726 return static_cast<sal_Int32
>(
m_xMtrScale->get_value(FieldUnit::PERCENT));
sal_Int32 getScale() const
#define LINK(Instance, Class, Member)
#define GALLERY_THEME_FONTWORK
void SetSdrObjectRef(SdrObject **, SdrModel *pModel)
void setWidth(tools::Long nWidth)
#define DECL_LINK(Member, ArgType, RetType)
bool Scale(const Size &rNewSize, BmpScaleFlag nScaleFlag=BmpScaleFlag::Default)
SdrObject ** mppSdrObject
constexpr OUStringLiteral PERCENT(u"Percent")
SdrObject * GetObj(size_t nNum) const
size_t GetObjCount() const
std::unique_ptr< weld::MetricSpinButton > m_xMtrScale
sal_uInt16 GetSelectedItemId() const
static void Free(SdrObject *&_rpObject)
std::unique_ptr< weld::CustomWeld > mxCtlFavorites
void SetStyle(WinBits nStyle)
void SetLineCount(sal_uInt16 nNewLines=0)
bool InsertObjectAtView(SdrObject *pObj, SdrPageView &rPV, SdrInsertFlags nOptions=SdrInsertFlags::NONE)
weld::Window * GetFrameWeld() const
OUString SvxResId(const char *pId)
exports com.sun.star. frame
OutputDevice * GetFirstOutputDevice() const
void SetDoubleClickHdl(const Link< ValueSet *, void > &rLink)
std::vector< BitmapEx > maFavoritesHorizontal
IMPL_LINK_NOARG(SuggestionDisplay, SelectSuggestionValueSetHdl, ValueSet *, void)
FontWorkGalleryDialog(weld::Window *pParent, SdrView &rView)
void initFavorites(sal_uInt16 nThemeId)
static bool BeginLocking(std::u16string_view rThemeName)
IMPL_LINK_NOARG(FontworkCharacterSpacingWindow, ClickHdl, weld::Button &, void)
void InsertItem(sal_uInt16 nItemId, const Image &rImage)
virtual ~FontworkCharacterSpacingDialog() override
virtual void SetLogicRect(const tools::Rectangle &rRect)
static bool EndLocking(std::u16string_view rThemeName)
IMPL_LINK(FontworkCharacterSpacingWindow, SelectHdl, weld::ToggleButton &, rButton, void)
void fillFavorites(sal_uInt16 nThemeId)
void SelectItem(sal_uInt16 nItemId)
constexpr OUStringLiteral gsFontworkKernCharacterPairs(u".uno:FontworkKernCharacterPairs")
void SetExtraSpacing(sal_uInt16 nNewSpacing)
size_t GetItemCount() const
SAL_DLLPUBLIC_EXPORT css::uno::XInterface * com_sun_star_comp_svx_FontworkCharacterSpacingControl_get_implementation(css::uno::XComponentContext *xContext, css::uno::Sequence< css::uno::Any > const &)
virtual ~FontWorkGalleryDialog() override
void SetColCount(sal_uInt16 nNewCols=1)
const ::std::vector< Color > ImpSvNumberformatScan::StandardColor COL_WHITE
static VclPtr< reference_type > Create(Arg &&...arg)
virtual SdrObject * CloneSdrObject(SdrModel &rTargetModel) const
Reference< XExecutableDialog > m_xDialog
std::unique_ptr< weld::Button > mxOKButton
SdrPageView * GetSdrPageView() const
void insertSelectedFontwork()
SdrModel & getSdrModelFromSdrView() const
SAL_DLLPUBLIC_EXPORT css::uno::XInterface * com_sun_star_comp_svx_FontworkAlignmentControl_get_implementation(css::uno::XComponentContext *xContext, css::uno::Sequence< css::uno::Any > const &)
constexpr OUStringLiteral gsFontworkAlignment(u".uno:FontworkAlignment")
virtual const tools::Rectangle & GetLogicRect() const
A SdrPage contains exactly one SdrObjList and a description of the physical page dimensions (size / m...
constexpr OUStringLiteral gsFontworkCharacterSpacing(u".uno:FontworkCharacterSpacing")
static bool GetSdrObj(std::u16string_view rThemeName, sal_uInt32 nSdrModelPos, SdrModel *pModel, BitmapEx *pThumb=nullptr)
const Size & GetSizePixel() const
static sal_uInt32 GetSdrObjCount(std::u16string_view rThemeName)