sc/source/ui/view/gridwin.cxx | 53 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+)
New commits: commit 8cd39f91beb2f49e5ceeb4a5c8fd9af28bd2c309 Author: Jan Holesovsky <ke...@collabora.com> Date: Wed Mar 25 13:15:17 2015 +0100 sc tiled editing: Implement cell selections. Change-Id: Ic09572ac133c1bb473d716ec600ddb444948aa8e diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx index 3bbe8b8..dd34e30 100644 --- a/sc/source/ui/view/gridwin.cxx +++ b/sc/source/ui/view/gridwin.cxx @@ -134,6 +134,9 @@ #include <vcl/svapp.hxx> #include <svx/sdr/overlay/overlayselection.hxx> +#define LOK_USE_UNSTABLE_API +#include <LibreOfficeKit/LibreOfficeKitEnums.h> + #include <vector> #include <boost/shared_ptr.hpp> @@ -5742,6 +5745,44 @@ void ScGridWindow::UpdateCopySourceOverlay() SetMapMode( aOldMode ); } +/// Turn the selection ranges rRanges into the LibreOfficeKit selection, and call the callback. +static void updateLibreOfficeKitSelection(ScDrawLayer* pDrawLayer, const std::vector<basegfx::B2DRange>& rRanges) +{ + if (!pDrawLayer->isTiledRendering()) + return; + + basegfx::B2DRange aBoundingBox; + std::stringstream ss; + + bool bIsFirst = true; + for (const auto& rRange : rRanges) + { + aBoundingBox.expand(rRange); + + if (bIsFirst) + bIsFirst = false; + else + ss << "; "; + + Rectangle aRect(rRange.getMinX() / HMM_PER_TWIPS, rRange.getMinY() / HMM_PER_TWIPS, + rRange.getMaxX() / HMM_PER_TWIPS, rRange.getMaxY() / HMM_PER_TWIPS); + ss << aRect.toString().getStr(); + } + + // selection start handle + Rectangle aStart(aBoundingBox.getMinX() / HMM_PER_TWIPS, aBoundingBox.getMinY() / HMM_PER_TWIPS, + aBoundingBox.getMinX() / HMM_PER_TWIPS, (aBoundingBox.getMinY() / HMM_PER_TWIPS) + 256); + pDrawLayer->libreOfficeKitCallback(LOK_CALLBACK_TEXT_SELECTION_START, aStart.toString().getStr()); + + // selection end handle + Rectangle aEnd(aBoundingBox.getMaxX() / HMM_PER_TWIPS, (aBoundingBox.getMaxY() / HMM_PER_TWIPS) - 256, + aBoundingBox.getMaxX() / HMM_PER_TWIPS, aBoundingBox.getMaxY() / HMM_PER_TWIPS); + pDrawLayer->libreOfficeKitCallback(LOK_CALLBACK_TEXT_SELECTION_END, aEnd.toString().getStr()); + + // the selection itself + pDrawLayer->libreOfficeKitCallback(LOK_CALLBACK_TEXT_SELECTION, ss.str().c_str()); +} + void ScGridWindow::UpdateCursorOverlay() { MapMode aDrawMode = GetDrawMapMode(); @@ -5891,6 +5932,15 @@ void ScGridWindow::UpdateCursorOverlay() xOverlayManager->add(*pOverlay); mpOOCursors.reset(new sdr::overlay::OverlayObjectList); mpOOCursors->append(*pOverlay); + + // notify the LibreOfficeKit too, but only if there's no + // selection yet, to avoid setting the LOK selection twice + // (once for the cell only, and then for the selection) + ScDrawLayer* pDrawLayer = pDoc->GetDrawLayer(); + if (pDrawLayer->isTiledRendering() && !pViewData->GetMarkData().IsMarked() && !pViewData->GetMarkData().IsMultiMarked()) + { + updateLibreOfficeKitSelection(pDrawLayer, aRanges); + } } } @@ -5957,6 +6007,9 @@ void ScGridWindow::UpdateSelectionOverlay() xOverlayManager->add(*pOverlay); mpOOSelection.reset(new sdr::overlay::OverlayObjectList); mpOOSelection->append(*pOverlay); + + // notify the LibreOfficeKit too + updateLibreOfficeKitSelection(pDoc->GetDrawLayer(), aRanges); } } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits