diff options
Diffstat (limited to 'starmath')
-rw-r--r-- | starmath/inc/ElementsDockingWindow.hxx | 3 | ||||
-rw-r--r-- | starmath/source/ElementsDockingWindow.cxx | 56 |
2 files changed, 51 insertions, 8 deletions
diff --git a/starmath/inc/ElementsDockingWindow.hxx b/starmath/inc/ElementsDockingWindow.hxx index 4e1652abbcd1..a458d9d20359 100644 --- a/starmath/inc/ElementsDockingWindow.hxx +++ b/starmath/inc/ElementsDockingWindow.hxx @@ -83,7 +83,8 @@ class SmElementsControl : public Control virtual void Paint(vcl::RenderContext& rRenderContext, const Rectangle&) override; virtual void MouseButtonDown(const MouseEvent& rMEvt) override; - virtual void MouseMove( const MouseEvent& rMEvt ) override; + virtual void MouseMove(const MouseEvent& rMEvt) override; + virtual void RequestHelp(const HelpEvent& rHEvt) override; SmDocShell* mpDocShell; SmFormat maFormat; diff --git a/starmath/source/ElementsDockingWindow.cxx b/starmath/source/ElementsDockingWindow.cxx index b3b0f2ce7147..1fca973e12f7 100644 --- a/starmath/source/ElementsDockingWindow.cxx +++ b/starmath/source/ElementsDockingWindow.cxx @@ -28,6 +28,7 @@ #include <svl/stritem.hxx> #include <sfx2/dispatch.hxx> #include <sfx2/sfxmodelfactory.hxx> +#include <vcl/help.hxx> #include <vcl/settings.hxx> SmElement::SmElement(SmNodePointer pNode, const OUString& aText, const OUString& aHelpText) : @@ -387,10 +388,55 @@ void SmElementsControl::Paint(vcl::RenderContext& rRenderContext, const Rectangl rRenderContext.Pop(); } +void SmElementsControl::RequestHelp(const HelpEvent& rHEvt) +{ + if (rHEvt.GetMode() & (HelpEventMode::BALLOON | HelpEventMode::QUICK)) + { + SmElement* pHelpElement = mpCurrentElement; + + if (!rHEvt.KeyboardActivated()) + { + Point aHelpEventPos(ScreenToOutputPixel(rHEvt.GetMousePosPixel())); + for (size_t i = 0; i < maElementList.size() ; i++) + { + SmElement* pElement = maElementList[i].get(); + Rectangle aRect(pElement->mBoxLocation, pElement->mBoxSize); + if (aRect.IsInside(aHelpEventPos)) + { + pHelpElement = pElement; + break; + } + } + } + + if (!pHelpElement) + return; + + Rectangle aHelpRect(pHelpElement->mBoxLocation, pHelpElement->mBoxSize); + Point aPt = OutputToScreenPixel( aHelpRect.TopLeft() ); + aHelpRect.Left() = aPt.X(); + aHelpRect.Top()= aPt.Y(); + aPt = OutputToScreenPixel( aHelpRect.BottomRight() ); + aHelpRect.Right() = aPt.X(); + aHelpRect.Bottom() = aPt.Y(); + + // get text and display it + OUString aStr = pHelpElement->getHelpText(); + if (rHEvt.GetMode() & HelpEventMode::BALLOON) + { + Help::ShowBalloon(this, aHelpRect.Center(), aHelpRect, aStr); + } + else + Help::ShowQuickHelp(this, aHelpRect, aStr, aStr, QuickHelpFlags::CtrlText); + return; + } + + Control::RequestHelp(rHEvt); +} + void SmElementsControl::MouseMove( const MouseEvent& rMouseEvent ) { mpCurrentElement = nullptr; - OUString tooltip; if (Rectangle(Point(0, 0), GetOutputSizePixel()).IsInside(rMouseEvent.GetPosPixel())) { for (size_t i = 0; i < maElementList.size() ; i++) @@ -404,17 +450,13 @@ void SmElementsControl::MouseMove( const MouseEvent& rMouseEvent ) mpCurrentElement = element; LayoutOrPaintContents(); Invalidate(); - tooltip = element->getHelpText(); } } } - } - else - { - Control::MouseMove (rMouseEvent); + return; } - SetQuickHelpText(tooltip); + Control::MouseMove(rMouseEvent); } void SmElementsControl::MouseButtonDown(const MouseEvent& rMouseEvent) |