summaryrefslogtreecommitdiff
path: root/starmath/source/ElementsDockingWindow.cxx
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2016-02-02 11:28:53 +0000
committerCaolán McNamara <caolanm@redhat.com>2016-02-02 11:31:43 +0000
commitf6c3c942976d615972674c5a5e12337d07be104c (patch)
treea68d6f0209fe0242857c3cf95bec3b87d639e79d /starmath/source/ElementsDockingWindow.cxx
parent33003d0fed4a5aaef4b631fcc3c0941f0eca34c9 (diff)
Resolves: tdf#97495 fix SmElementsControl tooltips
instead of setting a single tooltip for the whole panel area, wait for a tooltip request and specify the area to which it applies. Which is what other widgets that have different tooltip areas do, and maps much better to the gtk3 tooltip system which functions like that too. Change-Id: I56f452562c3c4d9dcec4109a8ee6168f34619472
Diffstat (limited to 'starmath/source/ElementsDockingWindow.cxx')
-rw-r--r--starmath/source/ElementsDockingWindow.cxx56
1 files changed, 49 insertions, 7 deletions
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)