20#include <com/sun/star/document/XActionLockable.hpp>
21#include <com/sun/star/drawing/XDrawPage.hpp>
22#include <com/sun/star/drawing/XShapes.hpp>
23#include <com/sun/star/presentation/ShapeAnimationSubType.hpp>
24#include <com/sun/star/presentation/EffectNodeType.hpp>
25#include <com/sun/star/presentation/ParagraphTarget.hpp>
26#include <com/sun/star/container/XEnumerationAccess.hpp>
27#include <com/sun/star/presentation/EffectPresetClass.hpp>
28#include <com/sun/star/presentation/EffectCommands.hpp>
29#include <com/sun/star/text/XTextRange.hpp>
30#include <com/sun/star/beans/XPropertySet.hpp>
48#include <bitmaps.hlst>
56using ::com::sun::star::uno::UNO_QUERY;
57using ::com::sun::star::uno::UNO_QUERY_THROW;
58using ::com::sun::star::uno::Any;
59using ::com::sun::star::uno::Reference;
60using ::com::sun::star::uno::Exception;
61using ::com::sun::star::uno::XInterface;
62using ::com::sun::star::text::XTextRange;
63using ::com::sun::star::drawing::XShape;
64using ::com::sun::star::drawing::XShapes;
65using ::com::sun::star::drawing::XDrawPage;
66using ::com::sun::star::container::XChild;
67using ::com::sun::star::container::XIndexAccess;
68using ::com::sun::star::container::XEnumerationAccess;
69using ::com::sun::star::container::XEnumeration;
70using ::com::sun::star::beans::XPropertySet;
71using ::com::sun::star::beans::XPropertySetInfo;
78static bool getShapeIndex(
const Reference< XShapes >& xShapes,
const Reference< XShape >& xShape, sal_Int32& nIndex )
80 const sal_Int32
nCount = xShapes->getCount();
84 Reference< XShape > xChild;
85 xShapes->getByIndex(
n ) >>= xChild;
86 if( xChild == xShape )
89 if( xChild->getShapeType() == xShape->getShapeType() )
92 Reference< XShapes > xChildContainer( xChild, UNO_QUERY );
93 if( xChildContainer.is() )
106 Reference< XChild > xChild( xShape, UNO_QUERY );
107 Reference< XShapes > xPage;
109 while( xChild.is() && !xPage.is() )
111 Reference< XInterface >
x( xChild->getParent() );
112 xChild.set(
x, UNO_QUERY );
113 Reference< XDrawPage > xTestPage(
x, UNO_QUERY );
115 xPage.set(
x, UNO_QUERY );
128 OUString aDescription;
129 Reference< XPropertySet > xSet( xShape, UNO_QUERY );
130 bool bAppendIndex =
true;
134 Reference<XPropertySetInfo> xInfo(xSet->getPropertySetInfo());
137 static constexpr OUStringLiteral aPropName1(
u"Name");
138 if(xInfo->hasPropertyByName(aPropName1))
139 xSet->getPropertyValue(aPropName1) >>= aDescription;
141 bAppendIndex = aDescription.isEmpty();
143 static constexpr OUStringLiteral aPropName2(
u"UINameSingular");
144 if(xInfo->hasPropertyByName(aPropName2))
145 xSet->getPropertyValue(aPropName2) >>= aDescription;
155 aDescription +=
" " + OUString::number(
getShapeIndex(xShape));
160 Reference< XTextRange > xText( xShape, UNO_QUERY );
163 OUString aText( xText->getString() );
164 if( !aText.isEmpty() )
166 aDescription +=
": ";
168 aText = aText.replace(
'\n',
' ' );
169 aText = aText.replace(
'\r',
' ' );
171 aDescription += aText;
180 OUString aDescription;
184 ParagraphTarget aParaTarget;
187 css::uno::Reference<css::document::XActionLockable> xLockable(aParaTarget.Shape, css::uno::UNO_QUERY);
189 xLockable->addActionLock();
193 xLockable->removeActionLock();
196 Reference< XEnumerationAccess > xText( aParaTarget.Shape, UNO_QUERY_THROW );
197 Reference< XEnumeration > xEnumeration( xText->createEnumeration(), css::uno::UNO_SET_THROW );
198 sal_Int32 nPara = aParaTarget.Paragraph;
200 while( xEnumeration->hasMoreElements() && nPara )
202 xEnumeration->nextElement();
206 DBG_ASSERT( xEnumeration->hasMoreElements(),
"sd::CustomAnimationEffect::prepareText(), paragraph out of range!" );
208 if( xEnumeration->hasMoreElements() )
210 Reference< XTextRange > xParagraph;
211 xEnumeration->nextElement() >>= xParagraph;
213 if( xParagraph.is() )
214 aDescription = xParagraph->getString();
219 Reference< XShape > xShape;
251 : msDescription(
std::move(aDescription))
252 , mpEffect(
std::move(pEffect))
258 case EffectPresetClass::ENTRANCE:
260 case EffectPresetClass::EXIT:
262 case EffectPresetClass::EMPHASIS:
264 case EffectPresetClass::MOTIONPATH:
275 const ::tools::Rectangle& rRect = std::get<1>(aPayload);
276 bool bSelected = std::get<2>(aPayload);
277 const OUString& rId = std::get<3>(aPayload);
281 pItem->
Paint(rRenderContext, rRect, bSelected);
287 const OUString& rId = aPayload.second;
292 return pItem->
GetSize(rRenderContext);
309 Size aSize(rRect.GetSize());
316 rRenderContext.
Push();
339 rRenderContext.
Pop();
351 Point aPos(rRect.TopLeft());
352 int nItemHeight = rRect.GetHeight();
354 sal_Int16 nNodeType =
mpEffect->getNodeType();
355 if (nNodeType == EffectNodeType::ON_CLICK )
357 rRenderContext.
DrawImage(aPos,
Image(StockImage::Yes, BMP_CUSTOMANIMATION_ON_CLICK));
359 else if (nNodeType == EffectNodeType::AFTER_PREVIOUS)
361 rRenderContext.
DrawImage(aPos,
Image(StockImage::Yes, BMP_CUSTOMANIMATION_AFTER_PREVIOUS));
363 else if (nNodeType == EffectNodeType::WITH_PREVIOUS)
378 case EffectPresetClass::ENTRANCE:
379 sImage = BMP_CUSTOMANIMATION_ENTRANCE_EFFECT;
break;
380 case EffectPresetClass::EXIT:
381 sImage = BMP_CUSTOMANIMATION_EXIT_EFFECT;
break;
382 case EffectPresetClass::EMPHASIS:
383 sImage = BMP_CUSTOMANIMATION_EMPHASIS_EFFECT;
break;
384 case EffectPresetClass::MOTIONPATH:
385 sImage = BMP_CUSTOMANIMATION_MOTION_PATH;
break;
386 case EffectPresetClass::OLEACTION:
387 sImage = BMP_CUSTOMANIMATION_OLE;
break;
388 case EffectPresetClass::MEDIACALL:
391 case EffectCommands::TOGGLEPAUSE:
392 sImage = BMP_CUSTOMANIMATION_MEDIA_PAUSE;
break;
393 case EffectCommands::STOP:
394 sImage = BMP_CUSTOMANIMATION_MEDIA_STOP;
break;
395 case EffectCommands::PLAY:
397 sImage = BMP_CUSTOMANIMATION_MEDIA_PLAY;
break;
404 if (!sImage.isEmpty())
406 Image aImage(StockImage::Yes, sImage);
407 Point aImagePos(aPos);
409 rRenderContext.
DrawImage(aImagePos, aImage);
416 rRenderContext.
Pop();
428 std::unique_ptr<weld::Label> xLabel,
429 std::unique_ptr<weld::Widget> xScrolledWindow)
430 : mxTreeView(
std::move(xTreeView))
431 , maDropTargetHelper(*this)
432 , mxEmptyLabel(
std::move(xLabel))
433 , mxEmptyLabelParent(
std::move(xScrolledWindow))
434 , mbIgnorePaint(false)
437 , mnPostExpandEvent(nullptr)
438 , mnPostCollapseEvent(nullptr)
442 mxTreeView->set_selection_mode(SelectionMode::Multiple);
452 mxTreeView->set_column_custom_renderer(0,
true);
456 : DropTargetHelper(rTreeView.get_widget().get_drop_target())
457 , m_rTreeView(rTreeView)
483 rUnsetDragIcon =
false;
488 mDndEffectsSelected.clear();
490 mDndEffectsSelected.emplace_back(mxTreeView->make_iterator(&rEntry));
495 mxDndEffectDragging = mxTreeView->make_iterator();
496 if (!mxTreeView->get_cursor(mxDndEffectDragging.get()))
497 mxDndEffectDragging.reset();
517 std::unique_ptr<weld::TreeIter> xDndEffectInsertBefore(
mxTreeView->make_iterator());
519 xDndEffectInsertBefore.reset();
525 if( bMovingEffect && bMoveNotSelf && bHaveSequence )
528 weld::fromId<CustomAnimationListEntryItem*>(
mxTreeView->get_id(*xDndEffectInsertBefore)) :
532 std::vector< CustomAnimationEffectPtr > aEffects;
536 aEffects.push_back(pCustomAnimationEffect->
getEffect());
543 pTarget ? pTarget->
getEffect() :
nullptr );
577 const int nKeyCode = rKEvt.GetKeyCode().GetCode();
588 std::unique_ptr<weld::TreeIter> xEntry = mxTreeView->make_iterator();
589 if (mxTreeView->get_cursor(xEntry.get()))
591 auto aRect = mxTreeView->get_row_area(*xEntry);
592 const Point aPos(aRect.getOpenWidth() / 2, aRect.getOpenHeight() / 2);
593 const CommandEvent aCEvt(aPos, CommandEventId::ContextMenu);
608 std::unique_ptr<weld::TreeIter> xEntry =
mxTreeView->make_iterator();
671 std::vector< CustomAnimationEffectPtr > aVisible;
672 std::vector< CustomAnimationEffectPtr > aSelected;
682 std::unique_ptr<weld::TreeIter> xEntry =
mxTreeView->make_iterator();
686 std::unique_ptr<weld::TreeIter> xLastSelectedEntry;
687 std::unique_ptr<weld::TreeIter> xLastVisibleEntry;
690 mxTreeView->all_foreach([
this, &aVisible, &nFirstVis, &xLastVisibleEntry,
691 &aSelected, &nFirstSelOld, &pFirstSelEffect, &xLastSelectedEntry](
weld::TreeIter& rEntry){
698 aVisible.push_back(pEffect);
702 if (!xLastVisibleEntry)
703 xLastVisibleEntry =
mxTreeView->make_iterator(&rEntry);
705 mxTreeView->copy_iterator(rEntry, *xLastVisibleEntry);
710 aSelected.push_back(pEffect);
711 if (nFirstSelOld == -1)
713 pFirstSelEffect = pEffect;
716 if (!xLastSelectedEntry)
717 xLastSelectedEntry =
mxTreeView->make_iterator(&rEntry);
719 mxTreeView->copy_iterator(rEntry, *xLastSelectedEntry);
726 if (xLastSelectedEntry)
733 if (xLastVisibleEntry)
754 auto rInteractiveSequenceVector =
mpMainSequence->getInteractiveSequenceVector();
758 Reference< XShape > xShape( pIS->getTriggerShape() );
761 OUString aDescription =
SdResId(STR_CUSTOMANIMATION_TRIGGER) +
": " +
764 mxEntries.emplace_back(std::make_unique<CustomAnimationListEntryItem>(aDescription,
nullptr));
767 mxTreeView->insert(
nullptr, -1, &aDescription, &
sId,
nullptr,
nullptr,
false,
nullptr);
801 if( std::find( aVisible.begin(), aVisible.end(), pEffect ) != aVisible.end() )
805 std::unique_ptr<weld::TreeIter> xParentEntry =
mxTreeView->make_iterator(xEntry.get());
811 if( std::find( aSelected.begin(), aSelected.end(), pEffect ) != aSelected.end() )
816 if( pEffect == aCurrent )
819 if (pEffect == pFirstSelEffect)
822 if (pEffect == pLastSelEffect)
834 const bool bMoved = nFirstSelNew != nFirstSelOld;
835 const bool bMovedUp = nFirstSelNew < nFirstSelOld;
836 const bool bMovedDown = nFirstSelNew > nFirstSelOld;
838 if( bMoved && nLastSelOld < nFirstVis && nLastSelNew < nFirstVis )
842 if( nLastSelNew - (nLastVis - nFirstVis) > nFirstSelNew)
846 mxTreeView->vadjustment_set_value(nLastSelNew - (nLastVis - nFirstVis));
849 mxTreeView->vadjustment_set_value(nFirstSelNew);
851 else if( bMoved && nFirstSelOld > nLastVis && nFirstSelNew > nLastVis )
855 mxTreeView->vadjustment_set_value(nFirstSelNew);
857 else if( bMovedUp && nFirstSelOld <= nFirstVis )
860 mxTreeView->vadjustment_set_value(nFirstVis - 1);
862 else if( bMovedDown && nLastSelOld >= nLastVis )
865 mxTreeView->vadjustment_set_value(nFirstVis + 1);
867 else if ( nFirstVis != -1 )
881 Any aTarget( pEffect->getTarget() );
882 if( !aTarget.hasValue() )
888 OUString aDescription =
getDescription(aTarget, pEffect->getTargetSubItem() != ShapeAnimationSubType::ONLY_BACKGROUND);
890 std::unique_ptr<weld::TreeIter> xParentEntry;
892 Reference< XShape > xTargetShape( pEffect->getTargetShape() );
893 sal_Int32 nGroupId = pEffect->getGroupId();
901 std::unique_ptr<weld::TreeIter> xEntry =
mxTreeView->make_iterator();
903 mxEntries.emplace_back(std::make_unique<CustomAnimationListEntryItem>(aDescription, pEffect));
910 mxTreeView->insert(xParentEntry.get(), -1, &aDescription, &
sId,
nullptr,
nullptr,
false, xEntry.get());
915 mxTreeView->insert(
nullptr, -1, &aDescription, &
sId,
nullptr,
nullptr,
false, xEntry.get());
931 std::unique_ptr<weld::TreeIter> xEntry = pTreeList->
make_iterator();
935 bool bFirstEntry =
true;
943 if (pEffect->getTarget() == xShape)
945 pTreeList->
select(*xEntry);
962 if (rSelection.hasValue())
964 Reference< XIndexAccess > xShapes(rSelection, UNO_QUERY);
967 sal_Int32
nCount = xShapes->getCount();
971 Reference< XShape > xShape( xShapes->getByIndex(
nIndex ), UNO_QUERY );
978 Reference< XShape > xShape(rSelection, UNO_QUERY);
1007 std::unique_ptr<weld::TreeIter> xEntry = mxTreeView->make_iterator();
1008 if (mxTreeView->get_selected(xEntry.get()))
1010 for (
bool bChild = mxTreeView->iter_children(*xEntry); bChild; bChild = mxTreeView->iter_next_sibling(*xEntry))
1012 if (!mxTreeView->is_selected(*xEntry))
1013 mxTreeView->select(*xEntry);
1020 mnPostExpandEvent =
nullptr;
1026 if (mxTreeView->is_selected(rParent) && !mnPostExpandEvent) {
1037 mxTreeView->unselect_all();
1040 for (
const auto &pEntry : lastSelectedEntries)
1043 mxTreeView->select(*pEntry);
1046 lastSelectedEntries.clear();
1051 mnPostCollapseEvent =
nullptr;
1056 if (!mnPostCollapseEvent)
1061 lastSelectedEntries.emplace_back(mxTreeView->make_iterator(&rEntry));
1074 bool bExpanded =
true;
1076 std::unique_ptr<weld::TreeIter> xEntry =
mxTreeView->make_iterator();
1082 weld::fromId<CustomAnimationListEntryItem*>(
mxTreeView->get_id(*xEntry));
1087 std::unique_ptr<weld::TreeIter> xParentEntry =
mxTreeView->make_iterator(xEntry.get());
1089 bExpanded =
mxTreeView->get_row_expanded(*xParentEntry);
1101 std::unique_ptr<weld::TreeIter> xEntry =
mxTreeView->make_iterator();
1122 aSelection.push_back(pEffect);
1128 std::unique_ptr<weld::TreeIter> xChild =
mxTreeView->make_iterator(&rEntry);
1138 aSelection.push_back( pChildEffect );
1140 }
while (
mxTreeView->iter_next_sibling(*xChild));
1157 if (rCEvt.GetCommand() != CommandEventId::ContextMenu)
1160 if (rCEvt.IsMouseEvent())
1162 ::Point aPos = rCEvt.GetMousePosPixel();
1163 std::unique_ptr<weld::TreeIter> xIter(mxTreeView->make_iterator());
1164 if (mxTreeView->get_dest_row_at_pos(aPos, xIter.get(),
false) && !mxTreeView->is_selected(*xIter))
1166 mxTreeView->unselect_all();
1167 mxTreeView->set_cursor(*xIter);
1168 mxTreeView->select(*xIter);
1169 SelectHdl(*mxTreeView);
1173 if (!mxTreeView->get_selected(
nullptr))
1177 std::unique_ptr<weld::Menu> xMenu = xBuilder->weld_menu(
"menu");
1179 sal_Int16 nNodeType = -1;
1180 sal_Int16 nEntries = 0;
1182 mxTreeView->selected_foreach([
this, &nNodeType, &nEntries](
weld::TreeIter& rEntry){
1189 if( nNodeType == -1 )
1191 nNodeType = pEffect->getNodeType();
1195 if( nNodeType != pEffect->getNodeType() )
1206 xMenu->set_active(
"onclick", nNodeType == EffectNodeType::ON_CLICK);
1207 xMenu->set_active(
"withprev", nNodeType == EffectNodeType::WITH_PREVIOUS);
1208 xMenu->set_active(
"afterprev", nNodeType == EffectNodeType::AFTER_PREVIOUS);
1209 xMenu->set_sensitive(
"options", nEntries == 1);
1210 xMenu->set_sensitive(
"timing", nEntries == 1);
1212 OUString sCommand = xMenu->popup_at_rect(mxTreeView.get(),
::tools::Rectangle(rCEvt.GetMousePosPixel(),
Size(1,1)));
1213 if (!sCommand.isEmpty())
1214 ExecuteContextMenuAction(sCommand);
const StyleSettings & GetStyleSettings() const
static const AllSettings & GetSettings()
static ImplSVEvent * PostUserEvent(const Link< void *, void > &rLink, void *pCaller=nullptr, bool bReferenceLink=false)
static std::unique_ptr< weld::Builder > CreateBuilder(weld::Widget *pParent, const OUString &rUIFile, bool bMobile=false, sal_uInt64 nLOKWindowId=0)
static void RemoveUserEvent(ImplSVEvent *nUserEvent)
Size GetSizePixel() const
void DrawRect(const tools::Rectangle &rRect)
OUString GetEllipsisString(const OUString &rStr, tools::Long nMaxWidth, DrawTextFlags nStyle=DrawTextFlags::EndEllipsis) const
tools::Long GetTextWidth(const OUString &rStr, sal_Int32 nIndex=0, sal_Int32 nLen=-1, vcl::text::TextLayoutCache const *=nullptr, SalLayoutGlyphs const *const pLayoutCache=nullptr) const
void SetTextColor(const Color &rColor)
void DrawPixel(const Point &rPt)
void DrawImage(const Point &rPos, const Image &rImage, DrawImageFlags nStyle=DrawImageFlags::NONE)
SAL_WARN_UNUSED_RESULT Point LogicToPixel(const Point &rLogicPt) const
void Push(vcl::PushFlags nFlags=vcl::PushFlags::ALL)
tools::Long GetTextHeight() const
void DrawText(const Point &rStartPt, const OUString &rStr, sal_Int32 nIndex=0, sal_Int32 nLen=-1, std::vector< tools::Rectangle > *pVector=nullptr, OUString *pDisplayText=nullptr, const SalLayoutGlyphs *pLayoutCache=nullptr)
const AllSettings & GetSettings() const
tools::Long AdjustY(tools::Long nVertMove)
tools::Long AdjustX(tools::Long nHorzMove)
constexpr tools::Long Height() const
void setHeight(tools::Long nHeight)
const Color & GetWindowColor() const
const Color & GetDialogTextColor() const
const Color & GetDialogColor() const
const Color & GetHighlightTextColor() const
CustomAnimationListDropTarget(CustomAnimationList &rTreeView)
virtual sal_Int8 AcceptDrop(const AcceptDropEvent &rEvt) override
virtual sal_Int8 ExecuteDrop(const ExecuteDropEvent &rEvt) override
CustomAnimationList & m_rTreeView
CustomAnimationListEntryItem(OUString aDescription, CustomAnimationEffectPtr pEffect)
void PaintEffect(vcl::RenderContext &rRenderContext, const ::tools::Rectangle &rRect, bool bSelected)
CustomAnimationEffectPtr mpEffect
static const ::tools::Long nItemMinHeight
Size GetSize(const vcl::RenderContext &rRenderContext)
const CustomAnimationEffectPtr & getEffect() const
void PaintTrigger(vcl::RenderContext &rRenderContext, const ::tools::Rectangle &rRect)
void Paint(vcl::RenderContext &rRenderContext, const ::tools::Rectangle &rRect, bool bSelected)
static const ::tools::Long nIconWidth
virtual void notify_change() override
void onSelectionChanged(const css::uno::Any &rSelection)
void select(const CustomAnimationEffectPtr &pEffect)
selects or deselects the given effect.
std::vector< std::unique_ptr< weld::TreeIter > > mDndEffectsSelected
void ExecuteContextMenuAction(const OUString &rSelectedPopupEntry)
bool isVisible(const CustomAnimationEffectPtr &pEffect) const
std::unique_ptr< weld::Label > mxEmptyLabel
sal_Int8 AcceptDrop(const AcceptDropEvent &rEvt)
std::unique_ptr< weld::TreeView > mxTreeView
ImplSVEvent * mnPostExpandEvent
std::vector< std::unique_ptr< CustomAnimationListEntryItem > > mxEntries
ImplSVEvent * mnPostCollapseEvent
CustomAnimationList(std::unique_ptr< weld::TreeView > xTreeView, std::unique_ptr< weld::Label > xLabel, std::unique_ptr< weld::Widget > xScrolledWindow)
bool isExpanded(const CustomAnimationEffectPtr &pEffect) const
std::unique_ptr< weld::TreeIter > mxLastParentEntry
virtual ~CustomAnimationList()
MainSequencePtr mpMainSequence
void append(CustomAnimationEffectPtr pEffect)
appends the given effect to the list
sal_Int8 ExecuteDrop(const ExecuteDropEvent &rEvt)
EffectSequence getSelection() const
std::unique_ptr< weld::TreeIter > mxDndEffectDragging
ICustomAnimationListController * mpController
weld::TreeView & get_widget()
css::uno::Reference< css::drawing::XShape > mxLastTargetShape
std::unique_ptr< weld::Widget > mxEmptyLabelParent
static const CustomAnimationPresets & getCustomAnimationPresets()
This method gets presets instance, which is localized for the current user's locale.
virtual void onContextMenu(const OUString &rIdent)=0
virtual void onSelect()=0
virtual void onDragNDropComplete(std::vector< CustomAnimationEffectPtr > pEffectsDragged, CustomAnimationEffectPtr pEffectInsertBefore)=0
virtual void scroll_to_row(int row)=0
virtual std::unique_ptr< TreeIter > make_iterator(const TreeIter *pOrig=nullptr) const=0
std::tuple< vcl::RenderContext &, const tools::Rectangle &, bool, const OUString & > render_args
virtual bool get_dest_row_at_pos(const Point &rPos, weld::TreeIter *pResult, bool bDnDMode, bool bAutoScroll=true)=0
virtual bool get_iter_first(TreeIter &rIter) const=0
virtual void select(int pos)=0
virtual bool iter_next(TreeIter &rIter) const=0
std::pair< vcl::RenderContext &, const OUString & > get_size_args
virtual OUString get_id(int pos) const=0
#define DBG_ASSERT(sCon, aError)
#define TOOLS_WARN_EXCEPTION(area, stream)
ESelection aNewSelection(GetSelection())
constexpr sal_uInt16 KEY_DELETE
constexpr sal_uInt16 KEY_SPACE
constexpr sal_uInt16 KEY_INSERT
#define LINK(Instance, Class, Member)
std::list< CustomAnimationEffectPtr > EffectSequence
static void selectShape(weld::TreeView *pTreeList, const Reference< XShape > &xShape)
static OUString getDescription(const Any &rTarget, bool bWithText)
IMPL_LINK_NOARG(MainSequence, onTimerHdl, Timer *, void)
std::shared_ptr< MainSequence > MainSequencePtr
std::shared_ptr< InteractiveSequence > InteractiveSequencePtr
IMPL_STATIC_LINK(CustomAnimationList, CustomRenderHdl, weld::TreeView::render_args, aPayload, void)
OUString getShapeDescription(const Reference< XShape > &xShape, bool bWithText)
IMPL_LINK(SdCharHeightPropertyBox, implMenuSelectHdl, const OUString &, rIdent, void)
std::shared_ptr< CustomAnimationEffect > CustomAnimationEffectPtr
static bool getShapeIndex(const Reference< XShapes > &xShapes, const Reference< XShape > &xShape, sal_Int32 &nIndex)
size_t GetAbsPos(const weld::TreeView &rTreeView, const weld::TreeIter &rIter)
OUString toId(const void *pValue)
bool IsEntryVisible(const weld::TreeView &rTreeView, const weld::TreeIter &rIter)
OUString SdResId(TranslateId aId)
stl_append_effect_func(CustomAnimationList &rList)
void operator()(const CustomAnimationEffectPtr &pEffect)
CustomAnimationList & mrList
SvxTableController * mpController