summaryrefslogtreecommitdiff
path: root/sc/source/ui
diff options
context:
space:
mode:
authorMatúš Kukan <matus.kukan@collabora.com>2013-11-21 21:20:17 +0100
committerMatúš Kukan <matus.kukan@collabora.com>2013-12-02 11:13:42 +0100
commit7acc91eb72bc4873367c264109321abc34d7db77 (patch)
tree11ba5d09c7186700c91db02459e6c4cd8dd44f35 /sc/source/ui
parent8f8013abc9182ce940d8c1aa359d62215f82f9cc (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.cxx38
-rw-r--r--sc/source/ui/inc/datastream.hxx14
-rw-r--r--sc/source/ui/miscdlgs/datastreamdlg.cxx11
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: */