editeng: move EditLine in its own header file
Change-Id: I21cac4a8899f96da420428c4eb110078c740615a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/161357 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
This commit is contained in:
committed by
Tomaž Vajngerl
parent
4871de96cb
commit
2ffe4a6580
110
editeng/inc/EditLine.hxx
Normal file
110
editeng/inc/EditLine.hxx
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
/* -*- 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
|
||||||
|
|
||||||
|
class ParaPortion;
|
||||||
|
|
||||||
|
class EditLine
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
typedef std::vector<sal_Int32> CharPosArrayType;
|
||||||
|
|
||||||
|
private:
|
||||||
|
CharPosArrayType aPositions;
|
||||||
|
std::vector<sal_Bool> aKashidaPositions;
|
||||||
|
sal_Int32 nTxtWidth;
|
||||||
|
sal_Int32 nStartPosX;
|
||||||
|
sal_Int32 nStart; // could be replaced by nStartPortion
|
||||||
|
sal_Int32 nEnd; // could be replaced by nEndPortion
|
||||||
|
sal_Int32 nStartPortion;
|
||||||
|
sal_Int32 nEndPortion;
|
||||||
|
sal_uInt16 nHeight; // Total height of the line
|
||||||
|
sal_uInt16 nTxtHeight; // Pure Text height
|
||||||
|
sal_uInt16 nMaxAscent;
|
||||||
|
bool bHangingPunctuation : 1;
|
||||||
|
bool bInvalid : 1; // for skillful formatting
|
||||||
|
|
||||||
|
public:
|
||||||
|
EditLine();
|
||||||
|
EditLine(const EditLine&);
|
||||||
|
~EditLine();
|
||||||
|
|
||||||
|
bool IsIn(sal_Int32 nIndex) const { return ((nIndex >= nStart) && (nIndex < nEnd)); }
|
||||||
|
|
||||||
|
bool IsIn(sal_Int32 nIndex, bool bInclEnd) const
|
||||||
|
{
|
||||||
|
return ((nIndex >= nStart) && (bInclEnd ? (nIndex <= nEnd) : (nIndex < nEnd)));
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetStart(sal_Int32 n) { nStart = n; }
|
||||||
|
sal_Int32 GetStart() const { return nStart; }
|
||||||
|
sal_Int32& GetStart() { return nStart; }
|
||||||
|
|
||||||
|
void SetEnd(sal_Int32 n) { nEnd = n; }
|
||||||
|
sal_Int32 GetEnd() const { return nEnd; }
|
||||||
|
sal_Int32& GetEnd() { return nEnd; }
|
||||||
|
|
||||||
|
void SetStartPortion(sal_Int32 n) { nStartPortion = n; }
|
||||||
|
sal_Int32 GetStartPortion() const { return nStartPortion; }
|
||||||
|
sal_Int32& GetStartPortion() { return nStartPortion; }
|
||||||
|
|
||||||
|
void SetEndPortion(sal_Int32 n) { nEndPortion = n; }
|
||||||
|
sal_Int32 GetEndPortion() const { return nEndPortion; }
|
||||||
|
sal_Int32& GetEndPortion() { return nEndPortion; }
|
||||||
|
|
||||||
|
void SetHeight(sal_uInt16 nH, sal_uInt16 nTxtH = 0);
|
||||||
|
sal_uInt16 GetHeight() const { return nHeight; }
|
||||||
|
sal_uInt16 GetTxtHeight() const { return nTxtHeight; }
|
||||||
|
|
||||||
|
void SetTextWidth(sal_Int32 n) { nTxtWidth = n; }
|
||||||
|
sal_Int32 GetTextWidth() const { return nTxtWidth; }
|
||||||
|
|
||||||
|
void SetMaxAscent(sal_uInt16 n) { nMaxAscent = n; }
|
||||||
|
sal_uInt16 GetMaxAscent() const { return nMaxAscent; }
|
||||||
|
|
||||||
|
void SetHangingPunctuation(bool b) { bHangingPunctuation = b; }
|
||||||
|
bool IsHangingPunctuation() const { return bHangingPunctuation; }
|
||||||
|
|
||||||
|
sal_Int32 GetLen() const { return nEnd - nStart; }
|
||||||
|
|
||||||
|
sal_Int32 GetStartPosX() const { return nStartPosX; }
|
||||||
|
void SetStartPosX(sal_Int32 start);
|
||||||
|
Size CalcTextSize(ParaPortion& rParaPortion);
|
||||||
|
|
||||||
|
bool IsInvalid() const { return bInvalid; }
|
||||||
|
bool IsValid() const { return !bInvalid; }
|
||||||
|
void SetInvalid() { bInvalid = true; }
|
||||||
|
void SetValid() { bInvalid = false; }
|
||||||
|
|
||||||
|
bool IsEmpty() const { return nEnd <= nStart; }
|
||||||
|
|
||||||
|
CharPosArrayType& GetCharPosArray() { return aPositions; }
|
||||||
|
const CharPosArrayType& GetCharPosArray() const { return aPositions; }
|
||||||
|
|
||||||
|
std::vector<sal_Bool>& GetKashidaArray() { return aKashidaPositions; }
|
||||||
|
const std::vector<sal_Bool>& GetKashidaArray() const { return aKashidaPositions; }
|
||||||
|
|
||||||
|
EditLine* Clone() const;
|
||||||
|
|
||||||
|
EditLine& operator=(const EditLine& rLine);
|
||||||
|
friend bool operator==(const EditLine& r1, const EditLine& r2);
|
||||||
|
};
|
||||||
|
|
||||||
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
@@ -33,6 +33,7 @@
|
|||||||
#include "TextPortion.hxx"
|
#include "TextPortion.hxx"
|
||||||
#include "ItemList.hxx"
|
#include "ItemList.hxx"
|
||||||
#include "ContentNode.hxx"
|
#include "ContentNode.hxx"
|
||||||
|
#include "EditLine.hxx"
|
||||||
|
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
@@ -158,97 +159,6 @@ public:
|
|||||||
sal_Int32 GetPos(const TextPortion* p) const;
|
sal_Int32 GetPos(const TextPortion* p) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ParaPortion;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class EditLine
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
typedef std::vector<sal_Int32> CharPosArrayType;
|
|
||||||
|
|
||||||
private:
|
|
||||||
CharPosArrayType aPositions;
|
|
||||||
std::vector<sal_Bool> aKashidaPositions;
|
|
||||||
sal_Int32 nTxtWidth;
|
|
||||||
sal_Int32 nStartPosX;
|
|
||||||
sal_Int32 nStart; // could be replaced by nStartPortion
|
|
||||||
sal_Int32 nEnd; // could be replaced by nEndPortion
|
|
||||||
sal_Int32 nStartPortion;
|
|
||||||
sal_Int32 nEndPortion;
|
|
||||||
sal_uInt16 nHeight; // Total height of the line
|
|
||||||
sal_uInt16 nTxtHeight; // Pure Text height
|
|
||||||
sal_uInt16 nMaxAscent;
|
|
||||||
bool bHangingPunctuation:1;
|
|
||||||
bool bInvalid:1; // for skillful formatting
|
|
||||||
|
|
||||||
public:
|
|
||||||
EditLine();
|
|
||||||
EditLine( const EditLine& );
|
|
||||||
~EditLine();
|
|
||||||
|
|
||||||
bool IsIn( sal_Int32 nIndex ) const
|
|
||||||
{ return ( (nIndex >= nStart ) && ( nIndex < nEnd ) ); }
|
|
||||||
|
|
||||||
bool IsIn( sal_Int32 nIndex, bool bInclEnd ) const
|
|
||||||
{ return ( ( nIndex >= nStart ) && ( bInclEnd ? ( nIndex <= nEnd ) : ( nIndex < nEnd ) ) ); }
|
|
||||||
|
|
||||||
void SetStart( sal_Int32 n ) { nStart = n; }
|
|
||||||
sal_Int32 GetStart() const { return nStart; }
|
|
||||||
sal_Int32& GetStart() { return nStart; }
|
|
||||||
|
|
||||||
void SetEnd( sal_Int32 n ) { nEnd = n; }
|
|
||||||
sal_Int32 GetEnd() const { return nEnd; }
|
|
||||||
sal_Int32& GetEnd() { return nEnd; }
|
|
||||||
|
|
||||||
void SetStartPortion( sal_Int32 n ) { nStartPortion = n; }
|
|
||||||
sal_Int32 GetStartPortion() const { return nStartPortion; }
|
|
||||||
sal_Int32& GetStartPortion() { return nStartPortion; }
|
|
||||||
|
|
||||||
void SetEndPortion( sal_Int32 n ) { nEndPortion = n; }
|
|
||||||
sal_Int32 GetEndPortion() const { return nEndPortion; }
|
|
||||||
sal_Int32& GetEndPortion() { return nEndPortion; }
|
|
||||||
|
|
||||||
void SetHeight( sal_uInt16 nH, sal_uInt16 nTxtH = 0 );
|
|
||||||
sal_uInt16 GetHeight() const { return nHeight; }
|
|
||||||
sal_uInt16 GetTxtHeight() const { return nTxtHeight; }
|
|
||||||
|
|
||||||
void SetTextWidth( sal_Int32 n ) { nTxtWidth = n; }
|
|
||||||
sal_Int32 GetTextWidth() const { return nTxtWidth; }
|
|
||||||
|
|
||||||
void SetMaxAscent( sal_uInt16 n ) { nMaxAscent = n; }
|
|
||||||
sal_uInt16 GetMaxAscent() const { return nMaxAscent; }
|
|
||||||
|
|
||||||
void SetHangingPunctuation( bool b ) { bHangingPunctuation = b; }
|
|
||||||
bool IsHangingPunctuation() const { return bHangingPunctuation; }
|
|
||||||
|
|
||||||
sal_Int32 GetLen() const { return nEnd - nStart; }
|
|
||||||
|
|
||||||
sal_Int32 GetStartPosX() const { return nStartPosX; }
|
|
||||||
void SetStartPosX( sal_Int32 start );
|
|
||||||
Size CalcTextSize( ParaPortion& rParaPortion );
|
|
||||||
|
|
||||||
bool IsInvalid() const { return bInvalid; }
|
|
||||||
bool IsValid() const { return !bInvalid; }
|
|
||||||
void SetInvalid() { bInvalid = true; }
|
|
||||||
void SetValid() { bInvalid = false; }
|
|
||||||
|
|
||||||
bool IsEmpty() const { return nEnd <= nStart; }
|
|
||||||
|
|
||||||
CharPosArrayType& GetCharPosArray() { return aPositions;}
|
|
||||||
const CharPosArrayType& GetCharPosArray() const { return aPositions;}
|
|
||||||
|
|
||||||
std::vector<sal_Bool>& GetKashidaArray() { return aKashidaPositions; }
|
|
||||||
const std::vector<sal_Bool>& GetKashidaArray() const { return aKashidaPositions; }
|
|
||||||
|
|
||||||
EditLine* Clone() const;
|
|
||||||
|
|
||||||
EditLine& operator = ( const EditLine& rLine );
|
|
||||||
friend bool operator == ( const EditLine& r1, const EditLine& r2 );
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class EditLineList
|
class EditLineList
|
||||||
{
|
{
|
||||||
typedef std::vector<std::unique_ptr<EditLine> > LinesType;
|
typedef std::vector<std::unique_ptr<EditLine> > LinesType;
|
||||||
|
Reference in New Issue
Block a user