cui/inc/strings.hrc | 1 cui/source/options/appearance.cxx | 1 include/svtools/colorcfg.hxx | 2 officecfg/registry/data/org/openoffice/Office/UI.xcu | 5 officecfg/registry/schema/org/openoffice/Office/UI.xcs | 10 sc/source/ui/inc/gridwin.hxx | 6 sc/source/ui/inc/viewdata.hxx | 2 sc/source/ui/view/gridwin.cxx | 185 +++++++++++++---- sc/source/ui/view/select.cxx | 38 +++ sc/source/ui/view/tabvwsh4.cxx | 29 +- svtools/source/config/colorcfg.cxx | 6 11 files changed, 235 insertions(+), 50 deletions(-)
New commits: commit dd06c834b1e0c3bd2c5b9796fba8d853a9f7d7b0 Author: Markus Mohrhard <[email protected]> AuthorDate: Mon Jul 21 08:26:26 2025 +0800 Commit: Andras Timar <[email protected]> CommitDate: Mon Nov 17 18:58:45 2025 +0100 show indication of selected database range in Calc This will show a rectangle around the database range covering the selected cell. The fill handle allows to change the size of the DB range. cherry-pick from: d90807926d56dae13dfcacee251d04bda31df548 Change-Id: I9b1bdcebfb957ffe064000f05a379e2fd35e095c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/193664 Tested-by: Andras Timar <[email protected]> Reviewed-by: Andras Timar <[email protected]> diff --git a/cui/inc/strings.hrc b/cui/inc/strings.hrc index e200921a7ac3..4b8ec0da311d 100644 --- a/cui/inc/strings.hrc +++ b/cui/inc/strings.hrc @@ -478,6 +478,7 @@ #define REG_HTMLUNKNOWN NC_("REG_HTMLUNKNOWN", "HTML Text Highlighting") #define REG_CALCGRID NC_("REG_CALCGRID", "Calc Grid") #define REG_CALCCELLFOCUS NC_("REG_CALCCELLFOCUS", "Calc Cell focus") +#define REG_CALCDBFOCUS NC_("REG_CALCDBFOCUS", "Table Style focus") #define REG_CALCPAGEBREAK NC_("REG_CALCPAGEBREAK", "Calc Page break") #define REG_CALCPAGEBREAKMANUAL NC_("REG_CALCPAGEBREAKMANUAL", "Calc Manual page breaks") #define REG_CALCPAGEBREAKAUTOMATIC NC_("REG_CALCPAGEBREAKAUTOMATIC", "Calc Automatic page breaks") diff --git a/cui/source/options/appearance.cxx b/cui/source/options/appearance.cxx index 098874c205db..718603f8549a 100644 --- a/cui/source/options/appearance.cxx +++ b/cui/source/options/appearance.cxx @@ -622,6 +622,7 @@ void SvxAppearanceTabPage::FillItemsList() { HTMLUNKNOWN, CuiResId(REG_HTMLUNKNOWN) }, { CALCGRID, CuiResId(REG_CALCGRID) }, { CALCCELLFOCUS, CuiResId(REG_CALCCELLFOCUS) }, + { CALCDBFOCUS, CuiResId(REG_CALCDBFOCUS) }, { CALCPAGEBREAK, CuiResId(REG_CALCPAGEBREAK) }, { CALCPAGEBREAKMANUAL, CuiResId(REG_CALCPAGEBREAKMANUAL) }, { CALCPAGEBREAKAUTOMATIC, CuiResId(REG_CALCPAGEBREAKAUTOMATIC) }, diff --git a/include/svtools/colorcfg.hxx b/include/svtools/colorcfg.hxx index 0275cfda26b8..40417e507a0c 100644 --- a/include/svtools/colorcfg.hxx +++ b/include/svtools/colorcfg.hxx @@ -57,6 +57,7 @@ enum ColorConfigEntry : int HTMLUNKNOWN , CALCGRID , CALCCELLFOCUS , + CALCDBFOCUS , CALCPAGEBREAK , CALCPAGEBREAKMANUAL, CALCPAGEBREAKAUTOMATIC, @@ -167,6 +168,7 @@ namespace { { std::u16string_view(u"HTMLUnknown"), false, false }, { std::u16string_view(u"CalcGrid"), false, false }, { std::u16string_view(u"CalcCellFocus"), false, false }, + { std::u16string_view(u"CalcDBFocus"), false, false }, { std::u16string_view(u"CalcPageBreak"), false, false }, { std::u16string_view(u"CalcPageBreakManual"), false, false }, { std::u16string_view(u"CalcPageBreakAutomatic"), false, false }, diff --git a/officecfg/registry/data/org/openoffice/Office/UI.xcu b/officecfg/registry/data/org/openoffice/Office/UI.xcu index de7f04e4b15e..4524acda923b 100644 --- a/officecfg/registry/data/org/openoffice/Office/UI.xcu +++ b/officecfg/registry/data/org/openoffice/Office/UI.xcu @@ -371,6 +371,11 @@ <value xsi:nil="true"/> </prop> </node> + <node oor:name="CalcDBFocus"> + <prop oor:name="Color"> + <value xsi:nil="true"/> + </prop> + </node> <node oor:name="CalcPageBreak"> <prop oor:name="Light"> <value xsi:nil="true"/> diff --git a/officecfg/registry/schema/org/openoffice/Office/UI.xcs b/officecfg/registry/schema/org/openoffice/Office/UI.xcs index a1a5d3113186..4623c42567ae 100644 --- a/officecfg/registry/schema/org/openoffice/Office/UI.xcs +++ b/officecfg/registry/schema/org/openoffice/Office/UI.xcs @@ -488,6 +488,16 @@ </info> </prop> </group> + <group oor:name="CalcDBFocus"> + <info> + <desc>Specifies the setting to change the database range highlight in Calc</desc> + </info> + <prop oor:name="Color" oor:type="xs:int"> + <info> + <desc>Specifies the color for the database range highlight in Calc.</desc> + </info> + </prop> + </group> <group oor:name="CalcPageBreak"> <info> <desc>Specifies the settings used for page breaks in the page break preview in Calc.</desc> diff --git a/sc/source/ui/inc/gridwin.hxx b/sc/source/ui/inc/gridwin.hxx index bf9863f3d817..9b06a208fd9a 100644 --- a/sc/source/ui/inc/gridwin.hxx +++ b/sc/source/ui/inc/gridwin.hxx @@ -122,8 +122,11 @@ class SAL_DLLPUBLIC_RTTI ScGridWindow : public vcl::DocWindow, public DropTarget std::unique_ptr<sdr::overlay::OverlayObjectList> mpOOHeader; std::unique_ptr<sdr::overlay::OverlayObjectList> mpOOShrink; std::unique_ptr<sdr::overlay::OverlayObjectList> mpOOSparklineGroup; + std::unique_ptr<sdr::overlay::OverlayObjectList> mpOODatabase; std::optional<tools::Rectangle> mpAutoFillRect; + std::optional<tools::Rectangle> mpDBExpandRect; + ScRange maDBRange; /// LibreOfficeKit needs a persistent FmFormView for tiled rendering, /// otherwise the invalidations from drawinglayer do not work. @@ -335,6 +338,7 @@ class SAL_DLLPUBLIC_RTTI ScGridWindow : public vcl::DocWindow, public DropTarget void UpdateFormulaRange(SCCOL nX1, SCROW nY1, SCCOL nX2, SCROW nY2); std::unique_ptr<sdr::overlay::OverlayObject> DrawOverlay(const std::vector<tools::Rectangle>& rRects, const Color& rColor, bool bBorder, bool bContrastOutline, sdr::overlay::OverlayType eOverlayType); + std::unique_ptr<sdr::overlay::OverlayObjectList> DrawFillMarker(SCCOL nCol, SCROW nRow, std::optional<tools::Rectangle>& rRect); protected: virtual void PrePaint(vcl::RenderContext& rRenderContext) override; @@ -498,6 +502,8 @@ public: void UpdateCursorOverlay(); void DeleteSelectionOverlay(); void UpdateSelectionOverlay(); + void UpdateDatabaseOverlay(); + void DeleteDatabaseOverlay(); void UpdateHighlightOverlay(); void DeleteAutoFillOverlay(); void UpdateAutoFillOverlay(); diff --git a/sc/source/ui/inc/viewdata.hxx b/sc/source/ui/inc/viewdata.hxx index 7552fe86d5f8..05753470e82b 100644 --- a/sc/source/ui/inc/viewdata.hxx +++ b/sc/source/ui/inc/viewdata.hxx @@ -39,6 +39,7 @@ enum class ScFillMode EMBED_LT = 2, EMBED_RB = 3, MATRIX = 4, + DBEXPAND = 5, // using a fill mode is a bit of a hack but the DB expansion behaves like a auto fill }; enum ScSplitMode { SC_SPLIT_NONE = 0, SC_SPLIT_NORMAL, SC_SPLIT_FIX, SC_SPLIT_MODE_MAX_ENUM = SC_SPLIT_FIX }; @@ -555,6 +556,7 @@ public: void ResetFillMode(); bool IsAnyFillMode() const { return nFillMode != ScFillMode::NONE; } bool IsFillMode() const { return nFillMode == ScFillMode::FILL; } + bool IsDBExpandMode() const { return nFillMode == ScFillMode::DBEXPAND; } ScFillMode GetFillMode() const { return nFillMode; } SvxAdjust GetEditAdjust() const {return eEditAdjust; } diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx index 9bf831ff0ca0..d85723ea7ec6 100644 --- a/sc/source/ui/view/gridwin.cxx +++ b/sc/source/ui/view/gridwin.cxx @@ -1744,10 +1744,10 @@ bool ScGridWindow::TestMouse( const MouseEvent& rMEvt, bool bAction ) ScRange aMarkRange; if (mrViewData.GetSimpleArea( aMarkRange ) == SC_MARK_SIMPLE) { - if (aMarkRange.aStart.Tab() == mrViewData.CurrentTabForData() && mpAutoFillRect) + if (aMarkRange.aStart.Tab() == mrViewData.CurrentTabForData()) { Point aMousePos = rMEvt.GetPosPixel(); - if (mpAutoFillRect->Contains(aMousePos)) + if (mpAutoFillRect && mpAutoFillRect->Contains(aMousePos)) { SetPointer( PointerStyle::Cross ); //! bold cross ? if (bAction) @@ -1768,6 +1768,19 @@ bool ScGridWindow::TestMouse( const MouseEvent& rMEvt, bool bAction ) } bNewPointer = true; } + else if (mpDBExpandRect && mpDBExpandRect->Contains(aMousePos)) + { + SetPointer( PointerStyle::Cross ); //! bold cross ? + if (bAction) + { + SCCOL nX = maDBRange.aEnd.Col(); + SCROW nY = maDBRange.aEnd.Row(); + + mrViewData.SetDragMode( + maDBRange.aStart.Col(), maDBRange.aStart.Row(), nX, nY, ScFillMode::DBEXPAND ); + } + bNewPointer = true; + } } } @@ -2013,7 +2026,6 @@ void ScGridWindow::HandleMouseButtonDown( const MouseEvent& rMEvt, MouseEventSta RfCorner rCorner = NONE; bool bFound = HitRangeFinder(rMEvt.GetPosPixel(), rCorner, &nRFIndex, &nRFAddX, &nRFAddY); - bRFSize = (rCorner != NONE); aRFSelectedCorned = rCorner; if (bFound) @@ -2457,6 +2469,32 @@ void ScGridWindow::MouseButtonUp( const MouseEvent& rMEvt ) mrViewData.GetView()->MarkRange( ScRange( aBlockRange.aStart, aEndPos ) ); } } + else if (mrViewData.IsDBExpandMode()) + { + SCCOL nStartCol; + SCROW nStartRow; + SCCOL nEndCol; + SCROW nEndRow; + mrViewData.GetFillData( nStartCol, nStartRow, nEndCol, nEndRow ); + SCCOL nFillCol = mrViewData.GetRefEndX(); + SCROW nFillRow = mrViewData.GetRefEndY(); + ScViewFunc* pView = mrViewData.GetView(); + pView->StopRefMode(); + mrViewData.ResetFillMode(); + pView->GetFunctionSet().SetAnchorFlag( false ); // #i5819# don't use AutoFill anchor flag for selection + ScAddress aCurrentAddress = mrViewData.GetCurPos(); + ScDocument& rDocument = mrViewData.GetDocument(); + if (ScDBData* pDBData = rDocument.GetDBAtCursor(aCurrentAddress.Col(), aCurrentAddress.Row(), aCurrentAddress.Tab(), ScDBDataPortion::AREA)) + { + SCTAB nTab = mrViewData.GetTabNumber(); + ScDBDocFunc aFunc( *mrViewData.GetDocShell() ); + ScDBData aNewDBData(*pDBData); + ScRange aNewDBRange(nStartCol, nStartRow, nTab, nFillCol, nFillRow, nTab); + aNewDBRange.PutInOrder(); + aNewDBData.SetArea(nTab, aNewDBRange.aStart.Col(), aNewDBRange.aStart.Row(), aNewDBRange.aEnd.Col(), aNewDBRange.aEnd.Row()); + aFunc.ModifyDBData(aNewDBData); + } + } else if (mrViewData.IsAnyFillMode()) { // Embedded area has been changed @@ -3185,7 +3223,9 @@ void ScGridWindow::StartDrag( sal_Int8 /* nAction */, const Point& rPosPixel ) } else if ( !DrawCommand(aDragEvent) ) + { mrViewData.GetView()->GetSelEngine()->Command( aDragEvent ); + } } static void lcl_SetTextCursorPos( ScViewData& rViewData, ScSplitPos eWhich, vcl::Window* pWin ) @@ -6278,6 +6318,7 @@ void ScGridWindow::CursorChanged() UpdateCursorOverlay(); UpdateAutoFillOverlay(); UpdateSparklineGroupOverlay(); + UpdateDatabaseOverlay(); } void ScGridWindow::ImpCreateOverlayObjects() @@ -6291,6 +6332,7 @@ void ScGridWindow::ImpCreateOverlayObjects() UpdateHeaderOverlay(); UpdateShrinkOverlay(); UpdateSparklineGroupOverlay(); + UpdateDatabaseOverlay(); } void ScGridWindow::ImpDestroyOverlayObjects() @@ -6304,6 +6346,7 @@ void ScGridWindow::ImpDestroyOverlayObjects() DeleteHeaderOverlay(); DeleteShrinkOverlay(); DeleteSparklineGroupOverlay(); + DeleteDatabaseOverlay(); } void ScGridWindow::UpdateAllOverlays() @@ -6905,6 +6948,66 @@ void ScGridWindow::UpdateSelectionOverlay() } } +void ScGridWindow::DeleteDatabaseOverlay() +{ + mpOODatabase.reset(); +} + +void ScGridWindow::UpdateDatabaseOverlay() +{ + const MapMode aDrawMode = GetDrawMapMode(); + const MapMode aOldMode = GetMapMode(); + comphelper::ScopeGuard aMapModeGuard( + [&aOldMode, &aDrawMode, this] { + if (aOldMode != aDrawMode) + SetMapMode(aOldMode); + } + ); + if (aOldMode != aDrawMode) + SetMapMode(aDrawMode); + + DeleteDatabaseOverlay(); + + ScDocument& rDocument = mrViewData.GetDocument(); + ScAddress aCurrentAddress = mrViewData.GetCurPos(); + std::vector<basegfx::B2DRange> aRanges; + ScRange aCurrRange; + if (ScDBData* pDBData = rDocument.GetDBAtCursor(aCurrentAddress.Col(), aCurrentAddress.Row(), aCurrentAddress.Tab(), ScDBDataPortion::AREA)) + { + pDBData->GetArea(aCurrRange); + Point aStart = mrViewData.GetScrPos(aCurrRange.aStart.Col(), + aCurrRange.aStart.Row(), eWhich); + Point aEnd = mrViewData.GetScrPos(aCurrRange.aEnd.Col() + 1, + aCurrRange.aEnd.Row() + 1, eWhich); + + basegfx::B2DRange aRange(aStart.X(), aStart.Y(), aEnd.X(), aEnd.Y()); + const basegfx::B2DHomMatrix aTransform(GetOutDev()->GetInverseViewTransformation()); + aRange.transform(aTransform); + aRanges.push_back(aRange); + + maDBRange = aCurrRange; + } + + if (!aRanges.empty()) + { + ScModule* mod = ScModule::get(); + Color aDBColor = mod->GetColorConfig().GetColorValue(svtools::CALCDBFOCUS).nColor; + + // #i70788# get the OverlayManager safely + rtl::Reference<sdr::overlay::OverlayManager> xOverlayManager = getOverlayManager(); + std::unique_ptr<sdr::overlay::OverlayObject> pOverlay(new sdr::overlay::OverlaySelection( + sdr::overlay::OverlayType::NoFill, + aDBColor, + std::move(aRanges), + true, true)); + + xOverlayManager->add(*pOverlay); + std::unique_ptr<sdr::overlay::OverlayObjectList> pOverlayList = DrawFillMarker(aCurrRange.aEnd.Col(), aCurrRange.aEnd.Row(), mpDBExpandRect); + mpOODatabase.swap(pOverlayList); + mpOODatabase->append(std::move(pOverlay)); + } +} + void ScGridWindow::UpdateHighlightOverlay() { mpOOHighlight.reset(); // DeleteHighlightOverlay @@ -6939,36 +7042,8 @@ void ScGridWindow::DeleteAutoFillOverlay() mpAutoFillRect.reset(); } -void ScGridWindow::UpdateAutoFillOverlay() +std::unique_ptr<sdr::overlay::OverlayObjectList> ScGridWindow::DrawFillMarker(SCCOL nX, SCROW nY, std::optional<tools::Rectangle>& rRect) { - const MapMode aDrawMode = GetDrawMapMode(); - const MapMode aOldMode = GetMapMode(); - comphelper::ScopeGuard aMapModeGuard( - [&aOldMode, &aDrawMode, this] { - if (aOldMode != aDrawMode) - SetMapMode(aOldMode); - } - ); - if (aOldMode != aDrawMode) - SetMapMode(aDrawMode); - - DeleteAutoFillOverlay(); - - // get the AutoFill handle rectangle in pixels - - if ( !(bAutoMarkVisible && aAutoMarkPos.Tab() == mrViewData.CurrentTabForData() && - !mrViewData.HasEditView(eWhich) && mrViewData.IsActive()) ) - return; - - SCCOL nX = aAutoMarkPos.Col(); - SCROW nY = aAutoMarkPos.Row(); - - if (!maVisibleRange.isInside(nX, nY) && !comphelper::LibreOfficeKit::isActive()) - { - // Autofill mark is not visible. Bail out. - return; - } - SCTAB nTab = mrViewData.CurrentTabForData(); ScDocument& rDoc = mrViewData.GetDocument(); bool bLayoutRTL = rDoc.IsLayoutRTL( nTab ); @@ -7005,8 +7080,8 @@ void ScGridWindow::UpdateAutoFillOverlay() tools::Rectangle aFillRect(aFillPos, aFillHandleSize); // expand rect to increase hit area - mpAutoFillRect = aFillRect; - mpAutoFillRect->expand(fScaleFactor); + rRect = aFillRect; + rRect->expand(fScaleFactor); // #i70788# get the OverlayManager safely rtl::Reference<sdr::overlay::OverlayManager> xOverlayManager = getOverlayManager(); @@ -7055,10 +7130,46 @@ void ScGridWindow::UpdateAutoFillOverlay() xOverlayManager->add(*pOverlayOuter); xOverlayManager->add(*pOverlayInner); - mpOOAutoFill.reset(new sdr::overlay::OverlayObjectList); - mpOOAutoFill->append(std::move(pOverlayOuter)); - mpOOAutoFill->append(std::move(pOverlayInner)); + std::unique_ptr<sdr::overlay::OverlayObjectList> pOverlayList(new sdr::overlay::OverlayObjectList); + pOverlayList->append(std::move(pOverlayOuter)); + pOverlayList->append(std::move(pOverlayInner)); + + return pOverlayList; } + return std::unique_ptr<sdr::overlay::OverlayObjectList>(); +} + +void ScGridWindow::UpdateAutoFillOverlay() +{ + const MapMode aDrawMode = GetDrawMapMode(); + const MapMode aOldMode = GetMapMode(); + comphelper::ScopeGuard aMapModeGuard( + [&aOldMode, &aDrawMode, this] { + if (aOldMode != aDrawMode) + SetMapMode(aOldMode); + } + ); + if (aOldMode != aDrawMode) + SetMapMode(aDrawMode); + + DeleteAutoFillOverlay(); + + // get the AutoFill handle rectangle in pixels + + if ( !(bAutoMarkVisible && aAutoMarkPos.Tab() == mrViewData.GetTabNumber() && + !mrViewData.HasEditView(eWhich) && mrViewData.IsActive()) ) + return; + + SCCOL nX = aAutoMarkPos.Col(); + SCROW nY = aAutoMarkPos.Row(); + + if (!maVisibleRange.isInside(nX, nY) && !comphelper::LibreOfficeKit::isActive()) + { + // Autofill mark is not visible. Bail out. + return; + } + + mpOOAutoFill = DrawFillMarker(nX, nY, mpAutoFillRect); } void ScGridWindow::DeleteDragRectOverlay() diff --git a/sc/source/ui/view/select.cxx b/sc/source/ui/view/select.cxx index 03a882f05e64..612a04c9c0e8 100644 --- a/sc/source/ui/view/select.cxx +++ b/sc/source/ui/view/select.cxx @@ -625,6 +625,44 @@ bool ScViewFunctionSet::SetCursorAtCell( SCCOL nPosX, SCROW nPosY, bool bScroll pView->UpdateRef( nPosX, nPosY, nTab ); } + else if (m_pViewData->IsDBExpandMode()) + { + SCCOL nFillColStart; + SCROW nFillRowStart; + SCCOL nFillColEnd; + SCROW nFillRowEnd; + m_pViewData->GetFillData(nFillColStart, nFillRowStart, nFillColEnd, nFillRowEnd); + + bool bNegX = ( nPosX < nFillColStart ); + bool bNegY = ( nPosY < nFillRowStart ); + + if ( bNegX ) + { + // in SetCursorAtPoint hidden columns are skipped. + // They must be skipped here too, or the result will always be the first hidden column. + while ( nPosX<nFillColStart && rDoc.ColHidden(nPosX, nTab) ) ++nPosX; + } + + if ( bNegY ) + { + // in SetCursorAtPoint hidden rows are skipped. + // They must be skipped here too, or the result will always be the first hidden row. + if (nPosY < nFillRowStart) + { + nPosY = rDoc.FirstVisibleRow(nPosY, nFillRowStart-1, nTab); + if (!rDoc.ValidRow(nPosY)) + nPosY = nFillRowStart; + } + } + + if ( nFillColStart != m_pViewData->GetRefStartX() || nFillRowStart != m_pViewData->GetRefStartY() ) + { + m_pViewData->GetView()->DoneRefMode(); + m_pViewData->GetView()->InitRefMode( nFillColStart, nFillRowStart, nTab, SC_REFTYPE_FILL ); + } + + pView->UpdateRef( nPosX, nPosY, nTab ); + } else if (m_pViewData->IsAnyFillMode()) { ScFillMode nMode = m_pViewData->GetFillMode(); diff --git a/sc/source/ui/view/tabvwsh4.cxx b/sc/source/ui/view/tabvwsh4.cxx index 84d91fd11807..d3a46ec9b0bd 100644 --- a/sc/source/ui/view/tabvwsh4.cxx +++ b/sc/source/ui/view/tabvwsh4.cxx @@ -1760,20 +1760,23 @@ void SAL_CALL ScViewOptiChangesListener::changesOccurred(const util::ChangesEven { for (const auto& change : rEvent.Changes) { - if (OUString sChangedEntry; - (change.Accessor >>= sChangedEntry) && sChangedEntry == "ColumnRowHighlighting") + OUString sChangedEntry; + if (change.Accessor >>= sChangedEntry) { - mrViewShell.HighlightOverlay(); - break; - } - - if (OUString sChangedEntry; (change.Accessor >>= sChangedEntry) && sChangedEntry == - "ColorSchemes/org.openoffice.Office.UI:ColorScheme['COLOR_SCHEME_LIBREOFFICE_AUTOMATIC']/CalcCellFocus/Color") - { - mrViewShell.GetActiveWin()->UpdateCursorOverlay(); - mrViewShell.GetActiveWin()->UpdateAutoFillOverlay(); - mrViewShell.GetActiveWin()->UpdateHighlightOverlay(); - break; + if (sChangedEntry == "ColumnRowHighlighting") + { + mrViewShell.HighlightOverlay(); + } + else if (sChangedEntry == "ColorSchemes/org.openoffice.Office.UI:ColorScheme['COLOR_SCHEME_LIBREOFFICE_AUTOMATIC']/CalcCellFocus/Color") + { + mrViewShell.GetActiveWin()->UpdateCursorOverlay(); + mrViewShell.GetActiveWin()->UpdateAutoFillOverlay(); + mrViewShell.GetActiveWin()->UpdateHighlightOverlay(); + } + else if (sChangedEntry == "ColorSchemes/org.openoffice.Office.UI:ColorScheme['COLOR_SCHEME_LIBREOFFICE_AUTOMATIC']/CalcDBFocus/Color") + { + mrViewShell.GetActiveWin()->UpdateDatabaseOverlay(); + } } } } diff --git a/svtools/source/config/colorcfg.cxx b/svtools/source/config/colorcfg.cxx index 4934200d97ee..c3cd4a936983 100644 --- a/svtools/source/config/colorcfg.cxx +++ b/svtools/source/config/colorcfg.cxx @@ -37,6 +37,7 @@ #include <vcl/window.hxx> #include "itemholder2.hxx" +#include <tools/color.hxx> #include <vcl/svapp.hxx> #include <vcl/event.hxx> @@ -626,6 +627,7 @@ Color ColorConfig::GetDefaultColor(ColorConfigEntry eEntry, int nMod) { COL_GRAY, COL_GRAY }, // HTMLUNKNOWN { COL_GRAY3, COL_GRAY7 }, // CALCGRID { COL_LIGHTBLUE, COL_LIGHTBLUE }, // CALCCELLFOCUS + { COL_LIGHTGRAYBLUE, COL_LIGHTGRAYBLUE }, // CALCDBFOCUS { COL_BLUE, COL_BLUE }, // CALCPAGEBREAK { Color(0x2300dc), Color(0x2300DC) }, // CALCPAGEBREAKMANUAL { COL_GRAY7, COL_GRAY7 }, // CALCPAGEBREAKAUTOMATIC @@ -685,6 +687,10 @@ Color ColorConfig::GetDefaultColor(ColorConfigEntry eEntry, int nMod) aRet = Application::GetSettings().GetStyleSettings().GetAccentColor(); break; + case CALCDBFOCUS: + aRet = Application::GetSettings().GetStyleSettings().GetAccentColor(); + break; + default: int nAppMod;
