2af1f5691e
Enhanced EditEngine to be able to hold more than 64k paragraphs. Used also in RTF import Calc and Writer, so that could benefit as well. * changed all EditEngine,Outliner,... related paragraph index/count variables from sal_uInt16 to sal_Int32 * sal_Int32 instead of sal_uInt32 to match accessibility API * matched some Outliner methods' paragraph parameters from sal_uLong to sal_Int32 * containers capable to hold size_t nevertheless are limited to a maximum of sal_Int32 * changed definition of EE_PARA_NOT_FOUND and EE_PARA_ALL to SAL_MAX_INT32 + added EE_PARA_MAX_COUNT and EE_TEXTPOS_MAX_COUNT to initialize ESelection with what previously were hard coded 0xFFFF all over the place + for similar reason added EE_TEXTPOS_ALL corresponding to EE_PARA_ALL to initialize an ESelection spanning all available text like aSel(0,0,EE_PARA_ALL,EE_TEXTPOS_ALL) Change-Id: I62d1b9c399cd709a4f93dbac31b219a61c46ec00 Reviewed-on: https://gerrit.libreoffice.org/3838 Tested-by: LibreOffice gerrit bot <gerrit@libreoffice.org> Reviewed-by: Eike Rathke <erack@redhat.com> Tested-by: Eike Rathke <erack@redhat.com>
251 lines
9 KiB
C++
251 lines
9 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 .
|
|
*/
|
|
|
|
#ifndef SC_EDITUTIL_HXX
|
|
#define SC_EDITUTIL_HXX
|
|
|
|
#include "scdllapi.h"
|
|
#include "address.hxx"
|
|
#include <editeng/editeng.hxx>
|
|
#include <svx/pageitem.hxx>
|
|
#include <tools/date.hxx>
|
|
#include <tools/time.hxx>
|
|
#include <tools/gen.hxx>
|
|
#include <tools/fract.hxx>
|
|
|
|
|
|
class OutputDevice;
|
|
class ScDocument;
|
|
class ScPatternAttr;
|
|
class ScEditEngineDefaulter;
|
|
|
|
class ScEditUtil
|
|
{
|
|
ScDocument* pDoc;
|
|
SCCOL nCol;
|
|
SCROW nRow;
|
|
SCTAB nTab;
|
|
Point aScrPos;
|
|
OutputDevice* pDev; // MapMode has to be set
|
|
double nPPTX;
|
|
double nPPTY;
|
|
Fraction aZoomX;
|
|
Fraction aZoomY;
|
|
|
|
static const char pCalcDelimiters[];
|
|
|
|
public:
|
|
static String ModifyDelimiters( const String& rOld );
|
|
|
|
/// Retrieves string with paragraphs delimited by spaces
|
|
static String GetSpaceDelimitedString( const EditEngine& rEngine );
|
|
|
|
/// Retrieves string with paragraphs delimited by new lines ('\n').
|
|
static String GetMultilineString( const EditEngine& rEngine );
|
|
|
|
SC_DLLPUBLIC static OUString GetString( const EditTextObject& rEditText );
|
|
|
|
static EditTextObject* CreateURLObjectFromURL(
|
|
ScDocument& rDoc, const OUString& rURL, const OUString& rText );
|
|
|
|
static void RemoveCharAttribs( EditTextObject& rEditText, const ScPatternAttr& rAttr );
|
|
|
|
public:
|
|
ScEditUtil( ScDocument* pDocument, SCCOL nX, SCROW nY, SCTAB nZ,
|
|
const Point& rScrPosPixel,
|
|
OutputDevice* pDevice, double nScaleX, double nScaleY,
|
|
const Fraction& rX, const Fraction& rY ) :
|
|
pDoc(pDocument),nCol(nX),nRow(nY),nTab(nZ),
|
|
aScrPos(rScrPosPixel),pDev(pDevice),
|
|
nPPTX(nScaleX),nPPTY(nScaleY),aZoomX(rX),aZoomY(rY) {}
|
|
|
|
Rectangle GetEditArea( const ScPatternAttr* pPattern, sal_Bool bForceToTop );
|
|
};
|
|
|
|
|
|
class ScEditAttrTester
|
|
{
|
|
ScEditEngineDefaulter* pEngine;
|
|
SfxItemSet* pEditAttrs;
|
|
sal_Bool bNeedsObject;
|
|
sal_Bool bNeedsCellAttr;
|
|
|
|
public:
|
|
ScEditAttrTester( ScEditEngineDefaulter* pEng );
|
|
~ScEditAttrTester();
|
|
|
|
sal_Bool NeedsObject() const { return bNeedsObject; }
|
|
sal_Bool NeedsCellAttr() const { return bNeedsCellAttr; }
|
|
const SfxItemSet& GetAttribs() const { return *pEditAttrs; }
|
|
};
|
|
|
|
|
|
// construct pool before constructing EditEngine, destroy pool after EditEngine
|
|
class ScEnginePoolHelper
|
|
{
|
|
protected:
|
|
SfxItemPool* pEnginePool;
|
|
SfxItemSet* pDefaults;
|
|
sal_Bool bDeleteEnginePool;
|
|
sal_Bool bDeleteDefaults;
|
|
|
|
ScEnginePoolHelper( SfxItemPool* pEnginePool,
|
|
sal_Bool bDeleteEnginePool = false );
|
|
ScEnginePoolHelper( const ScEnginePoolHelper& rOrg );
|
|
virtual ~ScEnginePoolHelper();
|
|
};
|
|
|
|
|
|
class SC_DLLPUBLIC ScEditEngineDefaulter : public ScEnginePoolHelper, public EditEngine
|
|
{
|
|
private:
|
|
using EditEngine::SetText;
|
|
|
|
public:
|
|
/// bDeleteEnginePool: Engine becomes the owner of the pool
|
|
/// and deletes it on destruction
|
|
ScEditEngineDefaulter( SfxItemPool* pEnginePool,
|
|
sal_Bool bDeleteEnginePool = false );
|
|
/// If rOrg.bDeleteEnginePool: pool gets cloned and will be
|
|
/// deleted on destruction. Defaults are not set.
|
|
ScEditEngineDefaulter( const ScEditEngineDefaulter& rOrg );
|
|
virtual ~ScEditEngineDefaulter();
|
|
|
|
/// Creates a copy of SfxItemSet if bRememberCopy set
|
|
void SetDefaults( const SfxItemSet& rDefaults, sal_Bool bRememberCopy = sal_True );
|
|
|
|
/// Becomes the owner of the SfxItemSet if bTakeOwnership set
|
|
void SetDefaults( SfxItemSet* pDefaults, sal_Bool bTakeOwnership = sal_True );
|
|
|
|
/// Set the item in the default ItemSet which is created
|
|
/// if it doesn't exist yet.
|
|
/// The default ItemSet is then applied to each paragraph.
|
|
void SetDefaultItem( const SfxPoolItem& rItem );
|
|
|
|
/// Returns the stored defaults, used to find non-default character attributes
|
|
const SfxItemSet& GetDefaults();
|
|
|
|
/// Overwritten method to be able to apply defaults already set
|
|
void SetText( const EditTextObject& rTextObject );
|
|
/// Current defaults are not applied, new defaults are applied
|
|
void SetTextNewDefaults( const EditTextObject& rTextObject,
|
|
const SfxItemSet& rDefaults, sal_Bool bRememberCopy = sal_True );
|
|
/// Current defaults are not applied, new defaults are applied
|
|
void SetTextNewDefaults( const EditTextObject& rTextObject,
|
|
SfxItemSet* pDefaults, sal_Bool bTakeOwnership = sal_True );
|
|
|
|
/// Overwritten method to be able to apply defaults already set
|
|
void SetText( const OUString& rText );
|
|
/// Current defaults are not applied, new defaults are applied
|
|
void SetTextNewDefaults( const String& rText,
|
|
const SfxItemSet& rDefaults, sal_Bool bRememberCopy = sal_True );
|
|
/// Current defaults are not applied, new defaults are applied
|
|
void SetTextNewDefaults( const String& rText,
|
|
SfxItemSet* pDefaults, sal_Bool bTakeOwnership = sal_True );
|
|
|
|
/// Paragraph attributes that are not defaults are copied to
|
|
/// character attributes and all paragraph attributes reset
|
|
void RemoveParaAttribs();
|
|
|
|
/// Re-apply existing defaults if set, same as in SetText,
|
|
/// but without EnableUndo/SetUpdateMode.
|
|
void RepeatDefaults();
|
|
};
|
|
|
|
|
|
// 1/100 mm
|
|
class SC_DLLPUBLIC ScTabEditEngine : public ScEditEngineDefaulter
|
|
{
|
|
private:
|
|
void Init(const ScPatternAttr& rPattern);
|
|
public:
|
|
ScTabEditEngine( ScDocument* pDoc ); // Default
|
|
ScTabEditEngine( const ScPatternAttr& rPattern,
|
|
SfxItemPool* pEnginePool,
|
|
SfxItemPool* pTextObjectPool = NULL );
|
|
};
|
|
|
|
|
|
struct ScHeaderFieldData
|
|
{
|
|
String aTitle; // title or file name (if no title)
|
|
String aLongDocName; // path and file name
|
|
String aShortDocName; // pure file name
|
|
String aTabName;
|
|
Date aDate;
|
|
Time aTime;
|
|
long nPageNo;
|
|
long nTotalPages;
|
|
SvxNumType eNumType;
|
|
|
|
ScHeaderFieldData();
|
|
};
|
|
|
|
|
|
// for field commands (or just fields?) in a table
|
|
class SC_DLLPUBLIC ScFieldEditEngine : public ScEditEngineDefaulter
|
|
{
|
|
private:
|
|
ScDocument* mpDoc;
|
|
bool bExecuteURL;
|
|
|
|
public:
|
|
ScFieldEditEngine(
|
|
ScDocument* pDoc, SfxItemPool* pEnginePool, SfxItemPool* pTextObjectPool = NULL,
|
|
bool bDeleteEnginePool = false);
|
|
|
|
void SetExecuteURL(bool bSet) { bExecuteURL = bSet; }
|
|
|
|
virtual void FieldClicked( const SvxFieldItem& rField, sal_Int32, sal_uInt16 );
|
|
virtual OUString CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_uInt16 nPos, Color*& rTxtColor, Color*& rFldColor );
|
|
};
|
|
|
|
|
|
// for headers/footers with fields
|
|
class SC_DLLPUBLIC ScHeaderEditEngine : public ScEditEngineDefaulter
|
|
{
|
|
private:
|
|
ScHeaderFieldData aData;
|
|
|
|
public:
|
|
ScHeaderEditEngine( SfxItemPool* pEnginePool, sal_Bool bDeleteEnginePool = false );
|
|
virtual OUString CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_uInt16 nPos, Color*& rTxtColor, Color*& rFldColor );
|
|
|
|
void SetNumType(SvxNumType eNew) { aData.eNumType = eNew; }
|
|
void SetData(const ScHeaderFieldData& rNew) { aData = rNew; }
|
|
};
|
|
|
|
// for Note text objects.
|
|
class ScNoteEditEngine : public ScEditEngineDefaulter
|
|
{
|
|
|
|
public:
|
|
ScNoteEditEngine( SfxItemPool* pEnginePool,
|
|
SfxItemPool* pTextObjectPool = NULL,
|
|
sal_Bool bDeleteEnginePool = false );
|
|
|
|
};
|
|
|
|
// SvxFieldData derivations were moved to Svx (comment can be deleted?)
|
|
|
|
|
|
#endif
|
|
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|