diff options
author | Matúš Kukan <matus.kukan@collabora.com> | 2013-11-21 21:20:17 +0100 |
---|---|---|
committer | Matúš Kukan <matus.kukan@collabora.com> | 2013-12-02 11:13:42 +0100 |
commit | 7acc91eb72bc4873367c264109321abc34d7db77 (patch) | |
tree | 11ba5d09c7186700c91db02459e6c4cd8dd44f35 /sc/source/ui | |
parent | 8f8013abc9182ce940d8c1aa359d62215f82f9cc (diff) |
Import data streams - reuse infrastructure for ScAreaLink.
Change-Id: I18db991d2e8e665d5e4ca778344993e79772ccd5
Diffstat (limited to 'sc/source/ui')
-rw-r--r-- | sc/source/ui/docshell/datastream.cxx | 38 | ||||
-rw-r--r-- | sc/source/ui/inc/datastream.hxx | 14 | ||||
-rw-r--r-- | sc/source/ui/miscdlgs/datastreamdlg.cxx | 11 |
3 files changed, 41 insertions, 22 deletions
diff --git a/sc/source/ui/docshell/datastream.cxx b/sc/source/ui/docshell/datastream.cxx index d58c72c29b51..ef15382a9137 100644 --- a/sc/source/ui/docshell/datastream.cxx +++ b/sc/source/ui/docshell/datastream.cxx @@ -138,10 +138,10 @@ private: } -static void lcl_MakeToolbarVisible(SfxViewFrame *pViewFrame) +void DataStream::MakeToolbarVisible() { css::uno::Reference< css::frame::XFrame > xFrame = - pViewFrame->GetFrame().GetFrameInterface(); + ScDocShell::GetViewData()->GetViewShell()->GetViewFrame()->GetFrame().GetFrameInterface(); if (!xFrame.is()) return; @@ -163,18 +163,18 @@ static void lcl_MakeToolbarVisible(SfxViewFrame *pViewFrame) } } -void DataStream::Set(ScDocShell *pShell, const OUString& rURL, const OUString& rRange, sal_Int32 nLimit, const OUString& rMove) +DataStream* DataStream::Set(ScDocShell *pShell, const OUString& rURL, const OUString& rRange, + sal_Int32 nLimit, const OUString& rMove, sal_uInt32 nSettings) { sfx2::SvBaseLink *pLink = 0; - pLink = new DataStream( pShell, rURL, rRange, nLimit, rMove ); + pLink = new DataStream( pShell, rURL, rRange, nLimit, rMove, nSettings ); sfx2::LinkManager* pLinkManager = pShell->GetDocument()->GetLinkManager(); pLinkManager->InsertFileLink( *pLink, OBJECT_CLIENT_FILE, rURL, NULL, NULL ); - - lcl_MakeToolbarVisible(pShell->GetViewData()->GetViewShell()->GetViewFrame()); + return dynamic_cast<DataStream*>(pLink); } -DataStream::DataStream(ScDocShell *pShell, const OUString& rURL, - const OUString& rRange, sal_Int32 nLimit, const OUString& rMove) +DataStream::DataStream(ScDocShell *pShell, const OUString& rURL, const OUString& rRange, + sal_Int32 nLimit, const OUString& rMove, sal_uInt32 nSettings) : mpScDocShell(pShell) , mpScDocument(mpScDocShell->GetDocument()) , meMove(NO_MOVE) @@ -187,7 +187,7 @@ DataStream::DataStream(ScDocShell *pShell, const OUString& rURL, mxThread = new datastreams::CallerThread( this ); mxThread->launch(); - Decode(rURL, rRange, rMove); + Decode(rURL, rRange, rMove, nSettings); mpStartRange.reset( new ScRange(*mpRange.get()) ); sal_Int32 nHeight = mpRange->aEnd.Row() - mpRange->aStart.Row() + 1; @@ -215,6 +215,8 @@ OString DataStream::ConsumeLine() if (!mpLines || mnLinesCount >= mpLines->size()) { mnLinesCount = 0; + if (mxReaderThread->mbTerminateReading) + return OString(); osl::ResettableMutexGuard aGuard(mxReaderThread->maLinesProtector); if (mpLines) mxReaderThread->maUsedLines.push(mpLines); @@ -233,18 +235,18 @@ OString DataStream::ConsumeLine() return mpLines->at(mnLinesCount++); } -void DataStream::Decode( const OUString& rURL, const OUString& rRange, const OUString& rMove) +void DataStream::Decode( const OUString& rURL, const OUString& rRange, + const OUString& rMove, sal_uInt32 nSettings) { - sal_Int32 nIndex = rURL.indexOf(sfx2::cTokenSeparator); SvStream *pStream = 0; - if (nIndex != -1) - pStream = new SvScriptStream(rURL.copy(0, nIndex)); + if (nSettings & SCRIPT_STREAM) + pStream = new SvScriptStream(rURL); else pStream = new SvFileStream(rURL, STREAM_READ); mxReaderThread = new datastreams::ReaderThread( pStream ); mxReaderThread->launch(); - mbValuesInLine = !rRange.isEmpty(); + mbValuesInLine = nSettings & VALUES_IN_LINE; if (!mbValuesInLine) return; @@ -361,6 +363,14 @@ bool DataStream::ImportData() return mbRunning; } +sfx2::SvBaseLink::UpdateResult DataStream::DataChanged( + const OUString& , const css::uno::Any& ) +{ + MakeToolbarVisible(); + Start(); + return SUCCESS; +} + void DataStream::Edit(Window* , const Link& ) { } diff --git a/sc/source/ui/inc/datastream.hxx b/sc/source/ui/inc/datastream.hxx index 12d784f4a269..4af6896c9bb9 100644 --- a/sc/source/ui/inc/datastream.hxx +++ b/sc/source/ui/inc/datastream.hxx @@ -31,18 +31,22 @@ typedef std::vector<OString> LinesList; class DataStream : boost::noncopyable, public sfx2::SvBaseLink { OString ConsumeLine(); - void Decode(const OUString& rURL, const OUString& rRange, const OUString& rMove); + void Decode(const OUString& rURL, const OUString& rRange, const OUString& rMove, sal_uInt32 nSettings); void MoveData(); public: enum MoveEnum { NO_MOVE, RANGE_DOWN, MOVE_DOWN, MOVE_UP }; + enum { SCRIPT_STREAM = 1, VALUES_IN_LINE = 2 }; - static void Set(ScDocShell *pShell, const OUString& rURL, - const OUString& rRange, sal_Int32 nLimit, const OUString& rMove); + static void MakeToolbarVisible(); + static DataStream* Set(ScDocShell *pShell, const OUString& rURL, const OUString& rRange, + sal_Int32 nLimit, const OUString& rMove, sal_uInt32 nSettings); - DataStream(ScDocShell *pShell, const OUString& rURL, - const OUString& rRange, sal_Int32 nLimit, const OUString& rMove); + DataStream(ScDocShell *pShell, const OUString& rURL, const OUString& rRange, + sal_Int32 nLimit, const OUString& rMove, sal_uInt32 nSettings); virtual ~DataStream(); + virtual sfx2::SvBaseLink::UpdateResult DataChanged( + const OUString& , const css::uno::Any& ) SAL_OVERRIDE; virtual void Edit(Window* , const Link& ) SAL_OVERRIDE; bool ImportData(); diff --git a/sc/source/ui/miscdlgs/datastreamdlg.cxx b/sc/source/ui/miscdlgs/datastreamdlg.cxx index cd2d2c4f5666..0a4f7de7f0b4 100644 --- a/sc/source/ui/miscdlgs/datastreamdlg.cxx +++ b/sc/source/ui/miscdlgs/datastreamdlg.cxx @@ -10,7 +10,6 @@ #include <datastreamdlg.hxx> #include <sfx2/filedlghelper.hxx> -#include <sfx2/linkmgr.hxx> #include <svtools/inettbc.hxx> #include <vcl/layout.hxx> #include <datastream.hxx> @@ -84,15 +83,21 @@ void DataStreamDlg::StartStream() if (m_pRBMaxLimit->IsChecked()) nLimit = m_pEdLimit->GetText().toInt32(); OUString rURL = m_pCbUrl->GetText(); + sal_uInt32 nSettings = 0; if (m_pRBScriptData->IsChecked()) - rURL += OUString(sfx2::cTokenSeparator); - DataStream::Set( mpDocShell, + nSettings |= DataStream::SCRIPT_STREAM; + if (m_pRBValuesInLine->IsChecked()) + nSettings |= DataStream::VALUES_IN_LINE; + DataStream *pStream = DataStream::Set( mpDocShell, rURL, m_pEdRange->GetText(), nLimit, m_pRBNoMove->IsChecked() ? OUString("NO_MOVE") : m_pRBRangeDown->IsChecked() ? OUString("RANGE_DOWN") : OUString("MOVE_DOWN") + , nSettings ); + DataStream::MakeToolbarVisible(); + pStream->Start(); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |