diff options
Diffstat (limited to 'sc/source/ui/view/gridwin.cxx')
-rw-r--r-- | sc/source/ui/view/gridwin.cxx | 93 |
1 files changed, 45 insertions, 48 deletions
diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx index 5b203addbb12..3116dfb9ac13 100644 --- a/sc/source/ui/view/gridwin.cxx +++ b/sc/source/ui/view/gridwin.cxx @@ -434,8 +434,8 @@ void ScGridWindow::dispose() mpFilterBox.reset(); mpNoteMarker.reset(); - mpAutoFilterPopup.disposeAndClear(); - mpDPFieldPopup.disposeAndClear(); + mpAutoFilterPopup.reset(); + mpDPFieldPopup.reset(); aComboButton.SetOutputDevice(nullptr); if (mpSpellCheckCxt) @@ -458,8 +458,8 @@ void ScGridWindow::ClickExtern() if (mpDPFieldPopup) { - mpDPFieldPopup->get_widget().close(false); - mpDPFieldPopup.disposeAndClear(); + mpDPFieldPopup->close(false); + mpDPFieldPopup.reset(); } } @@ -582,7 +582,7 @@ void ScGridWindow::LaunchAutoFilterMenu(SCCOL nCol, SCROW nRow) ScDocument& rDoc = mrViewData.GetDocument(); bool bLOKActive = comphelper::LibreOfficeKit::isActive(); - mpAutoFilterPopup.disposeAndClear(); + mpAutoFilterPopup.reset(); // Estimate the width (in pixels) of the longest text in the list ScFilterEntries aFilterEntries; @@ -592,11 +592,10 @@ void ScGridWindow::LaunchAutoFilterMenu(SCCOL nCol, SCROW nRow) if (bLOKActive) pNotifier = SfxViewShell::Current(); + weld::Window* pPopupParent = GetFrameWeld(); int nColWidth = ScViewData::ToPixel(rDoc.GetColWidth(nCol, nTab), mrViewData.GetPPTX()); - mpAutoFilterPopup.reset(VclPtr<ScCheckListMenuWindow>::Create(this, &rDoc, false, - aFilterEntries.mbHasDates, nColWidth, - nullptr, pNotifier)); - ScCheckListMenuControl& rControl = mpAutoFilterPopup->get_widget(); + mpAutoFilterPopup.reset(new ScCheckListMenuControl(pPopupParent, &rDoc, false, + aFilterEntries.mbHasDates, nColWidth, pNotifier)); int nMaxTextWidth = 0; if (aFilterEntries.size() <= 10) @@ -605,7 +604,7 @@ void ScGridWindow::LaunchAutoFilterMenu(SCCOL nCol, SCROW nRow) for (const auto& rEntry : aFilterEntries) { const OUString& aText = rEntry.GetString(); - nMaxTextWidth = std::max<int>(nMaxTextWidth, rControl.GetTextWidth(aText) + aText.getLength() * 2); + nMaxTextWidth = std::max<int>(nMaxTextWidth, mpAutoFilterPopup->GetTextWidth(aText) + aText.getLength() * 2); } } else @@ -622,17 +621,17 @@ void ScGridWindow::LaunchAutoFilterMenu(SCCOL nCol, SCROW nRow) itMax = it; } } - nMaxTextWidth = rControl.GetTextWidth(itMax->GetString()) + nMaxTextWidth * 2; + nMaxTextWidth = mpAutoFilterPopup->GetTextWidth(itMax->GetString()) + nMaxTextWidth * 2; } // window should be at least as wide as the column, or the longest text + checkbox, scrollbar ... (it is estimated with 70 pixel now) // window should be maximum 1024 pixel wide. int nWindowWidth = std::min<int>(1024, nMaxTextWidth + 70); - nWindowWidth = rControl.IncreaseWindowWidthToFitText(nWindowWidth); + nWindowWidth = mpAutoFilterPopup->IncreaseWindowWidthToFitText(nWindowWidth); nMaxTextWidth = std::max<int>(nMaxTextWidth, nWindowWidth - 70); - rControl.setOKAction(new AutoFilterAction(this, AutoFilterMode::Normal)); - rControl.setPopupEndAction( + mpAutoFilterPopup->setOKAction(new AutoFilterAction(this, AutoFilterMode::Normal)); + mpAutoFilterPopup->setPopupEndAction( new AutoFilterPopupEndAction(this, ScAddress(nCol, nRow, nTab))); std::unique_ptr<AutoFilterData> pData(new AutoFilterData); pData->maPos = ScAddress(nCol, nRow, nTab); @@ -660,7 +659,7 @@ void ScGridWindow::LaunchAutoFilterMenu(SCCOL nCol, SCROW nRow) return; pData->mpData = pDBData; - rControl.setExtendedData(std::move(pData)); + mpAutoFilterPopup->setExtendedData(std::move(pData)); ScQueryParam aParam; pDBData->GetQueryParam(aParam); @@ -682,7 +681,7 @@ void ScGridWindow::LaunchAutoFilterMenu(SCCOL nCol, SCROW nRow) } // Populate the check box list. - rControl.setMemberSize(aFilterEntries.size()); + mpAutoFilterPopup->setMemberSize(aFilterEntries.size()); for (auto it = aFilterEntries.begin(); it != aFilterEntries.end(); ++it) { // tdf#140745 show (empty) entry on top of the checkbox list @@ -695,7 +694,7 @@ void ScGridWindow::LaunchAutoFilterMenu(SCCOL nCol, SCROW nRow) bSelected = aSelectedString.count(aStringVal) > 0; else if (bQueryByNonEmpty) bSelected = false; - rControl.addMember(aStringVal, aDoubleVal, bSelected); + mpAutoFilterPopup->addMember(aStringVal, aDoubleVal, bSelected); aFilterEntries.maStrData.erase(it); break; } @@ -716,49 +715,49 @@ void ScGridWindow::LaunchAutoFilterMenu(SCCOL nCol, SCROW nRow) } if ( rEntry.IsDate() ) - rControl.addDateMember( aStringVal, rEntry.GetValue(), bSelected ); + mpAutoFilterPopup->addDateMember( aStringVal, rEntry.GetValue(), bSelected ); else - rControl.addMember( aStringVal, aRDoubleVal, bSelected, rEntry.GetStringType() == ScTypedStrData::Value ); + mpAutoFilterPopup->addMember( aStringVal, aRDoubleVal, bSelected, rEntry.GetStringType() == ScTypedStrData::Value ); } // Populate the menu. - rControl.addMenuItem( + mpAutoFilterPopup->addMenuItem( ScResId(STR_MENU_SORT_ASC), new AutoFilterAction(this, AutoFilterMode::SortAscending)); - rControl.addMenuItem( + mpAutoFilterPopup->addMenuItem( ScResId(STR_MENU_SORT_DESC), new AutoFilterAction(this, AutoFilterMode::SortDescending)); - rControl.addSeparator(); - rControl.addMenuItem( + mpAutoFilterPopup->addSeparator(); + mpAutoFilterPopup->addMenuItem( ScResId(SCSTR_TOP10FILTER), new AutoFilterAction(this, AutoFilterMode::Top10)); - rControl.addMenuItem( + mpAutoFilterPopup->addMenuItem( ScResId(SCSTR_FILTER_EMPTY), new AutoFilterAction(this, AutoFilterMode::Empty)); - rControl.addMenuItem( + mpAutoFilterPopup->addMenuItem( ScResId(SCSTR_FILTER_NOTEMPTY), new AutoFilterAction(this, AutoFilterMode::NonEmpty)); - rControl.addSeparator(); - rControl.addMenuItem( + mpAutoFilterPopup->addSeparator(); + mpAutoFilterPopup->addMenuItem( ScResId(SCSTR_FILTER_TEXT_COLOR), new AutoFilterAction(this, AutoFilterMode::TextColor)); - rControl.addMenuItem( + mpAutoFilterPopup->addMenuItem( ScResId(SCSTR_FILTER_BACKGROUND_COLOR), new AutoFilterAction(this, AutoFilterMode::BackgroundColor)); - rControl.addSeparator(); - rControl.addMenuItem( + mpAutoFilterPopup->addSeparator(); + mpAutoFilterPopup->addMenuItem( ScResId(SCSTR_STDFILTER), new AutoFilterAction(this, AutoFilterMode::Custom)); if (aEntries.size()) - rControl.addMenuItem( + mpAutoFilterPopup->addMenuItem( ScResId(SCSTR_CLEAR_FILTER), new AutoFilterAction(this, AutoFilterMode::Clear)); - rControl.initMembers(nMaxTextWidth + 20); // 20 pixel estimated for the checkbox + mpAutoFilterPopup->initMembers(nMaxTextWidth + 20); // 20 pixel estimated for the checkbox ScCheckListMenuControl::Config aConfig; aConfig.mbAllowEmptySet = false; aConfig.mbRTL = mrViewData.GetDocument().IsLayoutRTL(mrViewData.GetTabNo()); - rControl.setConfig(aConfig); + mpAutoFilterPopup->setConfig(aConfig); if (IsMouseCaptured()) ReleaseMouse(); - rControl.launch(aCellRect); + mpAutoFilterPopup->launch(pPopupParent, aCellRect); // remember filter rules before modification - rControl.getResult(aSaveAutoFilterResult); + mpAutoFilterPopup->getResult(aSaveAutoFilterResult); collectUIInformation(OUString::number(nRow), OUString::number(nCol),"AUTOFILTER"); } @@ -776,15 +775,13 @@ void ScGridWindow::RefreshAutoFilterButton(const ScAddress& rPos) void ScGridWindow::UpdateAutoFilterFromMenu(AutoFilterMode eMode) { - ScCheckListMenuControl& rControl = mpAutoFilterPopup->get_widget(); - // Terminate autofilter popup now when there is no further user input needed bool bColorMode = eMode == AutoFilterMode::TextColor || eMode == AutoFilterMode::BackgroundColor; if (!bColorMode) - rControl.terminateAllPopupMenus(); + mpAutoFilterPopup->terminateAllPopupMenus(); const AutoFilterData* pData = - static_cast<const AutoFilterData*>(rControl.getExtendedData()); + static_cast<const AutoFilterData*>(mpAutoFilterPopup->getExtendedData()); if (!pData) return; @@ -848,13 +845,13 @@ void ScGridWindow::UpdateAutoFilterFromMenu(AutoFilterMode eMode) { // Do not recreate autofilter rules if there are no changes from the user ScCheckListMenuControl::ResultType aResult; - rControl.getResult(aResult); + mpAutoFilterPopup->getResult(aResult); if (aResult == aSaveAutoFilterResult) { SAL_INFO("sc.ui", "Apply autofilter to data when entries are the same"); - if (!rControl.isAllSelected()) + if (!mpAutoFilterPopup->isAllSelected()) { // Apply autofilter to data ScQueryEntry* pEntry = aParam.FindEntryByField(rPos.Col(), true); @@ -882,7 +879,7 @@ void ScGridWindow::UpdateAutoFilterFromMenu(AutoFilterMode eMode) } if (eMode != AutoFilterMode::Clear - && !(eMode == AutoFilterMode::Normal && rControl.isAllSelected())) + && !(eMode == AutoFilterMode::Normal && mpAutoFilterPopup->isAllSelected())) { // Try to use the existing entry for the column (if one exists). ScQueryEntry* pEntry = aParam.FindEntryByField(rPos.Col(), true); @@ -905,7 +902,7 @@ void ScGridWindow::UpdateAutoFilterFromMenu(AutoFilterMode eMode) pEntry->eOp = SC_EQUAL; ScCheckListMenuControl::ResultType aResult; - rControl.getResult(aResult); + mpAutoFilterPopup->getResult(aResult); ScQueryEntry::QueryItemsType& rItems = pEntry->GetQueryItems(); rItems.clear(); @@ -929,8 +926,8 @@ void ScGridWindow::UpdateAutoFilterFromMenu(AutoFilterMode eMode) ScFilterEntries aFilterEntries; rDoc.GetFilterEntries(rPos.Col(), rPos.Row(), rPos.Tab(), aFilterEntries); - weld::Window* pPopupParent = mpAutoFilterPopup->GetFrameWeld(); - std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(pPopupParent, "modules/scalc/ui/colormenu.ui")); + weld::Window* pWindow = GetFrameWeld(); + std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(pWindow, "modules/scalc/ui/colormenu.ui")); std::unique_ptr<weld::Menu> xColorMenu(xBuilder->weld_menu("menu")); std::set<Color> aColors = eMode == AutoFilterMode::TextColor @@ -951,7 +948,7 @@ void ScGridWindow::UpdateAutoFilterFromMenu(AutoFilterMode eMode) else { // ColorListBox::ShowPreview is similar - ScopedVclPtr<VirtualDevice> xDev(pPopupParent->create_virtual_device()); + ScopedVclPtr<VirtualDevice> xDev(pWindow->create_virtual_device()); const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings(); Size aImageSize(rStyleSettings.GetListBoxPreviewDefaultPixelSize()); xDev->SetOutputSize(aImageSize); @@ -976,13 +973,13 @@ void ScGridWindow::UpdateAutoFilterFromMenu(AutoFilterMode eMode) i++; } - sal_Int32 nSelected = rControl.ExecuteMenu(*xColorMenu); + sal_Int32 nSelected = mpAutoFilterPopup->ExecuteMenu(*xColorMenu); xColorMenu.reset(); if (nSelected == 0) return; - rControl.terminateAllPopupMenus(); + mpAutoFilterPopup->terminateAllPopupMenus(); // Disable color filter when active color was selected if (nSelected == nActive) |