45#include <svx/svxids.hrc>
46#include <bitmaps.hlst>
49#include <com/sun/star/beans/PropertyValue.hpp>
70 sal_Int64 nConvVal =
vcl::ConvertValue( nVal * 100, 0, 0, FieldUnit::MM_100TH, eOutUnit );
72 if ( nConvVal < 0 && ( nConvVal / 100 == 0 ) )
74 sMetric += OUString::number(nConvVal / 100);
76 if( FieldUnit::NONE != eOutUnit )
78 sMetric += OUStringChar(cSep);
79 sal_Int64 nFract = nConvVal % 100;
85 sMetric += OUString::number(nFract);
96class FunctionPopup_Impl
98 std::unique_ptr<weld::Builder> m_xBuilder;
99 std::unique_ptr<weld::Menu> m_xMenu;
100 sal_uInt32 m_nSelected;
101 static sal_uInt16 id_to_function(std::string_view rIdent);
102 static OString function_to_id(sal_uInt16 nFunc);
104 explicit FunctionPopup_Impl(sal_uInt32 nCheckEncoded);
107 return m_xMenu->popup_at_rect(pParent, rRect);
109 sal_uInt32 GetSelected(std::string_view curident)
const;
114sal_uInt16 FunctionPopup_Impl::id_to_function(std::string_view rIdent)
118 else if (rIdent ==
"counta")
120 else if (rIdent ==
"count")
122 else if (rIdent ==
"max")
124 else if (rIdent ==
"min")
126 else if (rIdent ==
"sum")
128 else if (rIdent ==
"selection")
130 else if (rIdent ==
"none")
135OString FunctionPopup_Impl::function_to_id(sal_uInt16 nFunc)
159FunctionPopup_Impl::FunctionPopup_Impl(sal_uInt32 nCheckEncoded)
160 : m_xBuilder(
Application::CreateBuilder(nullptr,
"svx/ui/functionmenu.ui"))
161 , m_xMenu(m_xBuilder->weld_menu(
"menu"))
162 , m_nSelected(nCheckEncoded)
164 for ( sal_uInt16 nCheck = 1; nCheck < 32; ++nCheck )
165 if ( nCheckEncoded & (1u << nCheck) )
166 m_xMenu->set_active(function_to_id(nCheck),
true);
169sal_uInt32 FunctionPopup_Impl::GetSelected(std::string_view curident)
const
171 sal_uInt32 nSelected = m_nSelected;
172 sal_uInt16 nCurItemId = id_to_function(curident);
178 nSelected ^= ( 1u << nCurItemId );
217#define STR_POSITION ".uno:Position"
218#define STR_TABLECELL ".uno:StateTableCell"
219#define STR_FUNC ".uno:StatusBarFunc"
228 pImpl->bSize =
false;
229 pImpl->bTable =
false;
230 pImpl->bHasMenu =
false;
231 pImpl->nFunctionSet = 0;
232 pImpl->aPosImage =
Image(StockImage::Yes, RID_SVXBMP_POSITION);
233 pImpl->aSizeImage =
Image(StockImage::Yes, RID_SVXBMP_SIZE);
283 if ( nSID == SID_PSZ_FUNCTION )
285 if ( eState == SfxItemState::DEFAULT )
287 pImpl->bHasMenu =
true;
288 if (
auto pUInt32Item =
dynamic_cast< const SfxUInt32Item*
>(pState) )
289 pImpl->nFunctionSet = pUInt32Item->GetValue();
292 pImpl->bHasMenu =
false;
294 else if ( SfxItemState::DEFAULT != eState )
299 if ( nSID == SID_TABLE_CELL )
300 pImpl->bTable =
false;
301 else if ( nSID == SID_ATTR_POSITION )
304 pImpl->bSize =
false;
307 SAL_WARN(
"svx.stbcrtls",
"unknown slot id");
310 else if (
auto pPointItem =
dynamic_cast<const SfxPointItem*
>( pState) )
313 pImpl->aPos = pPointItem->GetValue();
315 pImpl->bTable =
false;
317 else if (
auto pSizeItem =
dynamic_cast<const SvxSizeItem*
>( pState) )
320 pImpl->aSize = pSizeItem->GetSize();
322 pImpl->bTable =
false;
324 else if (
auto pStringItem =
dynamic_cast<const SfxStringItem*
>( pState) )
327 pImpl->aStr = pStringItem->GetValue();
328 pImpl->bTable =
true;
330 pImpl->bSize =
false;
334 SAL_WARN(
"svx.stbcrtls",
"invalid item type" );
336 pImpl->bSize =
false;
337 pImpl->bTable =
false;
353 if ( rCEvt.
GetCommand() == CommandEventId::ContextMenu &&
pImpl->bHasMenu )
355 sal_uInt32 nSelect =
pImpl->nFunctionSet;
360 FunctionPopup_Impl aMenu(nSelect);
361 OString sIdent = aMenu.Execute(pParent, aRect);
362 if (!sIdent.isEmpty())
364 nSelect = aMenu.GetSelected(sIdent);
374 "StatusBarFunc",
a) };
375 execute(
".uno:StatusBarFunc", aArgs );
409 aPnt.setY( aItemPos.Y() );
412 aPnt.AdjustX(
pImpl->aPosImage.GetSizePixel().Width() );
424 aPnt.setX( nSizePosX );
429 aPnt.AdjustX(
pImpl->aSizeImage.GetSizePixel().Width() );
430 Point aDrwPnt = aPnt;
444 else if (
pImpl->bTable )
449 aItemPos.Y() ),
pImpl->aStr );
467 int nCharsWidth = -1;
473 nCharsWidth = 1 + 6 + 3 + 6;
478 nCharsWidth += 1 + 1 + 4 + 3 + 4;
481 else if (
pImpl->bTable )
const LocaleDataWrapper & GetLocaleDataWrapper() const
static const AllSettings & GetSettings()
virtual bool QueryValue(css::uno::Any &rVal, sal_uInt8 nMemberId=0) const override
CommandEventId GetCommand() const
const Point & GetMousePosPixel() const
const OUString & getNumDecimalSep() const
vcl::Region GetClipRegion() const
void DrawRect(const tools::Rectangle &rRect)
const Wallpaper & GetBackground() 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 DrawImage(const Point &rPos, const Image &rImage, DrawImageFlags nStyle=DrawImageFlags::NONE)
const Color & GetLineColor() 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 Color & GetFillColor() const
static FieldUnit GetModuleFieldUnit(css::uno::Reference< css::frame::XFrame > const &i_frame)
StatusBar & GetStatusBar() const
virtual void Command(const CommandEvent &rCEvt)
sal_uInt16 GetSlotId() const
void SetHelpId(sal_uInt16 nItemId, const OString &rHelpId)
void SetItemText(sal_uInt16 nItemId, const OUString &rText, int nCharsWidth=-1)
void SetHelpText(sal_uInt16 nItemId, const OUString &rText)
void SetItemData(sal_uInt16 nItemId, void *pNewData)
Point GetItemTextPos(sal_uInt16 nItemId) const
virtual void StateChangedAtStatusBarControl(sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem *pState) override
virtual ~SvxPosSizeStatusBarControl() override
SvxPosSizeStatusBarControl(sal_uInt16 nSlotId, sal_uInt16 nId, StatusBar &rStb)
std::unique_ptr< SvxPosSizeStatusBarControl_Impl > pImpl
virtual void Command(const CommandEvent &rCEvt) override
virtual void Paint(const UserDrawEvent &rEvt) override
SVX_DLLPRIVATE OUString GetMetricStr_Impl(tools::Long nVal) const
void ImplUpdateItemText()
vcl::RenderContext * GetRenderContext() const
const tools::Rectangle & GetRect() const
const Color & GetColor() const
#define SAL_WARN(area, stream)
css::beans::PropertyValue makePropertyValue(const OUString &rName, T &&rValue)
sal_Int64 ConvertValue(sal_Int64 nValue, sal_Int64 mnBaseValue, sal_uInt16 nDecDigits, FieldUnit eInUnit, FieldUnit eOutUnit)
weld::Window * GetPopupParent(vcl::Window &rOutWin, tools::Rectangle &rRect)
SFX_IMPL_STATUSBAR_CONTROL(SvxPosSizeStatusBarControl, SvxSizeItem)
#define PSZ_FUNC_SELECTION_COUNT