summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTamás Zolnai <tamas.zolnai@collabora.com>2017-10-28 18:02:46 +0200
committerTamás Zolnai <tamas.zolnai@collabora.com>2017-10-29 09:36:39 +0100
commit3d872ecc51e47e02e70732c848964274b2aad29e (patch)
tree4ce0312c0b02a5f9d10f153e1f63644d242154d4
parent4bfa790236b9c0d70c28101858547c616e75e9e4 (diff)
tdf#110357: Impress table looses selection when clicking on ...
... Increase \ decrease font button Change-Id: I52cf853de01b06c6c9db9779f15174f895789da8 Reviewed-on: https://gerrit.libreoffice.org/43962 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Tamás Zolnai <tamas.zolnai@collabora.com>
-rw-r--r--include/svx/sdr/table/tablecontroller.hxx3
-rw-r--r--include/svx/selectioncontroller.hxx3
-rw-r--r--sd/qa/unit/tiledrendering/data/tdf105502.odpbin11376 -> 11629 bytes
-rw-r--r--sd/qa/unit/tiledrendering/tiledrendering.cxx12
-rw-r--r--sd/source/ui/func/futext.cxx41
-rw-r--r--svx/source/svdraw/selectioncontroller.cxx6
-rw-r--r--svx/source/table/tablecontroller.cxx46
7 files changed, 70 insertions, 41 deletions
diff --git a/include/svx/sdr/table/tablecontroller.hxx b/include/svx/sdr/table/tablecontroller.hxx
index 5b9dd171710c..79730758b419 100644
--- a/include/svx/sdr/table/tablecontroller.hxx
+++ b/include/svx/sdr/table/tablecontroller.hxx
@@ -100,6 +100,9 @@ public:
/// @see sdr::SelectionController::getSelectedCells().
void getSelectedCells( CellPos& rFirstPos, CellPos& rLastPos ) override;
void setSelectedCells( const CellPos& rFirstPos, const CellPos& rLastPos );
+
+ virtual bool ChangeFontSize(bool bGrow, const FontList* pFontList) override;
+
void clearSelection();
void selectAll();
diff --git a/include/svx/selectioncontroller.hxx b/include/svx/selectioncontroller.hxx
index d2fb9c4b9964..7510a830e645 100644
--- a/include/svx/selectioncontroller.hxx
+++ b/include/svx/selectioncontroller.hxx
@@ -33,6 +33,7 @@ class SfxStyleSheet;
class SdrPage;
class SdrModel;
class Point;
+class FontList;
namespace sdr
{
@@ -78,6 +79,8 @@ public:
virtual bool setCursorLogicPosition(const Point& rPosition, bool bPoint);
/// Get the position of the first and the last selected cell.
virtual void getSelectedCells(table::CellPos& rFirstPos, table::CellPos& rLastPos);
+ /// Changes the font (grow/shrink) according to the input parameters.
+ virtual bool ChangeFontSize(bool bGrow, const FontList* pFontList);
};
}
diff --git a/sd/qa/unit/tiledrendering/data/tdf105502.odp b/sd/qa/unit/tiledrendering/data/tdf105502.odp
index 6fe818090c8b..2150f1152ba7 100644
--- a/sd/qa/unit/tiledrendering/data/tdf105502.odp
+++ b/sd/qa/unit/tiledrendering/data/tdf105502.odp
Binary files differ
diff --git a/sd/qa/unit/tiledrendering/tiledrendering.cxx b/sd/qa/unit/tiledrendering/tiledrendering.cxx
index 1e3d54e7e6d1..6d5c0bc84af2 100644
--- a/sd/qa/unit/tiledrendering/tiledrendering.cxx
+++ b/sd/qa/unit/tiledrendering/tiledrendering.cxx
@@ -1601,13 +1601,21 @@ void SdTiledRenderingTest::testTdf105502()
// Assert that the selected A1 has now a larger font than the unselected
// A2.
xmlDocPtr pXmlDoc = parseXmlDump();
- sal_Int32 nA1Height = getXPath(pXmlDoc, "//Cell[1]/SdrText/OutlinerParaObject/EditTextObject/ContentInfo/attribs[1]/SvxFontHeightItem", "height").toInt32();
+ sal_Int32 nA1Height = getXPath(pXmlDoc, "//Cell[1]/SdrText/OutlinerParaObject/EditTextObject/ContentInfo/SfxItemSet/SvxFontHeightItem[1]", "height").toInt32();
sal_Int32 nA2Height = getXPath(pXmlDoc, "//Cell[3]/SdrText/OutlinerParaObject/EditTextObject/ContentInfo/attribs[1]/SvxFontHeightItem", "height").toInt32();
// This failed when FuText::ChangeFontSize() never did "continue" in the
// text loop, instead of doing so depending on what IsInSelection() returns.
CPPUNIT_ASSERT(nA1Height > nA2Height);
- xmlFreeDoc(pXmlDoc);
+ // Check that selection remains the same
+ CPPUNIT_ASSERT(xSelectionController->hasSelectedCells());
+ xSelectionController->getSelectedCells(aFirstCell, aLastCell);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), aFirstCell.mnCol);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), aFirstCell.mnRow);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1), aLastCell.mnCol);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), aLastCell.mnRow);
+
+ xmlFreeDoc(pXmlDoc);
comphelper::LibreOfficeKit::setActive(false);
}
diff --git a/sd/source/ui/func/futext.cxx b/sd/source/ui/func/futext.cxx
index 19f18efa9906..9ea0570e6e17 100644
--- a/sd/source/ui/func/futext.cxx
+++ b/sd/source/ui/func/futext.cxx
@@ -1372,24 +1372,6 @@ bool FuText::cancel()
}
}
-/// Is rCell covered by the rFirst - rLast selection?
-static bool IsInSelection(const sdr::table::CellPos& rFirst, const sdr::table::CellPos& rLast, sdr::table::CellPos const & rCell)
-{
- if (rCell.mnCol < rFirst.mnCol)
- return false;
-
- if (rCell.mnCol > rLast.mnCol)
- return false;
-
- if (rCell.mnRow < rFirst.mnRow)
- return false;
-
- if (rCell.mnRow > rLast.mnRow)
- return false;
-
- return true;
-}
-
void FuText::ChangeFontSize( bool bGrow, OutlinerView* pOLV, const FontList* pFontList, ::sd::View* pView )
{
if( !pFontList || !pView )
@@ -1410,31 +1392,12 @@ void FuText::ChangeFontSize( bool bGrow, OutlinerView* pOLV, const FontList* pFo
if( pTextObj )
{
rtl::Reference<sdr::SelectionController> xSelectionController(pView->getSelectionController());
- sdr::table::CellPos aFirstCell;
- sdr::table::CellPos aLastCell;
- sdr::table::SdrTableObj* pTableObject = nullptr;
- if (xSelectionController.is() && xSelectionController->hasSelectedCells())
+ if (xSelectionController.is() && xSelectionController->ChangeFontSize(bGrow, pFontList))
{
- // This is a table object, and one or more of its cells are
- // selected.
- xSelectionController->getSelectedCells(aFirstCell, aLastCell);
- pTableObject = dynamic_cast<sdr::table::SdrTableObj*>(pTextObj);
+ continue;
}
for( sal_Int32 nText = 0; nText < pTextObj->getTextCount(); nText++ )
{
- if (pTableObject)
- {
- sal_Int32 nColCount = pTableObject->getColumnCount();
- if (nColCount > 0)
- {
- sdr::table::CellPos aPos(nText % nColCount, nText / nColCount);
- if (!IsInSelection(aFirstCell, aLastCell, aPos))
- // There is a selection, but this cell is not
- // part of it: don't change font size.
- continue;
- }
- }
-
pTextObj->setActiveText( nText );
// Put text object into edit mode.
diff --git a/svx/source/svdraw/selectioncontroller.cxx b/svx/source/svdraw/selectioncontroller.cxx
index 0fc2d526e1c1..e8e6383e3a8c 100644
--- a/svx/source/svdraw/selectioncontroller.cxx
+++ b/svx/source/svdraw/selectioncontroller.cxx
@@ -119,6 +119,12 @@ bool SelectionController::setCursorLogicPosition(const Point& /*rPosition*/, boo
return false;
}
+
+bool SelectionController::ChangeFontSize(bool /*bGrow*/, const FontList* /*pFontList*/)
+{
+ return false;
+}
+
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/source/table/tablecontroller.cxx b/svx/source/table/tablecontroller.cxx
index f12b7b1d4e67..0677bccbb892 100644
--- a/svx/source/table/tablecontroller.cxx
+++ b/svx/source/table/tablecontroller.cxx
@@ -72,6 +72,7 @@
#include <cppuhelper/implbase.hxx>
#include <comphelper/lok.hxx>
#include <sfx2/viewsh.hxx>
+#include <editeng/editview.hxx>
using ::editeng::SvxBorderLine;
using namespace sdr::table;
@@ -2029,6 +2030,51 @@ void SvxTableController::setSelectedCells( const CellPos& rStart, const CellPos&
}
+bool SvxTableController::ChangeFontSize(bool bGrow, const FontList* pFontList)
+{
+ if (mxTable.is())
+ {
+ if (mpView->IsTextEdit())
+ return true;
+
+ CellPos aStart, aEnd;
+ if(hasSelectedCells())
+ {
+ getSelectedCells(aStart, aEnd);
+ }
+ else
+ {
+ aStart.mnRow = 0;
+ aStart.mnCol = 0;
+ aEnd.mnRow = mxTable->getRowCount() - 1;
+ aEnd.mnCol = mxTable->getColumnCount() - 1;
+ }
+
+ for (sal_Int32 nRow = aStart.mnRow; nRow <= aEnd.mnRow; nRow++)
+ {
+ for (sal_Int32 nCol = aStart.mnCol; nCol <= aEnd.mnCol; nCol++)
+ {
+ CellRef xCell(dynamic_cast< Cell* >(mxTable->getCellByPosition(nCol, nRow).get()));
+ if (xCell.is())
+ {
+ if (mpModel && mpModel->IsUndoEnabled())
+ xCell->AddUndo();
+
+ SfxItemSet aCellSet(xCell->GetItemSet());
+ if (EditView::ChangeFontSize(bGrow, aCellSet, pFontList))
+ {
+ xCell->SetMergedItemSetAndBroadcast(aCellSet, false);
+ }
+ }
+ }
+ }
+ UpdateTableShape();
+ return true;
+ }
+ return false;
+}
+
+
void SvxTableController::UpdateSelection( const CellPos& rPos )
{
maCursorLastPos = rPos;