summaryrefslogtreecommitdiff
path: root/sd/source
diff options
context:
space:
mode:
authorAndre Fischer <af@openoffice.org>2010-05-10 14:12:45 +0200
committerAndre Fischer <af@openoffice.org>2010-05-10 14:12:45 +0200
commitf59b182b35a4d9b2d88e193e8e485c316416a125 (patch)
tree585d2ae69031c983d6b3f6e8e41ac649a655e2ce /sd/source
parent88efd3930328e67669d4e569c295d5c88b20f5d0 (diff)
renaissance1: #i107215# Active placement of help text.
Diffstat (limited to 'sd/source')
-rw-r--r--sd/source/ui/slidesorter/inc/view/SlideSorterView.hxx10
-rw-r--r--sd/source/ui/slidesorter/view/SlideSorterView.cxx83
-rw-r--r--sd/source/ui/slidesorter/view/SlsButtonBar.cxx4
3 files changed, 82 insertions, 15 deletions
diff --git a/sd/source/ui/slidesorter/inc/view/SlideSorterView.hxx b/sd/source/ui/slidesorter/inc/view/SlideSorterView.hxx
index 19a213ef976e..381ddf5e5210 100644
--- a/sd/source/ui/slidesorter/inc/view/SlideSorterView.hxx
+++ b/sd/source/ui/slidesorter/inc/view/SlideSorterView.hxx
@@ -241,6 +241,12 @@ public:
ButtonBar& GetButtonBar (void) const;
+ /** Show a tool tip with either the given help text, or when that is
+ empty, with the content of msHelpText.
+ */
+ void SetHelpText (const ::rtl::OUString& rsHelpText, bool bIsDefaultHelpText);
+ const ::rtl::OUString& GetDefaultHelpText (void) const;
+
protected:
virtual void Notify (SfxBroadcaster& rBroadcaster, const SfxHint& rHint);
@@ -259,7 +265,9 @@ private:
Layouter::Orientation meOrientation;
::boost::shared_ptr<controller::Properties> mpProperties;
model::SharedPageDescriptor mpPageUnderMouse;
- ::rtl::OUString msHelpText;
+ ::rtl::OUString msDefaultHelpText;
+ ::rtl::OUString msCurrentHelpText;
+ ULONG mnHelpWindowHandle;
sal_Int32 mnButtonUnderMouse;
::boost::shared_ptr<PageObjectPainter> mpPageObjectPainter;
::boost::shared_ptr<SelectionPainter> mpSelectionPainter;
diff --git a/sd/source/ui/slidesorter/view/SlideSorterView.cxx b/sd/source/ui/slidesorter/view/SlideSorterView.cxx
index e1e718d550c0..4786c8568e7e 100644
--- a/sd/source/ui/slidesorter/view/SlideSorterView.cxx
+++ b/sd/source/ui/slidesorter/view/SlideSorterView.cxx
@@ -68,6 +68,7 @@
#include <vcl/svapp.hxx>
#include <tools/poly.hxx>
#include <vcl/lineinfo.hxx>
+#include <vcl/help.hxx>
#include <algorithm>
#include <svx/sdrpagewindow.hxx>
#include <svl/itempool.hxx>
@@ -148,9 +149,9 @@ TYPEINIT1(SlideSorterView, ::sd::View);
SlideSorterView::SlideSorterView (SlideSorter& rSlideSorter)
: ::sd::View (
- rSlideSorter.GetModel().GetDocument(),
- rSlideSorter.GetContentWindow().get(),
- rSlideSorter.GetViewShell()),
+ rSlideSorter.GetModel().GetDocument(),
+ rSlideSorter.GetContentWindow().get(),
+ rSlideSorter.GetViewShell()),
mrSlideSorter(rSlideSorter),
mrModel(rSlideSorter.GetModel()),
mbIsDisposed(false),
@@ -165,7 +166,9 @@ SlideSorterView::SlideSorterView (SlideSorter& rSlideSorter)
meOrientation(Layouter::GRID),
mpProperties(rSlideSorter.GetProperties()),
mpPageUnderMouse(),
- msHelpText(),
+ msDefaultHelpText(),
+ msCurrentHelpText(),
+ mnHelpWindowHandle(0),
mnButtonUnderMouse(-1),
mpPageObjectPainter(),
mpSelectionPainter(),
@@ -647,7 +650,8 @@ void SlideSorterView::RequestRepaint (void)
void SlideSorterView::RequestRepaint (const model::SharedPageDescriptor& rpDescriptor)
{
- RequestRepaint(rpDescriptor->GetBoundingBox());
+ if (rpDescriptor)
+ RequestRepaint(rpDescriptor->GetBoundingBox());
}
@@ -840,6 +844,58 @@ ButtonBar& SlideSorterView::GetButtonBar (void) const
+void SlideSorterView::SetHelpText (
+ const ::rtl::OUString& rsHelpText,
+ const bool bIsDefaultHelpText)
+{
+ if (bIsDefaultHelpText)
+ msDefaultHelpText = rsHelpText;
+ if (msCurrentHelpText != rsHelpText)
+ {
+ if (mnHelpWindowHandle>0)
+ {
+ Help::HideTip(mnHelpWindowHandle);
+ mnHelpWindowHandle = 0;
+ }
+
+ msCurrentHelpText = rsHelpText;
+
+ if (msCurrentHelpText.getLength() > 0)
+ {
+ Rectangle aBox (
+ mpLayouter->GetPageObjectLayouter()->GetBoundingBox(
+ mpPageUnderMouse,
+ PageObjectLayouter::Preview,
+ PageObjectLayouter::WindowCoordinateSystem));
+ ::Window* pParent (mrSlideSorter.GetContentWindow().get());
+ while (pParent!=NULL && pParent->GetParent()!=NULL)
+ pParent = pParent->GetParent();
+ const Point aOffset (
+ mrSlideSorter.GetContentWindow()->GetWindowExtentsRelative(pParent).TopLeft());
+ aBox.Move(aOffset.X(), aOffset.Y());
+ // We want the help text outside (below) the preview. Therefore
+ // we have to make the box larger.
+ aBox.Bottom()+=25;
+ mnHelpWindowHandle = Help::ShowTip(
+ mrSlideSorter.GetContentWindow().get(),
+ aBox,
+ msCurrentHelpText,
+ QUICKHELP_CENTER | QUICKHELP_BOTTOM);
+ }
+ }
+}
+
+
+
+
+const ::rtl::OUString& SlideSorterView::GetDefaultHelpText (void) const
+{
+ return msDefaultHelpText;
+}
+
+
+
+
void SlideSorterView::Notify (SfxBroadcaster& rBroadcaster, const SfxHint& rHint)
{
::sd::DrawDocShell* pDocShell = mrModel.GetDocument()->GetDocSh();
@@ -908,7 +964,7 @@ void SlideSorterView::UpdatePageUnderMouse (
&& GetButtonBar().IsMouseOverBar() != bIsMouseOverButtonBar
&& bIsMouseOverButtonBar)
{
- pWindow->SetQuickHelpText(msHelpText);
+ SetHelpText(msDefaultHelpText, true);
}
}
@@ -934,23 +990,26 @@ void SlideSorterView::SetPageUnderMouse (
SharedSdWindow pWindow (mrSlideSorter.GetContentWindow());
if (pWindow)
{
- msHelpText = ::rtl::OUString();
+ ::rtl::OUString sHelpText;
if (mpPageUnderMouse)
{
SdPage* pPage = mpPageUnderMouse->GetPage();
if (pPage != NULL)
- msHelpText = pPage->GetName();
+ sHelpText = pPage->GetName();
else
{
OSL_ASSERT(mpPageUnderMouse->GetPage() != NULL);
}
- if (msHelpText.getLength() == 0)
+ if (sHelpText.getLength() == 0)
{
- msHelpText = String(SdResId(STR_PAGE));
- msHelpText += String::CreateFromInt32(mpPageUnderMouse->GetPageIndex()+1);
+ sHelpText = String(SdResId(STR_PAGE));
+ sHelpText += String::CreateFromInt32(mpPageUnderMouse->GetPageIndex()+1);
}
+
+ SetHelpText(sHelpText, true);
}
- pWindow->SetQuickHelpText(msHelpText);
+ else
+ SetHelpText(::rtl::OUString(), false);
}
}
}
diff --git a/sd/source/ui/slidesorter/view/SlsButtonBar.cxx b/sd/source/ui/slidesorter/view/SlsButtonBar.cxx
index f0e4c026d280..7b0559fc8857 100644
--- a/sd/source/ui/slidesorter/view/SlsButtonBar.cxx
+++ b/sd/source/ui/slidesorter/view/SlsButtonBar.cxx
@@ -181,9 +181,9 @@ void ButtonBar::ProcessMouseMotionEvent (
SharedSdWindow pWindow (mrSlideSorter.GetContentWindow());
if (pWindow)
if (mpButtonUnderMouse)
- pWindow->SetQuickHelpText(mpButtonUnderMouse->GetHelpText());
+ mrSlideSorter.GetView().SetHelpText(mpButtonUnderMouse->GetHelpText(), false);
else
- pWindow->SetQuickHelpText(::rtl::OUString());
+ mrSlideSorter.GetView().SetHelpText(mrSlideSorter.GetView().GetDefaultHelpText(),true);
}
if (bPageHasChanged || bButtonHasChanged || bButtonStateHasChanged)