[Libreoffice-commits] core.git: Branch 'private/kohei/calc-data-stream' - 2 commits - sc/source
sc/source/ui/docshell/datastream.cxx | 55 ++- sc/source/ui/inc/datastream.hxx |7 +++- 2 files changed, 22 insertions(+), 40 deletions(-) New commits: commit b4b0c48b9252e3899e00be9778bad8913a496e2c Author: Kohei Yoshida kohei.yosh...@collabora.com Date: Mon Dec 30 15:43:21 2013 -0500 Remove CallerThread and use Timer to do the same, on the main thread. This makes the UI more responsive in general. Change-Id: I5f8a4fab84a73812af868262cc7daa9d92cb3777 diff --git a/sc/source/ui/docshell/datastream.cxx b/sc/source/ui/docshell/datastream.cxx index 35665a2..04605e4 100644 --- a/sc/source/ui/docshell/datastream.cxx +++ b/sc/source/ui/docshell/datastream.cxx @@ -111,37 +111,6 @@ public: namespace datastreams { -class CallerThread : public salhelper::Thread -{ -DataStream *mpDataStream; -public: -osl::Condition maStart; -bool mbTerminate; - -CallerThread(DataStream *pData): -Thread(CallerThread) -,mpDataStream(pData) -,mbTerminate(false) -{} - -private: -virtual void execute() -{ -while (!mbTerminate) -{ -// wait for a small amount of time, so that -// painting methods have a chance to be called. -// And also to make UI more responsive. -TimeValue const aTime = {0, 1000}; -maStart.wait(); -maStart.reset(); -if (!mbTerminate) -while (mpDataStream-ImportData()) -wait(aTime); -}; -} -}; - void emptyLineQueue( std::queueDataStream::LinesType* rQueue ) { while (!rQueue.empty()) @@ -371,8 +340,8 @@ DataStream::DataStream(ScDocShell *pShell, const OUString rURL, const ScRange mfLastRefreshTime(0.0), mnCurRow(0) { -mxThread = new datastreams::CallerThread( this ); -mxThread-launch(); +maImportTimer.SetTimeout(0); +maImportTimer.SetTimeoutHdl( LINK(this, DataStream, ImportTimerHdl) ); Decode(rURL, rRange, nLimit, eMove, nSettings); } @@ -381,9 +350,7 @@ DataStream::~DataStream() { if (mbRunning) StopImport(); -mxThread-mbTerminate = true; -mxThread-maStart.set(); -mxThread-join(); + if (mxReaderThread.is()) { mxReaderThread-endThread(); @@ -487,7 +454,8 @@ void DataStream::StartImport() } mbRunning = true; maDocAccess.reset(); -mxThread-maStart.set(); + +maImportTimer.Start(); } void DataStream::StopImport() @@ -497,6 +465,7 @@ void DataStream::StopImport() mbRunning = false; Refresh(); +maImportTimer.Stop(); } void DataStream::SetRefreshOnEmptyLine( bool bVal ) @@ -618,7 +587,6 @@ void DataStream::Text2Doc() {} bool DataStream::ImportData() { -SolarMutexGuard aGuard; if (!mbValuesInLine) // We no longer support this mode. To be deleted later. return false; @@ -630,6 +598,14 @@ bool DataStream::ImportData() return mbRunning; } +IMPL_LINK_NOARG(DataStream, ImportTimerHdl) +{ +if (ImportData()) +maImportTimer.Start(); + +return 0; +} + } // namespace sc /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/ui/inc/datastream.hxx b/sc/source/ui/inc/datastream.hxx index 5af2dc7..5600a09 100644 --- a/sc/source/ui/inc/datastream.hxx +++ b/sc/source/ui/inc/datastream.hxx @@ -14,6 +14,7 @@ #include rtl/ref.hxx #include rtl/ustring.hxx +#include vcl/timer.hxx #include address.hxx #include boost/noncopyable.hpp @@ -102,6 +103,8 @@ private: void Text2Doc(); void Refresh(); +DECL_LINK( ImportTimerHdl, void* ); + private: ScDocShell* mpDocShell; ScDocument* mpDoc; @@ -121,7 +124,9 @@ private: SCROW mnCurRow; ScRange maStartRange; ScRange maEndRange; -rtl::Referencedatastreams::CallerThread mxThread; + +Timer maImportTimer; + rtl::Referencedatastreams::ReaderThread mxReaderThread; }; commit 4fd4e494d0305e496a890f928b7602211ca4eb73 Author: Kohei Yoshida kohei.yosh...@collabora.com Date: Mon Dec 30 14:31:30 2013 -0500 This part requires orcus library presence. Change-Id: I6bfba9872deb7318721ce4d73795ef7569a24e89 diff --git a/sc/source/ui/docshell/datastream.cxx b/sc/source/ui/docshell/datastream.cxx index a21cba4..35665a2 100644 --- a/sc/source/ui/docshell/datastream.cxx +++ b/sc/source/ui/docshell/datastream.cxx @@ -269,10 +269,11 @@ private: DataStream::Line rLine = (*pLines)[i]; rLine.maCells.clear(); mpStream-ReadLine(rLine.maLine); - +#if ENABLE_ORCUS CSVHandler aHdl(rLine, mnColCount); orcus::csv_parserCSVHandler parser(rLine.maLine.getStr(), rLine.maLine.getLength(), aHdl, maConfig); parser.parse(); +#endif } aGuard.reset(); // lock ___ Libreoffice-commits mailing list
[Libreoffice-commits] core.git: Branch 'private/kohei/calc-data-stream' - 2 commits - sc/source
sc/source/filter/xml/xmlexprt.cxx | 46 sc/source/filter/xml/xmlexprt.hxx |1 sc/source/ui/docshell/datastream.cxx|9 +- sc/source/ui/inc/datastream.hxx |4 ++ sc/source/ui/miscdlgs/datastreamdlg.cxx |2 - 5 files changed, 59 insertions(+), 3 deletions(-) New commits: commit 2bd063d8ea57ebbf8981c601c0d0c41be1a27827 Author: Kohei Yoshida kohei.yosh...@collabora.com Date: Thu Dec 19 10:54:25 2013 -0500 Unlimited when the end row is MAXROW. The top row may not always be row 1, so we can't rely on the total row count. Change-Id: Ia13bf6931636b15c8b673d3eed91488e6cec0def diff --git a/sc/source/ui/miscdlgs/datastreamdlg.cxx b/sc/source/ui/miscdlgs/datastreamdlg.cxx index 17b9e6e..cc58195 100644 --- a/sc/source/ui/miscdlgs/datastreamdlg.cxx +++ b/sc/source/ui/miscdlgs/datastreamdlg.cxx @@ -126,7 +126,7 @@ void DataStreamDlg::Init( const DataStream rStrm ) m_pEdRange-SetText(aStr); SCROW nRows = aRange.aEnd.Row() - aRange.aStart.Row() + 1; -if (nRows == MAXROWCOUNT) +if (aRange.aEnd.Row() == MAXROW) m_pRBUnlimited-Check(); else { commit 02a86f8b4eaad15f32c8c84c8e25c330a11d7b58 Author: Kohei Yoshida kohei.yosh...@collabora.com Date: Thu Dec 19 10:31:41 2013 -0500 Save the data stream settings to ODS but only for 1.2 extended. And only when the experimental mode is turned on. Change-Id: I49dc8a2588cae5ee4a987a47d882672efb93e1c2 diff --git a/sc/source/filter/xml/xmlexprt.cxx b/sc/source/filter/xml/xmlexprt.cxx index 74c20da..f8851f1 100644 --- a/sc/source/filter/xml/xmlexprt.cxx +++ b/sc/source/filter/xml/xmlexprt.cxx @@ -62,6 +62,7 @@ #include editattributemap.hxx #include arealink.hxx #include datastream.hxx +#include documentlinkmgr.hxx #include xmloff/xmltoken.hxx #include xmloff/xmlnmspe.hxx @@ -109,6 +110,7 @@ #include editeng/outlobj.hxx #include svx/svditer.hxx #include svx/svdpage.hxx +#include svtools/miscopt.hxx #include comphelper/processfactory.hxx #include com/sun/star/beans/XPropertySet.hpp @@ -1943,6 +1945,7 @@ void ScXMLExport::_ExportContent() } WriteExternalRefCaches(); WriteNamedExpressions(); +WriteDataStream(); aExportDatabaseRanges.WriteDatabaseRanges(); ScXMLExportDataPilot aExportDataPilot(*this); aExportDataPilot.WriteDataPilots(xSpreadDoc); @@ -4039,6 +4042,49 @@ void ScXMLExport::WriteNamedExpressions() WriteNamedRange(pNamedRanges); } +void ScXMLExport::WriteDataStream() +{ +if (!pDoc) +return; + +SvtMiscOptions aMiscOptions; +if (!aMiscOptions.IsExperimentalMode()) +// Export this only in experimental mode. +return; + +if (getDefaultVersion() = SvtSaveOptions::ODFVER_012) +// Export this only for 1.2 extended and above. +return; + +const sc::DocumentLinkManager rMgr = pDoc-GetDocLinkManager(); +const sc::DataStream* pStrm = rMgr.getDataStream(); +if (!pStrm) +// No data stream. +return; + +// Source URL +AddAttribute(XML_NAMESPACE_XLINK, XML_HREF, GetRelativeReference(pStrm-GetURL())); + +// Streamed range +ScRange aRange = pStrm-GetRange(); +OUString aRangeStr; +ScRangeStringConverter::GetStringFromRange( +aRangeStr, aRange, pDoc, formula::FormulaGrammar::CONV_OOO); +AddAttribute(XML_NAMESPACE_TABLE, XML_TARGET_RANGE_ADDRESS, aRangeStr); + +// Empty line refresh option. +AddAttribute(XML_NAMESPACE_CALC_EXT, XML_EMPTY_LINE_REFRESH, pStrm-IsRefreshOnEmptyLine() ? XML_TRUE : XML_FALSE); + +// New data insertion position. Either top of bottom. Default to bottom. +xmloff::token::XMLTokenEnum eInsertPosition = XML_BOTTOM; +if (pStrm-GetMove() == sc::DataStream::MOVE_DOWN) +eInsertPosition = XML_TOP; + +AddAttribute(XML_NAMESPACE_CALC_EXT, XML_INSERTION_POSITION, eInsertPosition); + +SvXMLElementExport aElem(*this, XML_NAMESPACE_CALC_EXT, XML_DATA_STREAM_SOURCE, true, true); +} + void ScXMLExport::WriteNamedRange(ScRangeName* pRangeName) { //write a global or local ScRangeName diff --git a/sc/source/filter/xml/xmlexprt.hxx b/sc/source/filter/xml/xmlexprt.hxx index 4ece1d5..564009d 100644 --- a/sc/source/filter/xml/xmlexprt.hxx +++ b/sc/source/filter/xml/xmlexprt.hxx @@ -198,6 +198,7 @@ class ScXMLExport : public SvXMLExport void WriteTheLabelRanges(const com::sun::star::uno::Reference com::sun::star::sheet::XSpreadsheetDocument xSpreadDoc); void WriteLabelRanges( const com::sun::star::uno::Reference com::sun::star::container::XIndexAccess xRangesIAccess, bool bColumn ); void WriteNamedExpressions(); +void WriteDataStream(); void WriteNamedRange(ScRangeName* pRangeName); void ExportConditionalFormat(SCTAB nTab); void WriteExternalRefCaches(); diff --git a/sc/source/ui/docshell/datastream.cxx b/sc/source/ui/docshell/datastream.cxx index a68d338..edd0e2a 100644 ---