diff options
author | Andre Fischer <af@openoffice.org> | 2010-05-10 14:12:45 +0200 |
---|---|---|
committer | Andre Fischer <af@openoffice.org> | 2010-05-10 14:12:45 +0200 |
commit | f59b182b35a4d9b2d88e193e8e485c316416a125 (patch) | |
tree | 585d2ae69031c983d6b3f6e8e41ac649a655e2ce /sd/source | |
parent | 88efd3930328e67669d4e569c295d5c88b20f5d0 (diff) |
renaissance1: #i107215# Active placement of help text.
Diffstat (limited to 'sd/source')
-rw-r--r-- | sd/source/ui/slidesorter/inc/view/SlideSorterView.hxx | 10 | ||||
-rw-r--r-- | sd/source/ui/slidesorter/view/SlideSorterView.cxx | 83 | ||||
-rw-r--r-- | sd/source/ui/slidesorter/view/SlsButtonBar.cxx | 4 |
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) |