20 #include <config_features.h>
47 #include <osl/diagnose.h>
51 #include <viewfunc.hxx>
53 #include <document.hxx>
54 #include <globstr.hrc>
69 #include <compiler.hxx>
70 #include <tokenarray.hxx>
78 const css::uno::Reference< css::datatransfer::XTransferable >& rxTransferable )
81 if ( aDataHelper.
HasFormat( SotClipboardFormatId::EDITENGINE_ODF_TEXT_FLAT ) )
85 ScDocShell* pDocSh = GetViewData().GetDocShell();
87 SCTAB nTab = GetViewData().GetTabNo();
92 pEngine->EnableUndo(
false );
97 pEngine->SetPaperSize(
Size(100000,100000));
104 aEditView.InsertText( rxTransferable, OUString(),
true );
107 sal_Int32 nParCnt = pEngine->GetParagraphCount();
110 SCROW nEndRow = nStartRow +
static_cast<SCROW>(nParCnt) - 1;
111 if (nEndRow > rDoc.
MaxRow())
118 pUndoDoc->InitUndo( rDoc, nTab, nTab );
122 SCROW nRow = nStartRow;
127 for( sal_Int32
n = 0;
n < nParCnt;
n++ )
129 std::unique_ptr<EditTextObject>
pObject(pEngine->CreateTextObject(
n));
130 EnterData(nStartCol, nRow, nTab, *
pObject,
true);
131 if( ++nRow > rDoc.
MaxRow() )
139 pRedoDoc->InitUndo( rDoc, nTab, nTab );
142 ScRange aMarkRange(nStartCol, nStartRow, nTab, nStartCol, nEndRow, nTab);
146 std::make_unique<ScUndoPaste>( pDocSh, aMarkRange, aDestMark,
158 ScDocShell* pDocSh = GetViewData().GetDocShell();
160 ScAddress( nStartCol, nStartRow, GetViewData().GetTabNo() ) );
166 aImpEx.ImportStream( *xStream, OUString(), SotClipboardFormatId::RTF );
167 else if ( aDataHelper.
GetString( SotClipboardFormatId::RTF, aStr ) )
168 aImpEx.ImportString( aStr, SotClipboardFormatId::RTF );
169 else if ( aDataHelper.
GetSotStorageStream( SotClipboardFormatId::RICHTEXT, xStream ) && xStream.
is() )
170 aImpEx.ImportStream( *xStream, OUString(), SotClipboardFormatId::RICHTEXT );
171 else if ( aDataHelper.
GetString( SotClipboardFormatId::RICHTEXT, aStr ) )
172 aImpEx.ImportString( aStr, SotClipboardFormatId::RICHTEXT );
174 AdjustRowHeight( nStartRow, aImpEx.GetRange().aEnd.Row(), true );
181 ScDocument& rDoc = GetViewData().GetDocument();
182 ScMarkData& rMark = GetViewData().GetMarkData();
197 aMarkRange =
ScRange( GetViewData().GetCurX(),
198 GetViewData().GetCurY(), GetViewData().GetTabNo() );
202 if (!aTester.IsEditable())
204 ErrorMessage(aTester.GetMessageId());
208 ScDocShell* pDocSh = GetViewData().GetDocShell();
216 pUndoDoc->InitUndo( rDoc, nTab, nTab );
220 for (
const auto& rTab : rMark)
222 pUndoDoc->AddUndoTab( rTab, rTab );
224 ScRange aCopyRange = aMarkRange;
231 GetViewData().GetMultiArea( xRanges );
234 for (
const SCTAB&
i : rMark)
236 for (
size_t j = 0; j < nCount; ++j)
238 ScRange aRange = (*xRanges)[j];
242 for (
bool bHas = aIter.
first(); bHas; bHas = aIter.
next())
254 sal_Int32 nLen = aOld.getLength();
257 assert(nLen >= 2 && aOld[0] ==
'{' && aOld[nLen-1] ==
'}');
259 aOld = aOld.copy( 1, nLen);
263 if (aFinder.GetFound())
266 const OUString& aNew = aFinder.GetText();
268 std::unique_ptr<ScTokenArray> pArr(aComp.CompileString(aNew));
283 pRedoDoc->InitUndo( rDoc, nTab, nTab );
285 if ( rMark.GetSelectCount() > 1 )
287 for (
const auto& rTab : rMark)
289 pRedoDoc->AddUndoTab( rTab, rTab );
291 ScRange aCopyRange = aMarkRange;
297 std::make_unique<ScUndoRefConversion>( pDocSh,
298 aMarkRange, rMark, std::move(pUndoDoc), std::move(pRedoDoc), bMulti) );
304 CellContentChanged();
307 ErrorMessage(STR_ERR_NOREF);
316 ScDocShell* pDocSh = GetViewData().GetDocShell();
318 ScMarkData& rMark = GetViewData().GetMarkData();
319 ScSplitPos eWhich = GetViewData().GetActivePart();
322 std::unique_ptr<ESelection> pEditSel;
323 std::unique_ptr<ScEditEngineDefaulter> pThesaurusEngine;
324 bool bIsEditMode = GetViewData().HasEditView(eWhich);
330 GetViewData().GetEditView(eWhich, pEditView, nCol, nRow);
332 SC_MOD()->InputEnterHandler();
333 GetViewData().GetBindings().Update();
337 nCol = GetViewData().GetCurX();
338 nRow = GetViewData().GetCurY();
340 nTab = GetViewData().GetTabNo();
351 aOldText.
assign(rDoc, aPos);
354 ErrorMessage(STR_THESAURUS_NO_STRING);
361 pThesaurusEngine->SetEditTextObjectPool( rDoc.
GetEditPool() );
362 pThesaurusEngine->SetRefDevice(GetViewData().GetActiveWin());
363 pThesaurusEngine->SetSpeller(xSpeller);
364 MakeEditView(pThesaurusEngine.get(), nCol, nRow );
365 std::unique_ptr<SfxItemSet> pEditDefaults(
366 new SfxItemSet(pThesaurusEngine->GetEmptyItemSet()));
371 pThesaurusEngine->SetDefaults( *pEditDefaults );
375 pThesaurusEngine->SetTextCurrentDefaults(*aOldText.
mpEditText);
377 pThesaurusEngine->SetTextCurrentDefaults(aOldText.
getString(rDoc));
379 pEditView = GetViewData().GetEditView(GetViewData().GetActivePart());
385 pThesaurusEngine->ClearModifyFlag();
389 eState = pEditView->
StartThesaurus(GetViewData().GetDialogParent());
390 OSL_ENSURE(eState != EESpellState::NoSpeller,
"No SpellChecker");
392 if (eState == EESpellState::ErrorFound)
398 VclMessageType::Info, VclButtonsType::Ok,
402 if (pThesaurusEngine->IsModified())
409 std::unique_ptr<EditTextObject> pText = pThesaurusEngine->CreateTextObject();
410 auto tmp = pText.get();
416 OUString
aStr = pThesaurusEngine->GetText();
424 GetViewData().GetDocShell()->GetUndoManager()->AddUndoAction(
425 std::make_unique<ScUndoThesaurus>(
426 GetViewData().GetDocShell(), nCol, nRow, nTab, aOldText, aNewText));
437 DoSheetConversion( aConvParam );
457 rViewData.
GetEditView(eWhich, pEditView, nCol, nRow);
458 SC_MOD()->InputEnterHandler();
486 pUndoDoc->InitUndo( rDoc, nTab, nTab );
488 pRedoDoc->InitUndo( rDoc, nTab, nTab );
492 for (
const auto& rTab : rMark)
495 pUndoDoc->AddUndoTab( rTab, rTab );
496 pRedoDoc->AddUndoTab( rTab, rTab );
508 std::unique_ptr<ScConversionEngineBase> pEngine;
518 rDoc.
GetEnginePool(), rViewData, rConvParam, pUndoDoc.get(), pRedoDoc.get() ));
521 OSL_FAIL(
"ScViewFunc::DoSheetConversion - unknown conversion type" );
524 MakeEditView( pEngine.get(), nCol, nRow );
531 pEngine->SetControlWord( EEControlBits::USECHARATTRIBS );
532 pEngine->EnableUndo(
false );
533 pEngine->SetPaperSize( aRect.
GetSize() );
538 pEngine->ClearModifyFlag();
539 pEngine->ConvertAll(GetViewData().GetDialogParent(), *pEditView);
543 if( pEngine->IsAnyModified() )
550 std::make_unique<ScUndoConversion>(
552 nCol, nRow, nTab, std::move(pUndoDoc),
553 nNewCol, nNewRow, nTab, std::move(pRedoDoc), rConvParam ) );
587 #if HAVE_FEATURE_AVMEDIA
590 const SfxStringItem aMediaURLItem( SID_INSERT_AVMEDIA, aStrURL );
591 return (
nullptr != GetViewData().
GetDispatcher().ExecuteList(
592 SID_INSERT_AVMEDIA, SfxCallMode::SYNCHRON,
593 { &aMediaURLItem }) );
600 std::shared_ptr<const SfxFilter> pFlt;
603 SfxFilterMatcher aMatcher( ScDocShell::Factory().GetFilterContainer()->GetName() );
604 SfxMedium aSfxMedium( aStrURL, (StreamMode::READ | StreamMode::SHARE_DENYNONE) );
615 SfxStringItem aFilterItem( SID_FILTER_NAME, pFlt->GetName() );
621 return (
nullptr != rDispatcher.
ExecuteList(SID_OPENDOC,
622 SfxCallMode::ASYNCHRON,
623 { &aFileNameItem, &aFilterItem, &aTargetItem}));
638 return PasteGraphic( rPos, aGraphic, aStrURL );
650 ScRange aRange = GetViewData().GetDocument().
651 GetRange( GetViewData().GetTabNo(), aRect );
655 InsertBookmark( aStrURL, aStrURL, nPosX, nPosY );
666 uno::Sequence < beans::PropertyValue > aMedium(1);
667 aMedium[0].Name =
"URL";
668 aMedium[0].Value <<= aStrURL;
674 return PasteObject( rPos, xObj,
nullptr );
678 GetViewData().GetViewShell()->InsertURLButton( aStrURL, aStrURL,
EMPTY_OUSTRING, &rPos );
684 const css::uno::Reference< css::datatransfer::XTransferable >& rxTransferable,
697 SCCOL nPosX,
SCROW nPosY,
const OUString* pTarget,
707 OUString aTargetFrame;
709 aTargetFrame = *pTarget;
716 ScDocument& rDoc = GetViewData().GetDocument();
717 SCTAB nTab = GetViewData().GetTabNo();
718 ScAddress aCellPos( nPosX, nPosY, nTab );
723 aEngine.SetText(*pOld);
729 aEngine.SetText(aOld);
732 sal_Int32 nPara = aEngine.GetParagraphCount();
735 sal_Int32 nTxtLen = aEngine.GetTextLen(nPara);
736 ESelection aInsSel( nPara, nTxtLen, nPara, nTxtLen );
738 if ( bTryReplace && HasBookmarkAtCursor(
nullptr ) )
746 SvxURLField aField( rURL, rDescription, SvxURLFormat::AppDefault );
751 std::unique_ptr<EditTextObject>
pData(aEngine.CreateTextObject());
752 EnterData(nPosX, nPosY, nTab, *
pData);
757 ScAddress aPos( GetViewData().GetCurX(), GetViewData().GetCurY(), GetViewData().GetTabNo() );
758 ScDocument& rDoc = GetViewData().GetDocShell()->GetDocument();
778 if (pField->
GetClassId() != css::text::textfield::Type::URL)
ScMarkData & GetMarkData()
void SetURL(const OUString &rURL)
void EnableIdle(bool bDo)
const SfxPoolItem * ExecuteList(sal_uInt16 nSlot, SfxCallMode nCall, std::initializer_list< SfxPoolItem const * > args, std::initializer_list< SfxPoolItem const * > internalargs=std::initializer_list< SfxPoolItem const * >())
void SetTargetFrame(const OUString &rFrm)
EESpellState StartThesaurus(weld::Widget *pDialogParent)
ScDocShell * GetDocShell() const
const SvxFieldItem * GetField() const
bool GetSotStorageStream(SotClipboardFormatId nFormat, tools::SvRef< SotTempStream > &rStreamRef)
SharedString intern(const OUString &rStr)
SC_DLLPUBLIC svl::SharedStringPool & GetSharedStringPool()
SC_DLLPUBLIC void GetInputString(SCCOL nCol, SCROW nRow, SCTAB nTab, OUString &rString)
todo: It should be possible to have MarkArrays for each table, in order to enable "search all" across...
ErrCode ImportGraphic(Graphic &rGraphic, const INetURLObject &rPath, sal_uInt16 nFormat=GRFILTER_FORMAT_DONTKNOW, sal_uInt16 *pDeterminedFormat=nullptr, GraphicFilterImportFlags nImportFlags=GraphicFilterImportFlags::NONE)
bool PasteBookmark(SotClipboardFormatId nFormatId, const css::uno::Reference< css::datatransfer::XTransferable > &rxTransferable, SCCOL nPosX, SCROW nPosY)
Sheet / outlining (grouping) information.
void DoSheetConversion(const ScConversionParam &rParam)
Generic implementation of sheet conversion functions.
std::unique_ptr< ContentProperties > pData
void SetDocumentModified()
void SetSpellingView(EditView *pSpView)
bool HasEditView(ScSplitPos eWhich) const
ErrCode GuessFilter(SfxMedium &rMedium, std::shared_ptr< const SfxFilter > &, SfxFilterFlags nMust=SfxFilterFlags::IMPORT, SfxFilterFlags nDont=SFX_FILTER_NOTINSTALLED) const
ScSplitPos GetActivePart() const
void ToggleRel(sal_Int32 nStartPos, sal_Int32 nEndPos)
SC_DLLPUBLIC formula::FormulaGrammar::Grammar GetGrammar() const
bool GetINetBookmark(SotClipboardFormatId nFormat, INetBookmark &rBmk)
EmbeddedObjectRef * pObject
bool HasFormat(SotClipboardFormatId nFormat) const
const OUString & GetTargetFrame() const
SC_DLLPUBLIC formula::FormulaGrammar::AddressConvention GetAddressConvention() const
ScFormulaCell * getFormulaCell()
SCROW GetEditEndRow() const
void GetMarkArea(ScRange &rRange) const
virtual SfxUndoManager * GetUndoManager() override
Store arbitrary cell value of any kind.
void SetAllFormulasDirty(const sc::SetFormulaDirtyContext &rCxt)
OUString getString(const ScDocument &rDoc) const
Edit engine for text conversion.
void SetTargetFrame(const OUString &rTarget)
SC_DLLPUBLIC SCROW MaxRow() const
const BorderLinePrimitive2D *pCandidateB assert(pCandidateA)
SC_DLLPUBLIC SCTAB GetTableCount() const
SCTAB GetSelectCount() const
bool IsMultiMarked() const
void CopyToDocument(SCCOL nCol1, SCROW nRow1, SCTAB nTab1, SCCOL nCol2, SCROW nRow2, SCTAB nTab2, InsertDeleteFlags nFlags, bool bMarked, ScDocument &rDestDoc, const ScMarkData *pMarks=nullptr, bool bColRowFlags=true)
bool HasBookmarkAtCursor(SvxHyperlinkItem *pContent)
Walk through all cells in an area.
void UpdateInputHandler(bool bForce=false, bool bStopEditing=true)
SC_DLLPUBLIC const ScPatternAttr * GetPattern(SCCOL nCol, SCROW nRow, SCTAB nTab) const
bool PasteFile(const Point &, const OUString &, bool bLink)
ScTabViewShell * GetViewShell() const
SC_DLLPUBLIC bool SetEditText(const ScAddress &rPos, std::unique_ptr< EditTextObject > pEditText)
This method manages the lifecycle of the passed edit text object.
const char * GetMessageId() const
void SetMarkArea(const ScRange &rRange)
SC_DLLPUBLIC bool SetString(SCCOL nCol, SCROW nRow, SCTAB nTab, const OUString &rString, const ScSetStringParam *pParam=nullptr)
Edit engine for spell checking.
virtual void AddUndoAction(std::unique_ptr< SfxUndoAction > pAction, bool bTryMerg=false)
static css::uno::Reference< css::embed::XStorage > GetTemporaryStorage(const css::uno::Reference< css::uno::XComponentContext > &rxContext=css::uno::Reference< css::uno::XComponentContext >())
static css::uno::Reference< css::linguistic2::XSpellChecker1 > GetSpellChecker()
std::unique_ptr< ScDocument, o3tl::default_delete< ScDocument > > ScDocumentUniquePtr
void UseInteractionHandler(bool)
bool GetString(SotClipboardFormatId nFormat, OUString &rStr)
void InsertBookmark(const OUString &rDescription, const OUString &rURL, SCCOL nPosX, SCROW nPosY, const OUString *pTarget=nullptr, bool bTryReplace=false)
Parameters for conversion.
ScSheetLimits & GetSheetLimits() const
SC_DLLPUBLIC SfxItemPool * GetEnginePool() const
OUString ScResId(const char *pId)
ScGridWindow * GetActiveWin()
const OUString & GetDescription() const
#define GRFILTER_FORMAT_DONTKNOW
const OUString & GetRepresentation() const
bool IsFieldObject() const
SC_DLLPUBLIC const EditTextObject * GetEditText(const ScAddress &rPos) const
void InsertURLField(const OUString &rName, const OUString &rURL, const OUString &rTarget)
void SetName(const OUString &rName)
void PostPaint(SCCOL nStartCol, SCROW nStartRow, SCTAB nStartTab, SCCOL nEndCol, SCROW nEndRow, SCTAB nEndTab, PaintPartFlags nPart, sal_uInt16 nExtFlags=0)
ScConversionType GetType() const
const OUString & GetURL() const
virtual sal_Int32 GetClassId() const
OUString GetMainURL(DecodeMechanism eMechanism, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8) const
const ScAddress & GetPos() const
void PasteRTF(SCCOL nCol, SCROW nStartRow, const css::uno::Reference< css::datatransfer::XTransferable > &rxTransferable)
void UpdateOle(const ScViewData &rViewData, bool bSnapSize=false)
SC_DLLPUBLIC ScFormulaCell * SetFormulaCell(const ScAddress &rPos, ScFormulaCell *pCell)
Set formula cell, and transfer its ownership to the document.
SfxDispatcher * GetDispatcher()
SCCOL GetEditStartCol() const
void assign(const ScDocument &rDoc, const ScAddress &rPos)
Take cell value from specified position in specified document.
SCCOL GetEditEndCol() const
const OUString & GetURL() const
const ScDocument & GetDocument() const
EditTextObject * mpEditText
SC_DLLPUBLIC SfxItemPool * GetEditPool() const
static OUString GetLanguageString(const LanguageType eType)
bool InsertEmbeddedObject(const css::uno::Reference< css::embed::XEmbeddedObject > &, OUString &)
void SetSelection(const ESelection &rNewSel)
void SetOutputArea(const tools::Rectangle &rRect)
static GraphicFilter & GetGraphicFilter()
reference_type * get() const
bool IsUndoEnabled() const
void DoHangulHanjaConversion()
ESelection GetSelection() const
constexpr sal_uInt16 EE_FEATURE_FIELD(EE_FEATURE_NOTCONV+1)
void GetMultiMarkArea(ScRange &rRange) const
static LanguageType GetEffLanguage(ScDocument &rDoc, const ScAddress &rPos)
SC_DLLPUBLIC void EnableUndo(bool bVal)
bool IsIdleEnabled() const
static weld::MessageDialog * CreateMessageDialog(weld::Widget *pParent, VclMessageType eMessageType, VclButtonsType eButtonType, const OUString &rPrimaryMessage, bool bMobile=false)
void GetEditView(ScSplitPos eWhich, EditView *&rViewPtr, SCCOL &rCol, SCROW &rRow)
bool SetSmartURL(OUString const &rTheAbsURIRef, EncodeMechanism eMechanism=EncodeMechanism::WasEncoded, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8, FSysStyle eStyle=FSysStyle::Detect)
SCROW GetEditStartRow() const
const SvxFieldData * GetField() const
void FillEditItemSet(SfxItemSet *pEditSet, const SfxItemSet *pCondSet=nullptr) const
Converts all Calc items contained in the own item set to edit engine items and puts them into pEditSe...