Kaydet (Commit) f6c3c942 authored tarafından Caolán McNamara's avatar Caolán McNamara

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
üst 33003d0f
...@@ -83,7 +83,8 @@ class SmElementsControl : public Control ...@@ -83,7 +83,8 @@ class SmElementsControl : public Control
virtual void Paint(vcl::RenderContext& rRenderContext, const Rectangle&) override; virtual void Paint(vcl::RenderContext& rRenderContext, const Rectangle&) override;
virtual void MouseButtonDown(const MouseEvent& rMEvt) 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; SmDocShell* mpDocShell;
SmFormat maFormat; SmFormat maFormat;
......
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include <svl/stritem.hxx> #include <svl/stritem.hxx>
#include <sfx2/dispatch.hxx> #include <sfx2/dispatch.hxx>
#include <sfx2/sfxmodelfactory.hxx> #include <sfx2/sfxmodelfactory.hxx>
#include <vcl/help.hxx>
#include <vcl/settings.hxx> #include <vcl/settings.hxx>
SmElement::SmElement(SmNodePointer pNode, const OUString& aText, const OUString& aHelpText) : SmElement::SmElement(SmNodePointer pNode, const OUString& aText, const OUString& aHelpText) :
...@@ -387,10 +388,55 @@ void SmElementsControl::Paint(vcl::RenderContext& rRenderContext, const Rectangl ...@@ -387,10 +388,55 @@ void SmElementsControl::Paint(vcl::RenderContext& rRenderContext, const Rectangl
rRenderContext.Pop(); 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 ) void SmElementsControl::MouseMove( const MouseEvent& rMouseEvent )
{ {
mpCurrentElement = nullptr; mpCurrentElement = nullptr;
OUString tooltip;
if (Rectangle(Point(0, 0), GetOutputSizePixel()).IsInside(rMouseEvent.GetPosPixel())) if (Rectangle(Point(0, 0), GetOutputSizePixel()).IsInside(rMouseEvent.GetPosPixel()))
{ {
for (size_t i = 0; i < maElementList.size() ; i++) for (size_t i = 0; i < maElementList.size() ; i++)
...@@ -404,17 +450,13 @@ void SmElementsControl::MouseMove( const MouseEvent& rMouseEvent ) ...@@ -404,17 +450,13 @@ void SmElementsControl::MouseMove( const MouseEvent& rMouseEvent )
mpCurrentElement = element; mpCurrentElement = element;
LayoutOrPaintContents(); LayoutOrPaintContents();
Invalidate(); Invalidate();
tooltip = element->getHelpText();
} }
} }
} }
} return;
else
{
Control::MouseMove (rMouseEvent);
} }
SetQuickHelpText(tooltip); Control::MouseMove(rMouseEvent);
} }
void SmElementsControl::MouseButtonDown(const MouseEvent& rMouseEvent) void SmElementsControl::MouseButtonDown(const MouseEvent& rMouseEvent)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment