1
0
Fork 0
libreoffice/sc/source/ui/inc/viewfunc.hxx
Daniel Baumann 8e63e14cf6
Adding upstream version 4:25.2.3.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-22 16:20:04 +02:00

397 lines
19 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#pragma once
#include "tabview.hxx"
#include <tabbgcolor.hxx>
#include <com/sun/star/embed/Aspects.hpp>
#include <vector>
class ScPatternAttr;
class ScAutoFormatData;
class SvxSearchItem;
class SfxItemSet;
class SvxBoxItem;
class SvxBoxInfoItem;
class SfxStyleSheetBase;
class SfxStyleSheet;
class SfxPoolItem;
class EditTextObject;
struct ScSolveParam;
struct ScTabOpParam;
class ScValidationData;
class ScConversionParam;
class SdrModel;
class Graphic;
class ScRangeList;
class SvxHyperlinkItem;
class ScTransferObj;
class ScTableProtection;
enum class CreateNameFlags;
namespace editeng { class SvxBorderLine; }
namespace com::sun::star::embed { class XEmbeddedObject; }
namespace sc {
struct ColRowSpan;
}
namespace com::sun::star::datatransfer { class XTransferable; }
struct ScDataFormFragment
{
std::unique_ptr<weld::Builder> m_xBuilder;
std::unique_ptr<weld::Label> m_xLabel;
std::unique_ptr<weld::Entry> m_xEdit;
ScDataFormFragment(weld::Container* pGrid, int nLine);
};
class ScViewFunc : public ScTabView
{
private:
ScAddress aFormatSource; // for automatic extension of formatting
ScRange aFormatArea;
bool bFormatValid;
public:
ScViewFunc( vcl::Window* pParent, ScDocShell& rDocSh, ScTabViewShell* pViewShell );
~ScViewFunc();
SC_DLLPUBLIC const ScPatternAttr* GetSelectionPattern ();
void GetSelectionFrame(
std::shared_ptr<SvxBoxItem>& rLineOuter,
std::shared_ptr<SvxBoxInfoItem>& rLineInner );
SvtScriptType GetSelectionScriptType();
bool GetAutoSumArea( ScRangeList& rRangeList );
void EnterAutoSum( const ScRangeList& rRangeList, bool bSubTotal, const ScAddress& rAddr, const OpCode eCode );
bool AutoSum( const ScRange& rRange, bool bSubTotal, bool bSetCursor, bool bContinue, const OpCode eCode );
OUString GetAutoSumFormula( const ScRangeList& rRangeList, bool bSubTotal, const ScAddress& rAddr, const OpCode eCode );
SC_DLLPUBLIC void EnterData(SCCOL nCol, SCROW nRow, SCTAB nTab, const OUString& rString,
const EditTextObject* pData = nullptr, bool bMatrixExpand = false);
void EnterData( SCCOL nCol, SCROW nRow, SCTAB nTab,
const EditTextObject& rData, bool bTestSimple = false );
void EnterValue( SCCOL nCol, SCROW nRow, SCTAB nTab, const double& rValue );
void EnterMatrix( const OUString& rString, ::formula::FormulaGrammar::Grammar eGram );
/**
* @param pData The caller must manage the life cycle of the object this
* pointer points to. NULL is allowed.
*/
void EnterBlock( const OUString& rString, const EditTextObject* pData );
void EnterDataAtCursor( const OUString& rString );
SC_DLLPUBLIC void CutToClip();
SC_DLLPUBLIC bool CopyToClip( ScDocument* pClipDoc, bool bCut, bool bApi = false,
bool bIncludeObjects = false, bool bStopEdit = true );
SC_DLLPUBLIC bool CopyToClip( ScDocument* pClipDoc, const ScRangeList& rRange, bool bCut,
bool bApi = false, bool bIncludeObjects = false, bool bStopEdit = true );
bool CopyToClipSingleRange( ScDocument* pClipDoc, const ScRangeList& rRanges, bool bCut,
bool bIncludeObjects );
bool CopyToClipMultiRange( const ScDocument* pClipDoc, const ScRangeList& rRanges, bool bCut,
bool bApi, bool bIncludeObjects );
rtl::Reference<ScTransferObj> CopyToTransferable();
SC_DLLPUBLIC bool PasteFromClip(
InsertDeleteFlags nFlags, ScDocument* pClipDoc,
ScPasteFunc nFunction = ScPasteFunc::NONE, bool bSkipEmptyCells = false,
bool bTranspose = false, bool bAsLink = false,
InsCellCmd eMoveMode = INS_NONE,
InsertDeleteFlags nUndoExtraFlags = InsertDeleteFlags::NONE,
bool bAllowDialogs = false );
void FillTab( InsertDeleteFlags nFlags, ScPasteFunc nFunction, bool bSkipEmpty, bool bAsLink );
SC_DLLPUBLIC void PasteFromSystem();
SC_DLLPUBLIC bool PasteFromSystem( SotClipboardFormatId nFormatId, bool bApi = false );
void PasteFromTransferable( const css::uno::Reference<
css::datatransfer::XTransferable >& rxTransferable );
void PasteDraw();
void PasteDraw( const Point& rLogicPos, SdrModel* pModel, bool bGroup,
std::u16string_view rSrcShellID, std::u16string_view rDestShellID );
bool PasteOnDrawObjectLinked(
const css::uno::Reference< css::datatransfer::XTransferable >& rxTransferable,
SdrObject& rHitObj);
bool PasteDataFormat( SotClipboardFormatId nFormatId,
const css::uno::Reference< css::datatransfer::XTransferable >& rxTransferable,
SCCOL nPosX, SCROW nPosY, const Point* pLogicPos,
bool bLink = false, bool bAllowDialogs = false );
bool PasteFile( const Point&, const OUString&, bool bLink );
bool PasteObject( const Point&, const css::uno::Reference < css::embed::XEmbeddedObject >&, const Size*, const Graphic* = nullptr, const OUString& = OUString(), sal_Int64 nAspect = css::embed::Aspects::MSOLE_CONTENT );
bool PasteBitmapEx( const Point&, const BitmapEx& );
bool PasteMetaFile( const Point&, const GDIMetaFile& );
bool PasteGraphic( const Point& rPos, const Graphic& rGraphic,
const OUString& rFile );
bool PasteBookmark( SotClipboardFormatId nFormatId,
const css::uno::Reference< css::datatransfer::XTransferable >& rxTransferable,
SCCOL nPosX, SCROW nPosY );
bool PasteLink( const css::uno::Reference< css::datatransfer::XTransferable >& rxTransferable );
void InsertBookmark( const OUString& rDescription, const OUString& rURL,
SCCOL nPosX, SCROW nPosY, const OUString* pTarget = nullptr,
bool bTryReplace = false );
bool HasBookmarkAtCursor( SvxHyperlinkItem* pContent );
bool MoveBlockTo( const ScRange& rSource, const ScAddress& rDestPos,
bool bCut );
bool LinkBlock( const ScRange& rSource, const ScAddress& rDestPos );
void CreateNames( CreateNameFlags nFlags );
CreateNameFlags GetCreateNameFlags();
void InsertNameList();
bool InsertName( const OUString& rName, const OUString& rSymbol,
const OUString& rType );
void ApplyAttributes( const SfxItemSet& rDialogSet, const SfxItemSet& rOldSet, bool bAdjustBlockHeight = true );
void ApplyAttr( const SfxPoolItem& rAttrItem, bool bAdjustBlockHeight = true );
void ApplySelectionPattern( const ScPatternAttr& rAttr,
bool bCursorOnly = false);
void ApplyPatternLines(const ScPatternAttr& rAttr,
const SvxBoxItem& rNewOuter,
const SvxBoxInfoItem* pNewInner);
void ApplyUserItemSet( const SfxItemSet& rItemSet );
const SfxStyleSheet*
GetStyleSheetFromMarked();
void SetStyleSheetToMarked( const SfxStyleSheet* pStyleSheet );
void RemoveStyleSheetInUse( const SfxStyleSheetBase* pStyleSheet );
void UpdateStyleSheetInUse( const SfxStyleSheetBase* pStyleSheet );
void SetNumberFormat( SvNumFormatType nFormatType, sal_uLong nAdd = 0 );
void SetNumFmtByStr( const OUString& rCode );
void ChangeNumFmtDecimals( bool bIncrement );
void SetValidation( const ScValidationData& rNew );
void ChangeIndent( bool bIncrement );
void ProtectSheet( SCTAB nTab, const ScTableProtection& rProtect );
void ProtectDoc( const OUString& rPassword );
bool Unprotect( SCTAB nTab, const OUString& rPassword );
void DeleteCells( DelCellCmd eCmd );
bool InsertCells( InsCellCmd eCmd, bool bRecord = true, bool bPartOfPaste = false, size_t nCount = 0);
void DeleteMulti( bool bRows );
void DeleteContents( InsertDeleteFlags nFlags );
void SetWidthOrHeight(
bool bWidth, const std::vector<sc::ColRowSpan>& rRanges, ScSizeMode eMode,
sal_uInt16 nSizeTwips, bool bRecord = true, const ScMarkData* pMarkData = nullptr );
void SetMarkedWidthOrHeight( bool bWidth, ScSizeMode eMode, sal_uInt16 nSizeTwips );
bool AdjustBlockHeight( bool bPaint = true, ScMarkData* pMarkData = nullptr );
bool AdjustRowHeight( SCROW nStartRow, SCROW nEndRow, bool bApi );
void ModifyCellSize( ScDirection eDir, bool bOptimal );
SC_DLLPUBLIC void
InsertPageBreak( bool bColumn, bool bRecord = true,
const ScAddress* pPos = nullptr,
bool bSetModified = true );
SC_DLLPUBLIC void
DeletePageBreak( bool bColumn, bool bRecord = true,
const ScAddress* pPos = nullptr,
bool bSetModified = true );
void RemoveManualBreaks();
void SetPrintZoom(sal_uInt16 nScale);
void AdjustPrintZoom();
bool TestMergeCells();
bool TestRemoveMerge();
void MergeCells( bool bApi, bool bDoContents, bool bCenter,
const sal_uInt16 nSlot );
bool RemoveMerge();
SC_DLLPUBLIC void
FillSimple( FillDir eDir );
void FillSeries( FillDir eDir, FillCmd eCmd, FillDateCmd eDateCmd,
double fStart, double fStep, double fMax );
SC_DLLPUBLIC void
FillAuto( FillDir eDir, SCCOL nStartCol, SCROW nStartRow,
SCCOL nEndCol, SCROW nEndRow, sal_uLong nCount );
void FillCrossDblClick();
void ConvertFormulaToValue();
void TransliterateText( TransliterationFlags nType );
ScAutoFormatData* CreateAutoFormatData();
void AutoFormat( sal_uInt16 nFormatNo );
bool SearchAndReplace( const SvxSearchItem* pSearchItem,
bool bAddUndo, bool bIsApi );
void Solve( const ScSolveParam& rParam );
void TabOp( const ScTabOpParam& rParam, bool bRecord = true );
bool InsertTable( const OUString& rName, SCTAB nTabNr, bool bRecord = true );
void InsertTables(std::vector<OUString>& aNames, SCTAB nTab, SCTAB nCount, bool bRecord = true);
bool AppendTable( const OUString& rName, bool bRecord = true );
void DeleteTable( SCTAB nTabNr, bool bRecord = true );
bool DeleteTables(const std::vector<SCTAB>& TheTabs, bool bRecord = true );
void DeleteTables(SCTAB nTab, SCTAB nSheets);
bool RenameTable( const OUString& rName, SCTAB nTabNr );
void MoveTable( sal_uInt16 nDestDocNo, SCTAB nDestTab, bool bCopy, const OUString* pNewTabName = nullptr,
bool bContextMenu = false, SCTAB nContextMenuSourceTab = -1 );
void ImportTables( ScDocShell* pSrcShell,
SCTAB nCount, const SCTAB* pSrcTabs,
bool bLink,SCTAB nTab);
bool SetTabBgColor( const Color& rColor, SCTAB nTabNr );
bool SetTabBgColor( ScUndoTabColorInfo::List& rUndoSetTabBgColorInfoList );
void InsertTableLink( const OUString& rFile,
const OUString& rFilter, const OUString& rOptions,
std::u16string_view rTabName );
void InsertAreaLink( const OUString& rFile,
const OUString& rFilter, const OUString& rOptions,
const OUString& rSource );
void ShowTable( const std::vector<OUString>& rNames );
void HideTable( const ScMarkData& rMark, SCTAB nTabToSelect = -1);
void MakeScenario(const OUString& rName, const OUString& rComment,
const Color& rColor, ScScenarioFlags nFlags);
void ExtendScenario();
void UseScenario( const OUString& rName );
void InsertSpecialChar( const OUString& rStr, const vcl::Font& rFont );
void SetSelectionFrameLines( const ::editeng::SvxBorderLine* pLine,
bool bColorOnly );
void SetNoteText( const ScAddress& rPos, const OUString& rNoteText );
void ReplaceNote( const ScAddress& rPos, const OUString& rNoteText, const OUString* pAuthor, const OUString* pDate );
void DoRefConversion();
void DoHangulHanjaConversion();
void DoThesaurus();
/** Generic implementation of sheet conversion functions. */
void DoSheetConversion( const ScConversionParam& rParam );
void SetPrintRanges( bool bEntireSheet,
const OUString* pPrint,
const OUString* pRepCol, const OUString* pRepRow,
bool bAddPrint );
void DetectiveAddPred();
void DetectiveDelPred();
void DetectiveAddSucc();
void DetectiveDelSucc();
void DetectiveAddError();
void DetectiveMarkInvalid();
void DetectiveDelAll();
void DetectiveRefresh();
void DetectiveMarkPred();
void DetectiveMarkSucc();
void InsertCurrentTime(SvNumFormatType nCellFmt, const OUString& rUndoStr);
void ShowNote( bool bShow );
void EditNote();
bool SelectionEditable( bool* pOnlyNotBecauseOfMatrix = nullptr );
SC_DLLPUBLIC void
DataFormPutData(SCROW nCurrentRow ,
SCROW nStartRow , SCCOL nStartCol ,
SCROW nEndRow , SCCOL nEndCol ,
std::vector<std::unique_ptr<ScDataFormFragment>>& rEdits,
sal_uInt16 aColLength);
void UpdateSelectionArea(const ScMarkData& rSel, ScPatternAttr* pAttr = nullptr,
bool adjustHeight = true);
void OnLOKInsertDeleteColumn(SCCOL nStartCol, tools::Long nOffset);
void OnLOKInsertDeleteRow(SCROW nStartRow, tools::Long nOffset);
void OnLOKSetWidthOrHeight(SCCOLROW nStart, bool bWidth);
bool TestFormatArea( SCCOL nCol, SCROW nRow, SCTAB nTab, bool bAttrChanged );
void DoAutoAttributes( SCCOL nCol, SCROW nRow, SCTAB nTab,
bool bAttrChanged );
// Internal helper functions
protected:
static void UpdateLineAttrs( ::editeng::SvxBorderLine& rLine,
const ::editeng::SvxBorderLine* pDestLine,
const ::editeng::SvxBorderLine* pSrcLine,
bool bColor );
private:
void PasteRTF( SCCOL nCol, SCROW nStartRow,
const css::uno::Reference< css::datatransfer::XTransferable >& rxTransferable );
bool PasteMultiRangesFromClip(
InsertDeleteFlags nFlags, ScDocument* pClipDoc,
ScPasteFunc nFunction, bool bSkipEmptyCells,
bool bTranspose, bool bAsLink, bool bAllowDialogs,
InsCellCmd eMoveMode, InsertDeleteFlags nUndoFlags );
bool PasteFromClipToMultiRanges(
InsertDeleteFlags nFlags, ScDocument* pClipDoc, ScPasteFunc nFunction,
bool bSkipEmptyCells, bool bTranspose, bool bAsLink, bool bAllowDialogs,
InsCellCmd eMoveMode, InsertDeleteFlags nUndoFlags );
void PostPasteFromClip(const ScRangeList& rPasteRanges, const ScMarkData& rMark);
bool PasteDataFormatSource( SotClipboardFormatId nFormatId,
SCCOL nPosX, SCROW nPosY,
bool bAllowDialogs,
TransferableDataHelper& rDataHelper, Point& rPos);
bool PasteDataFormatFormattedText( SotClipboardFormatId nFormatId,
const css::uno::Reference< css::datatransfer::XTransferable >& rxTransferable,
SCCOL nPosX, SCROW nPosY,
bool bAllowDialogs, TransferableDataHelper& rDataHelper );
sal_uInt16 GetOptimalColWidth( SCCOL nCol, SCTAB nTab, bool bFormula );
void StartFormatArea();
void MarkAndJumpToRanges(const ScRangeList& rRanges);
void CopyAutoSpellData( FillDir eDir, SCCOL nStartCol, SCROW nStartRow,
SCCOL nEndCol, SCROW nEndRow, sal_uLong nCount );
};
extern bool bPasteIsMove;
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */