[Libreoffice-commits] core.git: Branch 'private/kohei/calc-data-stream' - 2 commits - sc/source

2013-12-30 Thread Kohei Yoshida
 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

2013-12-19 Thread Kohei Yoshida
 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
---