include/osl/conditn.hxx | 4 + sc/CppunitTest_sc_tiledrendering.mk | 1 sc/inc/document.hxx | 2 sc/qa/unit/tiledrendering/tiledrendering.cxx | 55 ++++++++++++++++++++++++--- sc/source/core/data/documen2.cxx | 34 ++++++++++++---- sc/source/ui/inc/viewdata.hxx | 8 +++ sc/source/ui/unoobj/docuno.cxx | 3 - sc/source/ui/view/gridwin4.cxx | 2 sc/source/ui/view/tabview3.cxx | 18 ++++++++ sc/source/ui/view/viewdata.cxx | 2 10 files changed, 112 insertions(+), 17 deletions(-)
New commits: commit b105b8c4c966f68bef93d72458edf64d6cb0cea2 Author: Jan Holesovsky <[email protected]> Date: Tue May 10 11:49:41 2016 +0200 sc lok: Extend the spreadsheet area when we are "close enough" to the end. We can tweak later what the "close enough" means - for the moment it is 10 columns and 25 rows. Change-Id: I92127a71aa6683c03692e96b9e0da7827942c94b diff --git a/sc/source/ui/view/tabview3.cxx b/sc/source/ui/view/tabview3.cxx index d16efbc..2005d91 100644 --- a/sc/source/ui/view/tabview3.cxx +++ b/sc/source/ui/view/tabview3.cxx @@ -304,16 +304,17 @@ void ScTabView::SetCursor( SCCOL nPosX, SCROW nPosY, bool bNew ) if (comphelper::LibreOfficeKit::isActive()) { - if ( nPosX > aViewData.GetMaxTiledCol() || nPosY > aViewData.GetMaxTiledRow() ) + if (nPosX > aViewData.GetMaxTiledCol() - 10 || nPosY > aViewData.GetMaxTiledRow() - 25) { - aViewData.SetMaxTiledCol( std::max( nPosX, aViewData.GetMaxTiledCol() ) ); - aViewData.SetMaxTiledRow( std::max( nPosY, aViewData.GetMaxTiledRow() ) ); + if (nPosX > aViewData.GetMaxTiledCol() - 10) + aViewData.SetMaxTiledCol(std::max(nPosX, aViewData.GetMaxTiledCol()) + 10); + + if (nPosY > aViewData.GetMaxTiledRow() - 25) + aViewData.SetMaxTiledRow(std::max(nPosY, aViewData.GetMaxTiledRow()) + 25); ScDocShell* pDocSh = aViewData.GetDocShell(); if (pDocSh) - { pDocSh->libreOfficeKitCallback(LOK_CALLBACK_DOCUMENT_SIZE_CHANGED, ""); - } } } } commit fd5ae1f201a894c5b15d52f3cab57ef15c9eb5b9 Author: Jan Holesovsky <[email protected]> Date: Tue May 10 10:50:13 2016 +0200 sc lok: Move the handling of the area back to GetTiledRenderingArea(). Change-Id: I4dbfc090ab43065c719f83b5355cd9832ee4d1e3 diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx index 272d2eb..f5bcd9a 100644 --- a/sc/inc/document.hxx +++ b/sc/inc/document.hxx @@ -1159,7 +1159,7 @@ public: void InvalidateTableArea(); /// Return the number of colums / rows that should be visible for the tiled rendering. - SC_DLLPUBLIC bool GetTiledRenderingArea(SCTAB nTab, SCCOL& rEndCol, SCROW& rEndRow) const; + SC_DLLPUBLIC void GetTiledRenderingArea(SCTAB nTab, SCCOL& rEndCol, SCROW& rEndRow) const; SC_DLLPUBLIC bool GetDataStart( SCTAB nTab, SCCOL& rStartCol, SCROW& rStartRow ) const; diff --git a/sc/source/core/data/documen2.cxx b/sc/source/core/data/documen2.cxx index e0058ec..6940762c 100644 --- a/sc/source/core/data/documen2.cxx +++ b/sc/source/core/data/documen2.cxx @@ -84,6 +84,7 @@ #include "externalrefmgr.hxx" #include "appoptio.hxx" #include "scmod.hxx" +#include "../../ui/inc/viewdata.hxx" #include "../../ui/inc/viewutil.hxx" #include "tabprotection.hxx" #include "formulaparserpool.hxx" @@ -706,9 +707,35 @@ bool ScDocument::GetDataStart( SCTAB nTab, SCCOL& rStartCol, SCROW& rStartRow ) return false; } -bool ScDocument::GetTiledRenderingArea(SCTAB nTab, SCCOL& rEndCol, SCROW& rEndRow) const +void ScDocument::GetTiledRenderingArea(SCTAB nTab, SCCOL& rEndCol, SCROW& rEndRow) const { - return GetPrintArea(nTab, rEndCol, rEndRow, false); + bool bHasPrintArea = GetPrintArea(nTab, rEndCol, rEndRow, false); + + // we need some reasonable minimal document size + ScViewData* pViewData = ScDocShell::GetViewData(); + if (!pViewData) + { + if (!bHasPrintArea) + { + rEndCol = 20; + rEndRow = 50; + } + else + { + rEndCol += 20; + rEndRow += 50; + } + } + else if (!bHasPrintArea) + { + rEndCol = pViewData->GetMaxTiledCol(); + rEndRow = pViewData->GetMaxTiledRow(); + } + else + { + rEndCol = std::max(rEndCol, pViewData->GetMaxTiledCol()); + rEndRow = std::max(rEndRow, pViewData->GetMaxTiledRow()); + } } bool ScDocument::MoveTab( SCTAB nOldPos, SCTAB nNewPos, ScProgress* pProgress ) diff --git a/sc/source/ui/unoobj/docuno.cxx b/sc/source/ui/unoobj/docuno.cxx index 0f919ea..67bdb09 100644 --- a/sc/source/ui/unoobj/docuno.cxx +++ b/sc/source/ui/unoobj/docuno.cxx @@ -543,11 +543,7 @@ Size ScModelObj::getDocumentSize() SCROW nEndRow = 0; const ScDocument& rDoc = pDocShell->GetDocument(); - if (!rDoc.GetTiledRenderingArea(nTab, nEndCol, nEndRow)) - return aSize; - - nEndCol = std::max(nEndCol, pViewData->GetMaxTiledCol()); - nEndRow = std::max(nEndRow, pViewData->GetMaxTiledRow()); + rDoc.GetTiledRenderingArea(nTab, nEndCol, nEndRow); // convert to twips aSize.setWidth(rDoc.GetColWidth(0, nEndCol, nTab, true)); diff --git a/sc/source/ui/view/gridwin4.cxx b/sc/source/ui/view/gridwin4.cxx index 6185a88..c4d7da1 100644 --- a/sc/source/ui/view/gridwin4.cxx +++ b/sc/source/ui/view/gridwin4.cxx @@ -1615,9 +1615,7 @@ void ScGridWindow::GetSelectionRects( ::std::vector< Rectangle >& rPixelRects ) { SCCOL nMaxTiledCol; SCROW nMaxTiledRow; - pDoc->GetTiledRenderingArea( nTab, nMaxTiledCol, nMaxTiledRow ); - nMaxTiledCol = std::max(nMaxTiledCol, pViewData->GetMaxTiledCol()); - nMaxTiledRow = std::max(nMaxTiledRow, pViewData->GetMaxTiledRow()); + pDoc->GetTiledRenderingArea(nTab, nMaxTiledCol, nMaxTiledRow); if (nX2 > nMaxTiledCol) nX2 = nMaxTiledCol; diff --git a/sc/source/ui/view/tabview.cxx b/sc/source/ui/view/tabview.cxx index ac1f571..c7cf4cb 100644 --- a/sc/source/ui/view/tabview.cxx +++ b/sc/source/ui/view/tabview.cxx @@ -2318,8 +2318,6 @@ OUString ScTabView::getRowColumnHeaders(const Rectangle& rRectangle) SCCOL nEndCol = 0; SCROW nEndRow = 0; pDoc->GetTiledRenderingArea(aViewData.GetTabNo(), nEndCol, nEndRow); - nEndCol = std::max(nEndCol, aViewData.GetMaxTiledCol()); - nEndRow = std::max(nEndRow, aViewData.GetMaxTiledRow()); boost::property_tree::ptree aRows; long nTotal = 0; commit eff0aa51c98a40163f2106f45a5627d038a10f6e Author: Henry Castro <[email protected]> Date: Sun May 8 21:11:13 2016 -0400 sc lok: set a limit for tiled column and row In the tiled rendering case, not all column and row are rendered, so it was set a limit for tiled column and row. However, when a client request to move the cursor beyond the limit, the tiled column and row is updated and they are rendered later. Change-Id: Id0de533ebf7b3c6e0343f9dc15336150729299fa diff --git a/sc/CppunitTest_sc_tiledrendering.mk b/sc/CppunitTest_sc_tiledrendering.mk index 995cdc8..d1200b1 100644 --- a/sc/CppunitTest_sc_tiledrendering.mk +++ b/sc/CppunitTest_sc_tiledrendering.mk @@ -41,6 +41,7 @@ $(eval $(call gb_CppunitTest_use_externals,sc_tiledrendering,\ )) $(eval $(call gb_CppunitTest_set_include,sc_tiledrendering,\ + -I$(SRCDIR)/sc/source/ui/inc \ -I$(SRCDIR)/sc/inc \ $$(INCLUDE) \ )) diff --git a/sc/qa/unit/tiledrendering/tiledrendering.cxx b/sc/qa/unit/tiledrendering/tiledrendering.cxx index 4f33ffb..82f126f 100644 --- a/sc/qa/unit/tiledrendering/tiledrendering.cxx +++ b/sc/qa/unit/tiledrendering/tiledrendering.cxx @@ -35,6 +35,8 @@ #include <comphelper/lok.hxx> +#include <tabvwsh.hxx> +#include <docsh.hxx> #include <document.hxx> #include <docuno.hxx> @@ -55,6 +57,7 @@ public: void testRowColumnSelections(); void testSortAscendingDescending(); void testPartHash(); + void testDocumentSize(); #endif CPPUNIT_TEST_SUITE(ScTiledRenderingTest); @@ -62,6 +65,7 @@ public: CPPUNIT_TEST(testRowColumnSelections); CPPUNIT_TEST(testSortAscendingDescending); CPPUNIT_TEST(testPartHash); + CPPUNIT_TEST(testDocumentSize); #endif CPPUNIT_TEST_SUITE_END(); @@ -70,6 +74,9 @@ private: ScModelObj* createDoc(const char* pName); static void callback(int nType, const char* pPayload, void* pData); void callbackImpl(int nType, const char* pPayload); + + /// document size changed callback. + osl::Condition m_aDocSizeCondition; #endif uno::Reference<lang::XComponent> mxComponent; @@ -146,12 +153,16 @@ static void lcl_convertRectangle(const OUString& rString, Rectangle& rRectangle) } */ -void ScTiledRenderingTest::callbackImpl(int /*nType*/, const char* /*pPayload*/) +void ScTiledRenderingTest::callbackImpl(int nType, const char* /*pPayload*/) { - // TODO when needed... - //switch (nType) - //{ - //} + switch (nType) + { + case LOK_CALLBACK_DOCUMENT_SIZE_CHANGED: + { + m_aDocSizeCondition.set(); + } + break; + } } void ScTiledRenderingTest::testRowColumnSelections() @@ -275,6 +286,40 @@ void ScTiledRenderingTest::testPartHash() comphelper::LibreOfficeKit::setActive(false); } +void ScTiledRenderingTest::testDocumentSize() +{ + comphelper::LibreOfficeKit::setActive(); + ScModelObj* pModelObj = createDoc("sort-range.ods"); + pModelObj->registerCallback(&ScTiledRenderingTest::callback, this); + + // check initial document size + Size aDocSize = pModelObj->getDocumentSize(); + CPPUNIT_ASSERT(aDocSize.Width() > 0); + CPPUNIT_ASSERT(aDocSize.Height() > 0); + + ScDocShell* pDocSh = dynamic_cast< ScDocShell* >( pModelObj->GetEmbeddedObject() ); + CPPUNIT_ASSERT(pDocSh); + + ScTabViewShell* pViewShell = pDocSh->GetBestViewShell(false); + CPPUNIT_ASSERT(pViewShell); + + // Set cursor column + pViewShell->SetCursor(100, 0); + // 2 seconds + TimeValue aTime = { 2 , 0 }; + osl::Condition::Result aResult = m_aDocSizeCondition.wait(aTime); + CPPUNIT_ASSERT_EQUAL(aResult, osl::Condition::result_ok); + + // Set cursor row + pViewShell->SetCursor(0, 100); + // 2 seconds + aTime = { 2 , 0 }; + aResult = m_aDocSizeCondition.wait(aTime); + CPPUNIT_ASSERT_EQUAL(aResult, osl::Condition::result_ok); + + comphelper::LibreOfficeKit::setActive(false); +} + #endif CPPUNIT_TEST_SUITE_REGISTRATION(ScTiledRenderingTest); diff --git a/sc/source/core/data/documen2.cxx b/sc/source/core/data/documen2.cxx index 2a305c0..e0058ec 100644 --- a/sc/source/core/data/documen2.cxx +++ b/sc/source/core/data/documen2.cxx @@ -708,16 +708,7 @@ bool ScDocument::GetDataStart( SCTAB nTab, SCCOL& rStartCol, SCROW& rStartRow ) bool ScDocument::GetTiledRenderingArea(SCTAB nTab, SCCOL& rEndCol, SCROW& rEndRow) const { - bool bHasPrintArea = GetPrintArea(nTab, rEndCol, rEndRow, false); - - // we need some reasonable minimal document size - if (!bHasPrintArea || rEndCol < 20) - rEndCol = 20; - - if (!bHasPrintArea || rEndRow < 50) - rEndRow = 50; - - return true; + return GetPrintArea(nTab, rEndCol, rEndRow, false); } bool ScDocument::MoveTab( SCTAB nOldPos, SCTAB nNewPos, ScProgress* pProgress ) diff --git a/sc/source/ui/inc/viewdata.hxx b/sc/source/ui/inc/viewdata.hxx index 20854ee..74734c9 100644 --- a/sc/source/ui/inc/viewdata.hxx +++ b/sc/source/ui/inc/viewdata.hxx @@ -135,6 +135,8 @@ private: SCROW nOldCurY; SCCOL nPosX[2]; ///< X position of the top left cell of the visible area. SCROW nPosY[2]; ///< Y position of the top left cell of the visible area. + SCCOL nMaxTiledCol; + SCROW nMaxTiledRow; bool bShowGrid; // per sheet show grid lines option. bool mbOldCursorValid; // "virtual" Cursor position when combined @@ -284,6 +286,9 @@ public: long GetVSplitPos() const { return pThisTab->nVSplitPos; } SCCOL GetFixPosX() const { return pThisTab->nFixPosX; } SCROW GetFixPosY() const { return pThisTab->nFixPosY; } + SCCOL GetMaxTiledCol() const { return pThisTab->nMaxTiledCol; } + SCROW GetMaxTiledRow() const { return pThisTab->nMaxTiledRow; } + bool IsPagebreakMode() const { return bPagebreak; } bool IsPasteMode() const { return (nPasteFlags & SC_PASTE_MODE) != 0; } bool ShowPasteSource() const { return (nPasteFlags & SC_PASTE_BORDER) != 0; } @@ -300,6 +305,9 @@ public: void SetVSplitPos( long nPos ) { pThisTab->nVSplitPos = nPos; } void SetFixPosX( SCCOL nPos ) { pThisTab->nFixPosX = nPos; } void SetFixPosY( SCROW nPos ) { pThisTab->nFixPosY = nPos; } + void SetMaxTiledCol( SCCOL nCol ) { pThisTab->nMaxTiledCol = nCol; } + void SetMaxTiledRow( SCROW nRow ) { pThisTab->nMaxTiledRow = nRow; } + void SetPagebreakMode( bool bSet ); void SetPasteMode ( ScPasteFlags nFlags ) { nPasteFlags = nFlags; } diff --git a/sc/source/ui/unoobj/docuno.cxx b/sc/source/ui/unoobj/docuno.cxx index f03768d..0f919ea 100644 --- a/sc/source/ui/unoobj/docuno.cxx +++ b/sc/source/ui/unoobj/docuno.cxx @@ -546,6 +546,9 @@ Size ScModelObj::getDocumentSize() if (!rDoc.GetTiledRenderingArea(nTab, nEndCol, nEndRow)) return aSize; + nEndCol = std::max(nEndCol, pViewData->GetMaxTiledCol()); + nEndRow = std::max(nEndRow, pViewData->GetMaxTiledRow()); + // convert to twips aSize.setWidth(rDoc.GetColWidth(0, nEndCol, nTab, true)); aSize.setHeight(rDoc.GetRowHeight(0, nEndRow, nTab, true)); diff --git a/sc/source/ui/view/gridwin4.cxx b/sc/source/ui/view/gridwin4.cxx index 5b06035..6185a88 100644 --- a/sc/source/ui/view/gridwin4.cxx +++ b/sc/source/ui/view/gridwin4.cxx @@ -1616,6 +1616,8 @@ void ScGridWindow::GetSelectionRects( ::std::vector< Rectangle >& rPixelRects ) SCCOL nMaxTiledCol; SCROW nMaxTiledRow; pDoc->GetTiledRenderingArea( nTab, nMaxTiledCol, nMaxTiledRow ); + nMaxTiledCol = std::max(nMaxTiledCol, pViewData->GetMaxTiledCol()); + nMaxTiledRow = std::max(nMaxTiledRow, pViewData->GetMaxTiledRow()); if (nX2 > nMaxTiledCol) nX2 = nMaxTiledCol; diff --git a/sc/source/ui/view/tabview.cxx b/sc/source/ui/view/tabview.cxx index c7cf4cb..ac1f571 100644 --- a/sc/source/ui/view/tabview.cxx +++ b/sc/source/ui/view/tabview.cxx @@ -2318,6 +2318,8 @@ OUString ScTabView::getRowColumnHeaders(const Rectangle& rRectangle) SCCOL nEndCol = 0; SCROW nEndRow = 0; pDoc->GetTiledRenderingArea(aViewData.GetTabNo(), nEndCol, nEndRow); + nEndCol = std::max(nEndCol, aViewData.GetMaxTiledCol()); + nEndRow = std::max(nEndRow, aViewData.GetMaxTiledRow()); boost::property_tree::ptree aRows; long nTotal = 0; diff --git a/sc/source/ui/view/tabview3.cxx b/sc/source/ui/view/tabview3.cxx index b7ec282..d16efbc 100644 --- a/sc/source/ui/view/tabview3.cxx +++ b/sc/source/ui/view/tabview3.cxx @@ -62,6 +62,8 @@ #include "tabprotection.hxx" #include "markdata.hxx" #include <formula/FormulaCompiler.hxx> +#include <comphelper/lok.hxx> +#include <LibreOfficeKit/LibreOfficeKitEnums.h> #include <com/sun/star/chart2/data/HighlightedRange.hpp> @@ -299,6 +301,21 @@ void ScTabView::SetCursor( SCCOL nPosX, SCROW nPosY, bool bNew ) ShowAllCursors(); CursorPosChanged(); + + if (comphelper::LibreOfficeKit::isActive()) + { + if ( nPosX > aViewData.GetMaxTiledCol() || nPosY > aViewData.GetMaxTiledRow() ) + { + aViewData.SetMaxTiledCol( std::max( nPosX, aViewData.GetMaxTiledCol() ) ); + aViewData.SetMaxTiledRow( std::max( nPosY, aViewData.GetMaxTiledRow() ) ); + + ScDocShell* pDocSh = aViewData.GetDocShell(); + if (pDocSh) + { + pDocSh->libreOfficeKitCallback(LOK_CALLBACK_DOCUMENT_SIZE_CHANGED, ""); + } + } + } } } diff --git a/sc/source/ui/view/viewdata.cxx b/sc/source/ui/view/viewdata.cxx index 0dddea6..7c84ac7 100644 --- a/sc/source/ui/view/viewdata.cxx +++ b/sc/source/ui/view/viewdata.cxx @@ -93,6 +93,8 @@ ScViewDataTable::ScViewDataTable() : nCurY( 0 ), nOldCurX( 0 ), nOldCurY( 0 ), + nMaxTiledCol( 20 ), + nMaxTiledRow( 50 ), bShowGrid( true ), mbOldCursorValid( false ) { commit a403ae3998fa27f68e782bf17459c4778e456792 Author: Stephan Bergmann <[email protected]> Date: Tue Aug 18 08:22:16 2015 +0200 tdf#84323: Make osl::Condition::wait more readable [Stripped down version of the commit from master.] Change-Id: Icd66ae1d390100549f903d45b2896cdcdca449be diff --git a/include/osl/conditn.hxx b/include/osl/conditn.hxx index 0859a14..8bb37e3 100644 --- a/include/osl/conditn.hxx +++ b/include/osl/conditn.hxx @@ -80,6 +80,10 @@ namespace osl return (Result) osl_waitCondition(condition, pTimeout); } +#if defined LIBO_INTERNAL_ONLY + Result wait(TimeValue const & timeout) { return wait(&timeout); } +#endif + /** Checks if the condition is set without blocking. */ bool check() _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
