summaryrefslogtreecommitdiffstats
path: root/sc
diff options
context:
space:
mode:
Diffstat (limited to 'sc')
-rw-r--r--sc/inc/scabstdlg.hxx3
-rw-r--r--sc/qa/unit/screenshots/screenshots.cxx2
-rw-r--r--sc/source/ui/attrdlg/scdlgfact.cxx5
-rw-r--r--sc/source/ui/attrdlg/scdlgfact.hxx3
-rw-r--r--sc/source/ui/unoobj/filtuno.cxx2
-rw-r--r--sc/source/ui/view/cellsh2.cxx2
-rw-r--r--sc/source/ui/view/viewfun5.cxx87
7 files changed, 64 insertions, 40 deletions
diff --git a/sc/inc/scabstdlg.hxx b/sc/inc/scabstdlg.hxx
index 67be06b9ad73..92c66e392902 100644
--- a/sc/inc/scabstdlg.hxx
+++ b/sc/inc/scabstdlg.hxx
@@ -394,7 +394,8 @@ class ScAbstractDialogFactory
public:
SC_DLLPUBLIC static ScAbstractDialogFactory* Create();
- virtual VclPtr<AbstractScImportAsciiDlg> CreateScImportAsciiDlg( const OUString& aDatName,
+ virtual VclPtr<AbstractScImportAsciiDlg> CreateScImportAsciiDlg(vcl::Window* pParent,
+ const OUString& aDatName,
SvStream* pInStream,
ScImportAsciiCall eCall) = 0;
diff --git a/sc/qa/unit/screenshots/screenshots.cxx b/sc/qa/unit/screenshots/screenshots.cxx
index 3cf875b3cc05..9def8077e515 100644
--- a/sc/qa/unit/screenshots/screenshots.cxx
+++ b/sc/qa/unit/screenshots/screenshots.cxx
@@ -244,7 +244,7 @@ VclPtr<VclAbstractDialog> ScScreenshotTest::createDialogByID(sal_uInt32 nID)
case 13: // "modules/scalc/ui/textimportcsv.ui"
{
- pReturnDialog = mpFact->CreateScImportAsciiDlg(OUString(), mpStream.get(), SC_PASTETEXT);
+ pReturnDialog = mpFact->CreateScImportAsciiDlg(nullptr, OUString(), mpStream.get(), SC_PASTETEXT);
break;
}
case 14: // "modules/scalc/ui/formatcellsdialog.ui"
diff --git a/sc/source/ui/attrdlg/scdlgfact.cxx b/sc/source/ui/attrdlg/scdlgfact.cxx
index 733afc03d39a..dfcd08f4639c 100644
--- a/sc/source/ui/attrdlg/scdlgfact.cxx
+++ b/sc/source/ui/attrdlg/scdlgfact.cxx
@@ -604,10 +604,11 @@ bool AbstractScTextImportOptionsDlg_Impl::IsDateConversionSet() const
}
// =========================Factories for createdialog ===================
-VclPtr<AbstractScImportAsciiDlg> ScAbstractDialogFactory_Impl::CreateScImportAsciiDlg ( const OUString& aDatName,
+VclPtr<AbstractScImportAsciiDlg> ScAbstractDialogFactory_Impl::CreateScImportAsciiDlg ( vcl::Window* pParent,
+ const OUString& aDatName,
SvStream* pInStream, ScImportAsciiCall eCall )
{
- VclPtr<ScImportAsciiDlg> pDlg = VclPtr<ScImportAsciiDlg>::Create( nullptr, aDatName,pInStream, eCall );
+ VclPtr<ScImportAsciiDlg> pDlg = VclPtr<ScImportAsciiDlg>::Create( pParent, aDatName,pInStream, eCall );
return VclPtr<AbstractScImportAsciiDlg_Impl>::Create( pDlg );
}
diff --git a/sc/source/ui/attrdlg/scdlgfact.hxx b/sc/source/ui/attrdlg/scdlgfact.hxx
index ef6e0a6a1057..2a0e2652c5c6 100644
--- a/sc/source/ui/attrdlg/scdlgfact.hxx
+++ b/sc/source/ui/attrdlg/scdlgfact.hxx
@@ -418,7 +418,8 @@ class ScAbstractDialogFactory_Impl : public ScAbstractDialogFactory
public:
virtual ~ScAbstractDialogFactory_Impl() {}
- virtual VclPtr<AbstractScImportAsciiDlg> CreateScImportAsciiDlg( const OUString& aDatName,
+ virtual VclPtr<AbstractScImportAsciiDlg> CreateScImportAsciiDlg(vcl::Window* pParent,
+ const OUString& aDatName,
SvStream* pInStream,
ScImportAsciiCall eCall) override;
diff --git a/sc/source/ui/unoobj/filtuno.cxx b/sc/source/ui/unoobj/filtuno.cxx
index f11fc1ee18d5..f5188d93e4d0 100644
--- a/sc/source/ui/unoobj/filtuno.cxx
+++ b/sc/source/ui/unoobj/filtuno.cxx
@@ -176,7 +176,7 @@ sal_Int16 SAL_CALL ScFilterOptionsObj::execute() throw(uno::RuntimeException, st
if ( xInputStream.is() )
pInStream.reset(utl::UcbStreamHelper::CreateStream( xInputStream ));
- ScopedVclPtr<AbstractScImportAsciiDlg> pDlg(pFact->CreateScImportAsciiDlg( aPrivDatName, pInStream.get(), SC_IMPORTFILE));
+ ScopedVclPtr<AbstractScImportAsciiDlg> pDlg(pFact->CreateScImportAsciiDlg(nullptr, aPrivDatName, pInStream.get(), SC_IMPORTFILE));
OSL_ENSURE(pDlg, "Dialog create fail!");
if ( pDlg->Execute() == RET_OK )
{
diff --git a/sc/source/ui/view/cellsh2.cxx b/sc/source/ui/view/cellsh2.cxx
index 8f4d031e6564..2cb6af596414 100644
--- a/sc/source/ui/view/cellsh2.cxx
+++ b/sc/source/ui/view/cellsh2.cxx
@@ -983,7 +983,7 @@ void ScCellShell::ExecuteDB( SfxRequest& rReq )
ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
OSL_ENSURE( pFact, "ScCellShell::ExecuteDB: SID_TEXT_TO_COLUMNS - pFact is null!" );
ScopedVclPtr<AbstractScImportAsciiDlg> pDlg(pFact->CreateScImportAsciiDlg(
- OUString(), &aStream, SC_TEXTTOCOLUMNS));
+ nullptr, OUString(), &aStream, SC_TEXTTOCOLUMNS));
OSL_ENSURE( pDlg, "ScCellShell::ExecuteDB: SID_TEXT_TO_COLUMNS - pDlg is null!" );
if ( pDlg->Execute() == RET_OK )
diff --git a/sc/source/ui/view/viewfun5.cxx b/sc/source/ui/view/viewfun5.cxx
index 9a3ae1b14f04..c1da82818cef 100644
--- a/sc/source/ui/view/viewfun5.cxx
+++ b/sc/source/ui/view/viewfun5.cxx
@@ -44,6 +44,7 @@
#include <svtools/transfer.hxx>
#include <vcl/graph.hxx>
+#include <comphelper/lok.hxx>
#include <comphelper/processfactory.hxx>
#include <comphelper/storagehelper.hxx>
#include <comphelper/string.hxx>
@@ -56,6 +57,8 @@
#include "dbdata.hxx"
#include "sc.hrc"
#include "filter.hxx"
+#include "globstr.hrc"
+#include "global.hxx"
#include "scextopt.hxx"
#include "tabvwsh.hxx"
#include "compiler.hxx"
@@ -293,10 +296,11 @@ bool ScViewFunc::PasteDataFormat( SotClipboardFormatId nFormatId,
else
{
ScAddress aCellPos( nPosX, nPosY, GetViewData().GetTabNo() );
- ScImportExport aObj( GetViewData().GetDocument(), aCellPos );
- aObj.SetOverwriting( true );
+ std::shared_ptr<ScImportExport> pObj(new ScImportExport(GetViewData().GetDocument(), aCellPos));
+ pObj->SetOverwriting( true );
- OUString aStr;
+
+ std::shared_ptr<OUString> pStrBuffer(new OUString());
tools::SvRef<SotStorageStream> xStream;
if ( aDataHelper.GetSotStorageStream( nFormatId, xStream ) && xStream.Is() )
{
@@ -314,7 +318,7 @@ bool ScViewFunc::PasteDataFormat( SotClipboardFormatId nFormatId,
ScAsciiOptions aOptions;
aOptions.SetLanguage(pDlg->GetLanguageType());
aOptions.SetDetectSpecialNumber(pDlg->IsDateConversionSet());
- aObj.SetExtOptions(aOptions);
+ pObj->SetExtOptions(aOptions);
}
else
{
@@ -323,46 +327,63 @@ bool ScViewFunc::PasteDataFormat( SotClipboardFormatId nFormatId,
}
}
if(!bRet)
- bRet = aObj.ImportStream( *xStream, OUString(), nFormatId );
+ bRet = pObj->ImportStream( *xStream, OUString(), nFormatId );
// mba: clipboard always must contain absolute URLs (could be from alien source)
}
- else if (nFormatId == SotClipboardFormatId::STRING && aDataHelper.GetString( nFormatId, aStr ))
+
+ else if (nFormatId == SotClipboardFormatId::STRING && aDataHelper.GetString( nFormatId, *pStrBuffer ))
{
// Do CSV dialog if more than one line.
- sal_Int32 nDelim = aStr.indexOf('\n');
- if (nDelim >= 0 && nDelim != aStr.getLength () - 1)
+ sal_Int32 nDelim = pStrBuffer->indexOf('\n');
+ if (nDelim >= 0 && nDelim != pStrBuffer->getLength () - 1)
{
- ScImportStringStream aStrm( aStr);
- ScAbstractDialogFactory* pFact =
- ScAbstractDialogFactory::Create();
- ScopedVclPtr<AbstractScImportAsciiDlg> pDlg(
- pFact->CreateScImportAsciiDlg( OUString(), &aStrm, SC_PASTETEXT));
+ vcl::Window* pParent = comphelper::LibreOfficeKit::isActive() ? GetActiveWin() : nullptr;
- if (pDlg->Execute() == RET_OK)
- {
- ScAsciiOptions aOptions;
- pDlg->GetOptions( aOptions );
- pDlg->SaveParameters();
- aObj.SetExtOptions( aOptions );
+ std::shared_ptr<ScImportStringStream> pStrm(new ScImportStringStream(*pStrBuffer));
+
+ ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
+ VclPtr<AbstractScImportAsciiDlg> pDlg(
+ pFact->CreateScImportAsciiDlg(pParent, OUString(), pStrm.get(), SC_PASTETEXT));
+
+ bAllowDialogs = bAllowDialogs && !SC_MOD()->IsInExecuteDrop();
+
+ pDlg->StartExecuteAsync([this, pDlg, pDoc, pStrm, nFormatId, pStrBuffer, pObj, bAllowDialogs](sal_Int32 nResult){
+ bool bShowErrorDialog = bAllowDialogs;
+ if (RET_OK == nResult)
+ {
+ ScAsciiOptions aOptions;
+ pDlg->GetOptions( aOptions );
+ pDlg->SaveParameters();
+ pObj->SetExtOptions( aOptions );
+ pObj->ImportString( *pStrBuffer, nFormatId );
+
+ // TODO: what if (aObj.IsOverflow())
+ // Content was partially pasted, which can be undone by
+ // the user though.
+ bShowErrorDialog = bShowErrorDialog && pObj->IsOverflow();
+ }
+ else
+ {
+ bShowErrorDialog = false;
+ // Yes, no failure, don't raise a "couldn't paste"
+ // dialog if user cancelled.
+ }
- bRet = aObj.ImportString( aStr, nFormatId );
+ InvalidateAttribs();
+ GetViewData().UpdateInputHandler();
- // TODO: what if (aObj.IsOverflow())
- // Content was partially pasted, which can be undone by
- // the user though.
- if (aObj.IsOverflow())
- bRet = false;
- }
- else
- bRet = true;
- // Yes, no failure, don't raise a "couldn't paste"
- // dialog if user cancelled.
+ pDoc->SetPastingDrawFromOtherDoc( false );
+
+ if (bShowErrorDialog)
+ ErrorMessage(STR_PASTE_ERROR);
+ });
+ return true;
}
else
- bRet = aObj.ImportString( aStr, nFormatId );
+ bRet = pObj->ImportString( *pStrBuffer, nFormatId );
}
- else if (nFormatId != SotClipboardFormatId::STRING && aDataHelper.GetString( nFormatId, aStr ))
- bRet = aObj.ImportString( aStr, nFormatId );
+ else if (nFormatId != SotClipboardFormatId::STRING && aDataHelper.GetString( nFormatId, *pStrBuffer ))
+ bRet = pObj->ImportString( *pStrBuffer, nFormatId );
InvalidateAttribs();
GetViewData().UpdateInputHandler();