21 #include <com/sun/star/text/WritingMode.hpp>
57 : GenericDialogController(pParent,
"svx/ui/fontworkgallerydialog.ui",
"FontworkGalleryDialog")
60 , mbInsertIntoPage(true)
61 , mppSdrObject(nullptr)
62 , mpDestModel(nullptr)
63 , maCtlFavorites(m_xBuilder->weld_icon_view(
"ctlFavoriteswin"))
64 , mxOKButton(m_xBuilder->weld_button(
"ok"))
91 for( nModelPos = 0; nModelPos < nFavCount; nModelPos++ )
98 const Point aNull(0, 0);
107 static const sal_uInt32 nLen(8);
109 static const Color aG(0xef, 0xef, 0xef);
130 for(
size_t nFavorite = 1; nFavorite <= nFavCount; nFavorite++ )
132 OUString
sId = OUString::number(static_cast<sal_uInt16>(nFavorite));
149 if (sItemId.isEmpty())
152 sal_Int32 nItemId = sItemId.toInt32();
202 Size aFontworkSize = aObjRect.GetSize();
214 if (aFontworkSize.
getWidth() > nLOKViewWidth)
216 double fScale =
static_cast<double>(aFontworkSize.
getWidth()) / nLOKViewWidth;
223 Size aSize = pOutDev->GetOutputSizePixel();
227 aPagePos = aVisArea.
Center();
230 if (aPagePos.getX() > aFontworkSize.
getWidth() / 2)
231 aPagePos.AdjustX( -(aFontworkSize.
getWidth() / 2) );
232 if (aPagePos.getY() > aFontworkSize.
getHeight() / 2)
233 aPagePos.AdjustY( -(aFontworkSize.
getHeight() / 2) );
238 if (bUseSpecialCalcMode)
260 insertSelectedFontwork();
266 insertSelectedFontwork();
279 mxLeft->grab_focus();
281 virtual void statusChanged(
const css::frame::FeatureStateEvent& Event )
override;
285 std::unique_ptr<weld::RadioButton> mxLeft;
286 std::unique_ptr<weld::RadioButton> mxCenter;
287 std::unique_ptr<weld::RadioButton> mxRight;
288 std::unique_ptr<weld::RadioButton> mxStretch;
293 void implSetAlignment(
int nAlignmentMode,
bool bEnabled );
301 :
WeldToolbarPopup(pControl->getFrameInterface(), pParent,
"svx/ui/fontworkalignmentcontrol.ui",
"FontworkAlignmentControl")
302 , mxControl(pControl)
303 , mxLeft(m_xBuilder->weld_radio_button(
"left"))
304 , mxCenter(m_xBuilder->weld_radio_button(
"center"))
305 , mxRight(m_xBuilder->weld_radio_button(
"right"))
306 , mxStretch(m_xBuilder->weld_radio_button(
"stretch"))
307 , mbSettingValue(
false)
309 mxLeft->connect_toggled(
LINK(
this, FontworkAlignmentWindow, SelectHdl));
310 mxCenter->connect_toggled(
LINK(
this, FontworkAlignmentWindow, SelectHdl));
311 mxRight->connect_toggled(
LINK(
this, FontworkAlignmentWindow, SelectHdl));
312 mxStretch->connect_toggled(
LINK(
this, FontworkAlignmentWindow, SelectHdl));
317 void FontworkAlignmentWindow::implSetAlignment(
int nSurface,
bool bEnabled )
319 bool bSettingValue = mbSettingValue;
320 mbSettingValue =
true;
321 mxLeft->set_active(nSurface == 0 && bEnabled);
322 mxLeft->set_sensitive(bEnabled);
323 mxCenter->set_active(nSurface == 1 && bEnabled);
324 mxCenter->set_sensitive(bEnabled);
325 mxRight->set_active(nSurface == 2 && bEnabled);
326 mxRight->set_sensitive(bEnabled);
330 mxStretch->set_active(nSurface == 4 && bEnabled);
331 mxStretch->set_sensitive(bEnabled);
332 mbSettingValue = bSettingValue;
335 void FontworkAlignmentWindow::statusChanged(
const css::frame::FeatureStateEvent& Event )
340 if( !Event.IsEnabled )
342 implSetAlignment( 0,
false );
347 if( Event.State >>= nValue )
348 implSetAlignment( nValue,
true );
354 if (mbSettingValue || !rButton.get_active())
357 sal_Int32 nAlignment;
358 if (mxLeft->get_active())
360 else if (mxCenter->get_active())
362 else if (mxRight->get_active())
375 implSetAlignment( nAlignment,
true );
377 mxControl->EndPopupMode();
385 explicit FontworkAlignmentControl(
const css::uno::Reference< css::uno::XComponentContext >& rxContext );
391 virtual void SAL_CALL initialize(
const css::uno::Sequence< css::uno::Any >& aArguments )
override;
401 :
svt::PopupWindowController( rxContext,
Reference<
css::
frame::XFrame >(),
".uno:FontworkAlignment" )
405 std::unique_ptr<WeldToolbarPopup> FontworkAlignmentControl::weldPopupWindow()
407 return std::make_unique<FontworkAlignmentWindow>(
this, m_pToolbar);
413 std::make_unique<FontworkAlignmentWindow>(
this, pParent->
GetFrameWeld()));
415 mxInterimPopover->Show();
417 return mxInterimPopover;
421 void SAL_CALL FontworkAlignmentControl::initialize(
const css::uno::Sequence< css::uno::Any >& aArguments )
423 svt::PopupWindowController::initialize( aArguments );
428 m_pToolbar->set_item_popover(m_aCommandURL.toUtf8(), mxPopoverContainer->getTopLevel());
433 if ( getToolboxId( nId, &pToolBox ) )
440 OUString FontworkAlignmentControl::getImplementationName()
442 return "com.sun.star.comp.svx.FontworkAlignmentController";
448 return {
"com.sun.star.frame.ToolbarController" };
452 extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
454 css::uno::XComponentContext* xContext,
455 css::uno::Sequence<css::uno::Any>
const &)
457 return cppu::acquire(
new FontworkAlignmentControl(xContext));
468 virtual void statusChanged(
const css::frame::FeatureStateEvent& Event )
override;
471 std::unique_ptr<weld::RadioButton> mxVeryTight;
472 std::unique_ptr<weld::RadioButton> mxTight;
473 std::unique_ptr<weld::RadioButton> mxNormal;
474 std::unique_ptr<weld::RadioButton> mxLoose;
475 std::unique_ptr<weld::RadioButton> mxVeryLoose;
476 std::unique_ptr<weld::RadioButton> mxCustom;
477 std::unique_ptr<weld::CheckButton> mxKernPairs;
478 sal_Int32 mnCharacterSpacing;
480 bool mbCommandDispatched;
486 void implSetCharacterSpacing( sal_Int32 nCharacterSpacing,
bool bEnabled );
487 void implSetKernCharacterPairs(
bool bKernOnOff,
bool bEnabled);
488 void DispatchSpacingDialog();
497 :
WeldToolbarPopup(pControl->getFrameInterface(), pParent,
"svx/ui/fontworkcharacterspacingcontrol.ui",
"FontworkCharacterSpacingControl")
498 , mxControl(pControl)
499 , mxVeryTight(m_xBuilder->weld_radio_button(
"verytight"))
500 , mxTight(m_xBuilder->weld_radio_button(
"tight"))
501 , mxNormal(m_xBuilder->weld_radio_button(
"normal"))
502 , mxLoose(m_xBuilder->weld_radio_button(
"loose"))
503 , mxVeryLoose(m_xBuilder->weld_radio_button(
"veryloose"))
504 , mxCustom(m_xBuilder->weld_radio_button(
"custom"))
505 , mxKernPairs(m_xBuilder->weld_check_button(
"kernpairs"))
506 , mnCharacterSpacing(0)
507 , mbSettingValue(
false)
508 , mbCommandDispatched(
false)
510 mxVeryTight->connect_toggled(
LINK(
this, FontworkCharacterSpacingWindow, SelectHdl));
511 mxTight->connect_toggled(
LINK(
this, FontworkCharacterSpacingWindow, SelectHdl));
512 mxNormal->connect_toggled(
LINK(
this, FontworkCharacterSpacingWindow, SelectHdl));
513 mxLoose->connect_toggled(
LINK(
this, FontworkCharacterSpacingWindow, SelectHdl));
514 mxVeryLoose->connect_toggled(
LINK(
this, FontworkCharacterSpacingWindow, SelectHdl));
515 mxCustom->connect_toggled(
LINK(
this, FontworkCharacterSpacingWindow, SelectHdl));
516 mxCustom->connect_mouse_release(
LINK(
this, FontworkCharacterSpacingWindow, MouseReleaseHdl));
518 mxKernPairs->connect_toggled(
LINK(
this, FontworkCharacterSpacingWindow, KernSelectHdl));
528 void FontworkCharacterSpacingWindow::GrabFocus()
530 mxVeryTight->grab_focus();
533 void FontworkCharacterSpacingWindow::implSetCharacterSpacing( sal_Int32 nCharacterSpacing,
bool bEnabled )
535 bool bSettingValue = mbSettingValue;
536 mbSettingValue =
true;
538 mxVeryTight->set_sensitive(bEnabled);
539 mxTight->set_sensitive(bEnabled);
540 mxNormal->set_sensitive(bEnabled);
541 mxLoose->set_sensitive(bEnabled);
542 mxVeryLoose->set_sensitive(bEnabled);
543 mxCustom->set_sensitive(bEnabled);
545 mxVeryTight->set_active(
false);
546 mxTight->set_active(
false);
547 mxNormal->set_active(
false);
548 mxLoose->set_active(
false);
549 mxVeryLoose->set_active(
false);
550 mxCustom->set_active(
true);
552 switch(nCharacterSpacing)
555 mxVeryTight->set_active(
true);
558 mxTight->set_active(
true);
561 mxNormal->set_active(
true);
564 mxLoose->set_active(
true);
567 mxVeryLoose->set_active(
true);
571 mnCharacterSpacing = nCharacterSpacing;
573 mbSettingValue = bSettingValue;
576 void FontworkCharacterSpacingWindow::implSetKernCharacterPairs(
bool bKernOnOff,
bool bEnabled)
578 mxKernPairs->set_sensitive(bEnabled);
579 mxKernPairs->set_active(bKernOnOff);
582 void FontworkCharacterSpacingWindow::statusChanged(
const css::frame::FeatureStateEvent& Event )
586 if( !Event.IsEnabled )
588 implSetCharacterSpacing( 0,
false );
593 if( Event.State >>= nValue )
594 implSetCharacterSpacing( nValue,
true );
599 if( !Event.IsEnabled )
601 implSetKernCharacterPairs(
false,
false);
606 if( Event.State >>= bValue )
607 implSetKernCharacterPairs(bValue,
true);
617 bool bKernOnOff = mxKernPairs->get_active();
622 mbCommandDispatched =
true;
624 implSetKernCharacterPairs(bKernOnOff,
true);
626 mxControl->EndPopupMode();
629 void FontworkCharacterSpacingWindow::DispatchSpacingDialog()
635 xControl->EndPopupMode();
636 xControl->dispatchCommand(
".uno:FontworkCharacterSpacingDialog", aArgs);
637 mbCommandDispatched =
true;
642 if (!rButton.get_active())
651 if (mbCommandDispatched)
654 if (mxCustom->get_active())
655 DispatchSpacingDialog();
658 sal_Int32 nCharacterSpacing;
659 if (mxVeryTight->get_active())
660 nCharacterSpacing = 80;
661 else if (mxTight->get_active())
662 nCharacterSpacing = 90;
663 else if (mxLoose->get_active())
664 nCharacterSpacing = 120;
665 else if (mxVeryLoose->get_active())
666 nCharacterSpacing = 150;
668 nCharacterSpacing = 100;
674 mbCommandDispatched =
true;
676 implSetCharacterSpacing( nCharacterSpacing,
true );
679 mxControl->EndPopupMode();
692 if (mxCustom->get_active() && !mbCommandDispatched)
694 DispatchSpacingDialog();
705 explicit FontworkCharacterSpacingControl(
const css::uno::Reference< css::uno::XComponentContext >& rxContext );
711 virtual void SAL_CALL initialize(
const css::uno::Sequence< css::uno::Any >& aArguments )
override;
721 :
svt::PopupWindowController( rxContext,
Reference<
css::
frame::XFrame >(),
".uno:FontworkCharacterSpacingFloater" )
725 std::unique_ptr<WeldToolbarPopup> FontworkCharacterSpacingControl::weldPopupWindow()
727 return std::make_unique<FontworkCharacterSpacingWindow>(
this, m_pToolbar);
733 std::make_unique<FontworkCharacterSpacingWindow>(
this, pParent->
GetFrameWeld()));
735 mxInterimPopover->Show();
737 return mxInterimPopover;
741 void SAL_CALL FontworkCharacterSpacingControl::initialize(
const css::uno::Sequence< css::uno::Any >& aArguments )
743 svt::PopupWindowController::initialize( aArguments );
748 m_pToolbar->set_item_popover(m_aCommandURL.toUtf8(), mxPopoverContainer->getTopLevel());
753 if ( getToolboxId( nId, &pToolBox ) )
760 OUString FontworkCharacterSpacingControl::getImplementationName()
762 return "com.sun.star.comp.svx.FontworkCharacterSpacingController";
773 extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
775 css::uno::XComponentContext* xContext,
776 css::uno::Sequence<css::uno::Any>
const &)
778 return cppu::acquire(
new FontworkCharacterSpacingControl(xContext));
781 FontworkCharacterSpacingDialog::FontworkCharacterSpacingDialog(
weld::Window* pParent, sal_Int32 nScale)
782 : GenericDialogController(pParent,
"svx/ui/fontworkspacingdialog.ui",
"FontworkSpacingDialog")
783 , m_xMtrScale(m_xBuilder->weld_metric_spin_button(
"entry",
FieldUnit::
PERCENT))
785 m_xMtrScale->set_value(nScale, FieldUnit::PERCENT);
794 return static_cast<sal_Int32
>(
m_xMtrScale->get_value(FieldUnit::PERCENT));
sal_Int32 getScale() const
#define LINK(Instance, Class, Member)
#define GALLERY_THEME_FONTWORK
DECL_LINK(CheckNameHdl, SvxNameDialog &, bool)
std::unique_ptr< weld::IconView > maCtlFavorites
void setWidth(tools::Long nWidth)
void DrawBitmapEx(const Point &rDestPt, const BitmapEx &rBitmapEx)
bool Scale(const Size &rNewSize, BmpScaleFlag nScaleFlag=BmpScaleFlag::Default)
css::beans::PropertyValue makePropertyValue(const OUString &rName, T &&rValue)
constexpr OUStringLiteral PERCENT(u"Percent")
SdrObject * GetObj(size_t nNum) const
size_t GetObjCount() const
std::unique_ptr< weld::MetricSpinButton > m_xMtrScale
void SetSdrObjectRef(SdrModel *pModel)
static void Free(SdrObject *&_rpObject)
bool InsertObjectAtView(SdrObject *pObj, SdrPageView &rPV, SdrInsertFlags nOptions=SdrInsertFlags::NONE)
constexpr auto convertTwipToMm100(N n)
constexpr tools::Long Width() const
weld::Window * GetFrameWeld() const
exports com.sun.star. frame
static SfxViewShell * Current()
constexpr tools::Long getHeight() const
OutputDevice * GetFirstOutputDevice() const
IMPL_LINK_NOARG(SuggestionDisplay, SelectSuggestionValueSetHdl, ValueSet *, void)
FontWorkGalleryDialog(weld::Window *pParent, SdrView &rView)
void initFavorites(sal_uInt16 nThemeId)
bool SetOutputSizePixel(const Size &rNewSize, bool bErase=true)
static bool BeginLocking(std::u16string_view rThemeName)
const SdrPage * GetPage(sal_uInt16 nPgNum) const
std::vector< VclPtr< VirtualDevice > > maFavoritesHorizontal
virtual ~FontworkCharacterSpacingDialog() override
virtual void SetLogicRect(const tools::Rectangle &rRect)
static bool EndLocking(std::u16string_view rThemeName)
float GetDPIScaleFactor() const
void fillFavorites(sal_uInt16 nThemeId)
constexpr OUStringLiteral gsFontworkKernCharacterPairs(u".uno:FontworkKernCharacterPairs")
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
constexpr tools::Long Height() const
virtual tools::Rectangle getLOKVisibleArea() const
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
void copy(const fs::path &src, const fs::path &dest)
std::unique_ptr< weld::Button > mxOKButton
void DrawCheckered(const Point &rPos, const Size &rSize, sal_uInt32 nLen=8, Color aStart=COL_WHITE, Color aEnd=COL_BLACK)
SdrPageView * GetSdrPageView() const
void setHeight(tools::Long nHeight)
void insertSelectedFontwork()
SdrModel & getSdrModelFromSdrView() const
const SfxItemPool & GetItemPool() 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")
constexpr tools::Long getWidth() const
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
IMPL_LINK_NOARG(FontworkCharacterSpacingWindow, MouseReleaseHdl, const MouseEvent &, bool)
IMPL_LINK(FontworkCharacterSpacingWindow, SelectHdl, weld::Toggleable &, rButton, void)
static sal_uInt32 GetSdrObjCount(std::u16string_view rThemeName)
bool m_bDetectedRangeSegmentation false