blob: b9a6d80ae4c496fd24e5e54b795b477b10a64708 [file] [log] [blame]
/**************************************************************
*
* 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
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef SC_VIEWFUNC_HXX
#define SC_VIEWFUNC_HXX
#include "tabview.hxx"
#include "tabbgcolor.hxx"
#ifndef _SVSTDARR_SHORTS
#define _SVSTDARR_SHORTS
#include <svl/svstdarr.hxx>
#endif
#ifndef _SVSTDARR_STRINGS
#define _SVSTDARR_STRINGS
#include <svl/svstdarr.hxx>
#endif
#include <com/sun/star/embed/XEmbeddedObject.hpp>
#include <com/sun/star/embed/Aspects.hpp>
class ScPatternAttr;
class ScAutoFormatData;
class SvxSearchItem;
class SfxItemSet;
class SvxBorderLine;
class SvxBoxItem;
class SvxBoxInfoItem;
class SfxStyleSheetBase;
class SfxStyleSheet;
class SfxPoolItem;
class EditTextObject;
struct ScSolveParam;
struct ScTabOpParam;
class ScPostIt;
class ScConditionalFormat;
class ScValidationData;
class ScConversionParam;
class SdrModel;
class Graphic;
class Exchange;
class ScRangeList;
class SvxHyperlinkItem;
class ScTransferObj;
class ScTableProtection;
namespace com { namespace sun { namespace star { namespace datatransfer { class XTransferable; } } } }
//==================================================================
class ScViewFunc : public ScTabView
{
private:
ScAddress aFormatSource; // fuer automatisches Erweitern von Formatierung
ScRange aFormatArea;
sal_Bool bFormatValid;
public:
ScViewFunc( Window* pParent, ScDocShell& rDocSh, ScTabViewShell* pViewShell );
//UNUSED2008-05 ScViewFunc( Window* pParent, const ScViewFunc& rViewFunc, ScTabViewShell* pViewShell );
~ScViewFunc();
const ScPatternAttr* GetSelectionPattern ();
void GetSelectionFrame ( SvxBoxItem& rLineOuter,
SvxBoxInfoItem& rLineInner );
sal_uInt8 GetSelectionScriptType();
sal_Bool GetAutoSumArea(ScRangeList& rRangeList);
void EnterAutoSum(const ScRangeList& rRangeList, sal_Bool bSubTotal);
bool AutoSum( const ScRange& rRange, bool bSubTotal, bool bSetCursor, bool bContinue );
String GetAutoSumFormula( const ScRangeList& rRangeList, bool bSubTotal );
void EnterData( SCCOL nCol, SCROW nRow, SCTAB nTab, const String& rString,
sal_Bool bRecord = sal_True, const EditTextObject* pData = NULL );
void EnterValue( SCCOL nCol, SCROW nRow, SCTAB nTab, const double& rValue );
void EnterData( SCCOL nCol, SCROW nRow, SCTAB nTab, const EditTextObject* pData,
sal_Bool bRecord = sal_True, sal_Bool bTestSimple = sal_False );
void EnterMatrix( const String& rString );
void EnterBlock( const String& rString, const EditTextObject* pData );
void EnterDataAtCursor( const String& rString ); //! nicht benutzt ?
SC_DLLPUBLIC void CutToClip( ScDocument* pClipDoc = NULL, sal_Bool bIncludeObjects = sal_False );
SC_DLLPUBLIC sal_Bool CopyToClip( ScDocument* pClipDoc = NULL, sal_Bool bCut = sal_False, sal_Bool bApi = sal_False,
sal_Bool bIncludeObjects = sal_False, sal_Bool bStopEdit = sal_True );
ScTransferObj* CopyToTransferable();
SC_DLLPUBLIC sal_Bool PasteFromClip( sal_uInt16 nFlags, ScDocument* pClipDoc,
sal_uInt16 nFunction = PASTE_NOFUNC, sal_Bool bSkipEmpty = sal_False,
sal_Bool bTranspose = sal_False, sal_Bool bAsLink = sal_False,
InsCellCmd eMoveMode = INS_NONE,
sal_uInt16 nUndoExtraFlags = IDF_NONE,
sal_Bool bAllowDialogs = sal_False );
void FillTab( sal_uInt16 nFlags, sal_uInt16 nFunction, sal_Bool bSkipEmpty, sal_Bool bAsLink );
SC_DLLPUBLIC void PasteFromSystem();
SC_DLLPUBLIC sal_Bool PasteFromSystem( sal_uLong nFormatId, sal_Bool bApi = sal_False );
void PasteFromTransferable( const ::com::sun::star::uno::Reference<
::com::sun::star::datatransfer::XTransferable >& rxTransferable );
void PasteDraw();
void PasteDraw( const Point& rLogicPos, SdrModel* pModel,
sal_Bool bGroup = sal_False, sal_Bool bSameDocClipboard = sal_False );
sal_Bool PasteOnDrawObjectLinked(
const ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable >& rxTransferable,
SdrObject& rHitObj);
sal_Bool PasteDataFormat( sal_uLong nFormatId,
const ::com::sun::star::uno::Reference<
::com::sun::star::datatransfer::XTransferable >& rxTransferable,
SCCOL nPosX, SCROW nPosY, Point* pLogicPos = NULL,
sal_Bool bLink = sal_False, sal_Bool bAllowDialogs = sal_False );
sal_Bool PasteFile( const Point&, const String&, sal_Bool bLink=sal_False );
sal_Bool PasteObject( const Point&, const com::sun::star::uno::Reference < com::sun::star::embed::XEmbeddedObject >&, const Size* = NULL, const Graphic* = NULL, const ::rtl::OUString& = ::rtl::OUString(), sal_Int64 nAspect = ::com::sun::star::embed::Aspects::MSOLE_CONTENT );
sal_Bool PasteBitmapEx( const Point&, const BitmapEx& );
sal_Bool PasteMetaFile( const Point&, const GDIMetaFile& );
sal_Bool PasteGraphic( const Point& rPos, const Graphic& rGraphic,
const String& rFile, const String& rFilter );
sal_Bool PasteBookmark( sal_uLong nFormatId,
const ::com::sun::star::uno::Reference<
::com::sun::star::datatransfer::XTransferable >& rxTransferable,
SCCOL nPosX, SCROW nPosY );
sal_Bool PasteDDE( const ::com::sun::star::uno::Reference<
::com::sun::star::datatransfer::XTransferable >& rxTransferable );
void InsertBookmark( const String& rDescription, const String& rURL,
SCCOL nPosX, SCROW nPosY, const String* pTarget = NULL,
sal_Bool bTryReplace = sal_False );
sal_Bool HasBookmarkAtCursor( SvxHyperlinkItem* pContent );
long DropRequestHdl( Exchange* pExchange );
sal_Bool MoveBlockTo( const ScRange& rSource, const ScAddress& rDestPos,
sal_Bool bCut, sal_Bool bRecord, sal_Bool bPaint, sal_Bool bApi );
sal_Bool LinkBlock( const ScRange& rSource, const ScAddress& rDestPos, sal_Bool bApi );
void CreateNames( sal_uInt16 nFlags );
sal_uInt16 GetCreateNameFlags();
void InsertNameList();
sal_Bool InsertName( const String& rName, const String& rSymbol,
const String& rType );
void ApplyAttributes( const SfxItemSet* pDialogSet, const SfxItemSet* pOldSet,
sal_Bool bRecord = sal_True );
void ApplyAttr( const SfxPoolItem& rAttrItem );
void ApplySelectionPattern( const ScPatternAttr& rAttr,
sal_Bool bRecord = sal_True,
sal_Bool bCursorOnly = sal_False );
void ApplyPatternLines( const ScPatternAttr& rAttr,
const SvxBoxItem* pNewOuter,
const SvxBoxInfoItem* pNewInner, sal_Bool bRecord = sal_True );
void ApplyUserItemSet( const SfxItemSet& rItemSet );
const SfxStyleSheet* GetStyleSheetFromMarked();
void SetStyleSheetToMarked( SfxStyleSheet* pStyleSheet,
sal_Bool bRecord = sal_True );
void RemoveStyleSheetInUse( const SfxStyleSheetBase* pStyleSheet );
void UpdateStyleSheetInUse( const SfxStyleSheetBase* pStyleSheet );
void SetNumberFormat( short nFormatType, sal_uLong nAdd = 0 );
void SetNumFmtByStr( const String& rCode );
void ChangeNumFmtDecimals( sal_Bool bIncrement );
void SetConditionalFormat( const ScConditionalFormat& rNew );
void SetValidation( const ScValidationData& rNew );
void ChangeIndent( sal_Bool bIncrement );
void ProtectSheet( SCTAB nTab, const ScTableProtection& rProtect );
void Protect( SCTAB nTab, const String& rPassword );
sal_Bool Unprotect( SCTAB nTab, const String& rPassword );
void DeleteCells( DelCellCmd eCmd, sal_Bool bRecord = sal_True );
sal_Bool InsertCells( InsCellCmd eCmd, sal_Bool bRecord = sal_True, sal_Bool bPartOfPaste = sal_False );
void DeleteMulti( sal_Bool bRows, sal_Bool bRecord = sal_True );
void DeleteContents( sal_uInt16 nFlags, sal_Bool bRecord = sal_True );
void SetWidthOrHeight( sal_Bool bWidth, SCCOLROW nRangeCnt, SCCOLROW* pRanges,
ScSizeMode eMode, sal_uInt16 nSizeTwips,
sal_Bool bRecord = sal_True, sal_Bool bPaint = sal_True,
ScMarkData* pMarkData = NULL );
void SetMarkedWidthOrHeight( sal_Bool bWidth, ScSizeMode eMode, sal_uInt16 nSizeTwips,
sal_Bool bRecord = sal_True, sal_Bool bPaint = sal_True );
void ShowMarkedColumns( sal_Bool bShow, sal_Bool bRecord = sal_True );
void ShowMarkedRows( sal_Bool bShow, sal_Bool bRecord = sal_True );
sal_Bool AdjustBlockHeight( sal_Bool bPaint = sal_True, ScMarkData* pMarkData = NULL );
sal_Bool AdjustRowHeight( SCROW nStartRow, SCROW nEndRow, sal_Bool bPaint = sal_True );
void ModifyCellSize( ScDirection eDir, sal_Bool bOptimal );
SC_DLLPUBLIC void InsertPageBreak( sal_Bool bColumn, sal_Bool bRecord = sal_True,
const ScAddress* pPos = NULL,
sal_Bool bSetModified = sal_True );
SC_DLLPUBLIC void DeletePageBreak( sal_Bool bColumn, sal_Bool bRecord = sal_True,
const ScAddress* pPos = NULL,
sal_Bool bSetModified = sal_True );
void RemoveManualBreaks();
void SetPrintZoom(sal_uInt16 nScale, sal_uInt16 nPages);
void AdjustPrintZoom();
sal_Bool TestMergeCells();
sal_Bool TestRemoveMerge();
sal_Bool MergeCells( sal_Bool bApi, sal_Bool& rDoContents, sal_Bool bRecord = sal_True );
sal_Bool RemoveMerge( sal_Bool bRecord = sal_True );
void FillSimple( FillDir eDir, sal_Bool bRecord = sal_True );
void FillSeries( FillDir eDir, FillCmd eCmd, FillDateCmd eDateCmd,
double fStart, double fStep, double fMax, sal_Bool bRecord = sal_True );
void FillAuto( FillDir eDir, SCCOL nStartCol, SCROW nStartRow,
SCCOL nEndCol, SCROW nEndRow, sal_uLong nCount, sal_Bool bRecord = sal_True );
void FillCrossDblClick();
void TransliterateText( sal_Int32 nType );
ScAutoFormatData* CreateAutoFormatData();
void AutoFormat( sal_uInt16 nFormatNo, sal_Bool bRecord = sal_True );
// void SearchAndReplace( const SvxSearchItem* pSearchItem,
sal_Bool SearchAndReplace( const SvxSearchItem* pSearchItem,
sal_Bool bAddUndo, sal_Bool bIsApi );
void Solve( const ScSolveParam& rParam );
void TabOp( const ScTabOpParam& rParam, sal_Bool bRecord = sal_True );
sal_Bool InsertTable( const String& rName, SCTAB nTabNr, sal_Bool bRecord = sal_True );
sal_Bool InsertTables(SvStrings *pNames, SCTAB nTab, SCTAB nCount, sal_Bool bRecord = sal_True);
sal_Bool AppendTable( const String& rName, sal_Bool bRecord = sal_True );
sal_Bool DeleteTable( SCTAB nTabNr, sal_Bool bRecord = sal_True );
sal_Bool DeleteTables(const SvShorts &TheTabs, sal_Bool bRecord = sal_True );
sal_Bool RenameTable( const String& rName, SCTAB nTabNr );
void MoveTable( sal_uInt16 nDestDocNo, SCTAB nDestTab, sal_Bool bCopy );
void ImportTables( ScDocShell* pSrcShell,
SCTAB nCount, const SCTAB* pSrcTabs,
sal_Bool bLink,SCTAB nTab);
bool SetTabBgColor( const Color& rColor, SCTAB nTabNr );
bool SetTabBgColor( ScUndoTabColorInfo::List& rUndoSetTabBgColorInfoList );
void InsertTableLink( const String& rFile,
const String& rFilter, const String& rOptions,
const String& rTabName );
void InsertAreaLink( const String& rFile,
const String& rFilter, const String& rOptions,
const String& rSource, sal_uLong nRefresh );
void ShowTable( const String& rName );
void HideTable( SCTAB nTabNr );
void MakeScenario( const String& rName, const String& rComment,
const Color& rColor, sal_uInt16 nFlags );
void ExtendScenario();
void UseScenario( const String& rName );
void InsertSpecialChar( const String& rStr, const Font& rFont );
void InsertDummyObject();
void InsertOleObject();
void InsertDraw();
void SetSelectionFrameLines( const SvxBorderLine* pLine,
sal_Bool bColorOnly );
void SetNoteText( const ScAddress& rPos, const String& rNoteText );
void ReplaceNote( const ScAddress& rPos, const String& rNoteText, const String* pAuthor, const String* pDate );
void DoRefConversion( sal_Bool bRecord = sal_True );
//UNUSED2008-05 void DoSpellingChecker( sal_Bool bRecord = sal_True );
void DoHangulHanjaConversion( sal_Bool bRecord = sal_True );
void DoThesaurus( sal_Bool bRecord = sal_True );
//UNUSED2008-05 DECL_LINK( SpellError, void * );
/** Generic implementation of sheet conversion functions. */
void DoSheetConversion( const ScConversionParam& rParam, sal_Bool bRecord = sal_True );
void SetPrintRanges( sal_Bool bEntireSheet,
const String* pPrint,
const String* pRepCol, const String* pRepRow,
sal_Bool bAddPrint );
void DetectiveAddPred();
void DetectiveDelPred();
void DetectiveAddSucc();
void DetectiveDelSucc();
void DetectiveAddError();
void DetectiveMarkInvalid();
void DetectiveDelAll();
void DetectiveRefresh();
void ShowNote( bool bShow = true );
inline void HideNote() { ShowNote( false ); }
void EditNote();
void ForgetFormatArea() { bFormatValid = sal_False; }
sal_Bool SelectionEditable( sal_Bool* pOnlyNotBecauseOfMatrix = NULL );
// interne Hilfsfunktionen
protected:
void UpdateLineAttrs( SvxBorderLine& rLine,
const SvxBorderLine* pDestLine,
const SvxBorderLine* pSrcLine,
sal_Bool bColor );
//UNUSED2008-05 void PaintWidthHeight( sal_Bool bColumns, SCCOLROW nStart, SCCOLROW nEnd );
private:
void PasteRTF( SCCOL nCol, SCROW nStartRow,
const ::com::sun::star::uno::Reference<
::com::sun::star::datatransfer::XTransferable >& rxTransferable );
bool PasteMultiRangesFromClip( sal_uInt16 nFlags, ScDocument* pClipDoc, sal_uInt16 nFunction,
bool bSkipEmpty, bool bTranspos, bool bAsLink, bool bAllowDialogs,
InsCellCmd eMoveMode, sal_uInt16 nCondFlags, sal_uInt16 nUndoFlags );
void PostPasteFromClip(const ScRange& rPasteRange, const ScMarkData& rMark);
sal_uInt16 GetOptimalColWidth( SCCOL nCol, SCTAB nTab, sal_Bool bFormula );
void StartFormatArea();
sal_Bool TestFormatArea( SCCOL nCol, SCROW nRow, SCTAB nTab, sal_Bool bAttrChanged );
void DoAutoAttributes( SCCOL nCol, SCROW nRow, SCTAB nTab,
sal_Bool bAttrChanged, sal_Bool bAddUndo );
};
#endif