diff options
author | Kohei Yoshida <kohei.yoshida@suse.com> | 2011-11-18 15:26:58 -0500 |
---|---|---|
committer | Kohei Yoshida <kohei.yoshida@suse.com> | 2011-11-18 15:26:58 -0500 |
commit | ab5c5c9d808a5f32d1646de9e1b5cab251b62269 (patch) | |
tree | 7f3c2dcd6977374070e6af9907e8f7d463abc8b3 /sc/source/ui/view | |
parent | de171082fc55fd52e35a0d0528d47c1ff89191f9 (diff) |
Fix painting of autofilter buttons.
Diffstat (limited to 'sc/source/ui/view')
-rw-r--r-- | sc/source/ui/view/gridwin.cxx | 54 |
1 files changed, 28 insertions, 26 deletions
diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx index 29d9bd304345..4a0d0c9bbd9c 100644 --- a/sc/source/ui/view/gridwin.cxx +++ b/sc/source/ui/view/gridwin.cxx @@ -607,13 +607,25 @@ class AutoFilterOKAction : public ScMenuFloatingWindow::Action ScGridWindow* mpWindow; public: AutoFilterOKAction(ScGridWindow* p) : mpWindow(p) {} - virtual void execute() { mpWindow->UpdateAutoFilterFromMenu(); } }; +class AutoFilterPopupEndAction : public ScMenuFloatingWindow::Action +{ + ScGridWindow* mpWindow; + ScAddress maPos; +public: + AutoFilterPopupEndAction(ScGridWindow* p, const ScAddress& rPos) : + mpWindow(p), maPos(rPos) {} + virtual void execute() + { + mpWindow->RefreshAutoFilterButton(maPos); + } +}; + class AddItemToEntry : public std::unary_function<rtl::OUString, void> { ScQueryEntry::QueryItemsType& mrItems; @@ -651,6 +663,8 @@ void ScGridWindow::LaunchAutoFilterMenu(SCCOL nCol, SCROW nRow) mpAutoFilterPopup.reset(new ScCheckListMenuWindow(this, pDoc)); mpAutoFilterPopup->setOKAction(new AutoFilterOKAction(this)); + mpAutoFilterPopup->setPopupEndAction( + new AutoFilterPopupEndAction(this, ScAddress(nCol, nRow, nTab))); std::auto_ptr<AutoFilterData> pData(new AutoFilterData); pData->maPos = ScAddress(nCol, nRow, nTab); @@ -708,6 +722,19 @@ void ScGridWindow::LaunchAutoFilterMenu(SCCOL nCol, SCROW nRow) mpAutoFilterPopup->launch(aCellRect); } +void ScGridWindow::RefreshAutoFilterButton(const ScAddress& rPos) +{ + if (mpFilterButton) + { + bool bFilterActive = IsAutoFilterActive(rPos.Col(), rPos.Row(), rPos.Tab()); + mpFilterButton->setHasHiddenMember(bFilterActive); + mpFilterButton->setPopupPressed(false); + HideCursor(); + mpFilterButton->draw(); + ShowCursor(); + } +} + void ScGridWindow::UpdateAutoFilterFromMenu() { const AutoFilterData* pData = @@ -1980,20 +2007,6 @@ void ScGridWindow::MouseButtonUp( const MouseEvent& rMEvt ) if (nMouseStatus == SC_GM_FILTER) { - if ( pFilterBox && pFilterBox->GetMode() == SC_FILTERBOX_FILTER ) - { - if (mpFilterButton) - { - bool bFilterActive = IsAutoFilterActive( - pFilterBox->GetCol(), pFilterBox->GetRow(), pViewData->GetTabNo() ); - - mpFilterButton->setHasHiddenMember(bFilterActive); - mpFilterButton->setPopupPressed(false); - HideCursor(); - mpFilterButton->draw(); - ShowCursor(); - } - } nMouseStatus = SC_GM_NONE; ReleaseMouse(); return; // da muss nix mehr passieren @@ -2433,17 +2446,6 @@ void ScGridWindow::MouseMove( const MouseEvent& rMEvt ) { nButtonDown = 0; nMouseStatus = SC_GM_NONE; - if ( pFilterBox->GetMode() == SC_FILTERBOX_FILTER ) - { - if (mpFilterButton) - { - mpFilterButton->setHasHiddenMember(false); - mpFilterButton->setPopupPressed(false); - HideCursor(); - mpFilterButton->draw(); - ShowCursor(); - } - } ReleaseMouse(); pFilterBox->MouseButtonDown( MouseEvent( aRelPos, 1, MOUSE_SIMPLECLICK, MOUSE_LEFT ) ); return; |