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::queue<DataStream::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::Reference<datastreams::CallerThread> mxThread; + + Timer maImportTimer; + rtl::Reference<datastreams::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_parser<CSVHandler> parser(rLine.maLine.getStr(), rLine.maLine.getLength(), aHdl, maConfig); parser.parse(); +#endif } aGuard.reset(); // lock _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits