tdf#102261: introduce editeng paragraph tab stop default distance
Adds mnDefaultDistance to SvxTabStopItem that if defined will set a paragraph wide tab stop default distance and override the document wide setting. Also makes editeng consider mnDefaultDistance while getting tab stop default distance. Change-Id: I0fa098f874d6b9c91ddbaa2634224ff55cafcc95 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/148058 Tested-by: Jenkins Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
This commit is contained in:
committed by
Miklos Vajna
parent
910226f291
commit
cced51a1ed
@@ -857,6 +857,13 @@ void ConvertItem( std::unique_ptr<SfxPoolItem>& rPoolItem, MapUnit eSourceUnit,
|
|||||||
assert(dynamic_cast<const SvxTabStopItem *>(rPoolItem.get()) != nullptr);
|
assert(dynamic_cast<const SvxTabStopItem *>(rPoolItem.get()) != nullptr);
|
||||||
SvxTabStopItem& rItem = static_cast<SvxTabStopItem&>(*rPoolItem);
|
SvxTabStopItem& rItem = static_cast<SvxTabStopItem&>(*rPoolItem);
|
||||||
SvxTabStopItem* pNewItem(new SvxTabStopItem(EE_PARA_TABS));
|
SvxTabStopItem* pNewItem(new SvxTabStopItem(EE_PARA_TABS));
|
||||||
|
|
||||||
|
if (sal_Int32 nDefTabDistance = rItem.GetDefaultDistance())
|
||||||
|
{
|
||||||
|
pNewItem->SetDefaultDistance(
|
||||||
|
OutputDevice::LogicToLogic(nDefTabDistance, eSourceUnit, eDestUnit));
|
||||||
|
}
|
||||||
|
|
||||||
for ( sal_uInt16 i = 0; i < rItem.Count(); i++ )
|
for ( sal_uInt16 i = 0; i < rItem.Count(); i++ )
|
||||||
{
|
{
|
||||||
const SvxTabStop& rTab = rItem[i];
|
const SvxTabStop& rTab = rItem[i];
|
||||||
@@ -1821,6 +1828,10 @@ SvxTabStop ContentAttribs::FindTabStop( sal_Int32 nCurPos, sal_uInt16 nDefTab )
|
|||||||
return rTab;
|
return rTab;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if there's a default tab size defined for this item use that instead
|
||||||
|
if (rTabs.GetDefaultDistance())
|
||||||
|
nDefTab = rTabs.GetDefaultDistance();
|
||||||
|
|
||||||
// Determine DefTab ...
|
// Determine DefTab ...
|
||||||
SvxTabStop aTabStop;
|
SvxTabStop aTabStop;
|
||||||
const sal_Int32 x = nCurPos / nDefTab + 1;
|
const sal_Int32 x = nCurPos / nDefTab + 1;
|
||||||
|
@@ -821,6 +821,15 @@ sal_uInt16 SvxTabStopItem::GetPos( const sal_Int32 nPos ) const
|
|||||||
return it != maTabStops.end() ? it - maTabStops.begin() : SVX_TAB_NOTFOUND;
|
return it != maTabStops.end() ? it - maTabStops.begin() : SVX_TAB_NOTFOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SvxTabStopItem::SetDefaultDistance(sal_Int32 nDefaultDistance)
|
||||||
|
{
|
||||||
|
mnDefaultDistance = nDefaultDistance;
|
||||||
|
}
|
||||||
|
|
||||||
|
sal_Int32 SvxTabStopItem::GetDefaultDistance() const
|
||||||
|
{
|
||||||
|
return mnDefaultDistance;
|
||||||
|
}
|
||||||
|
|
||||||
bool SvxTabStopItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
|
bool SvxTabStopItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
|
||||||
{
|
{
|
||||||
@@ -859,6 +868,11 @@ bool SvxTabStopItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
|
|||||||
rVal <<= static_cast<sal_Int32>(bConvert ? convertTwipToMm100(rTab.GetTabPos()) : rTab.GetTabPos());
|
rVal <<= static_cast<sal_Int32>(bConvert ? convertTwipToMm100(rTab.GetTabPos()) : rTab.GetTabPos());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case MID_TABSTOP_DEFAULT_DISTANCE:
|
||||||
|
{
|
||||||
|
rVal <<= static_cast<sal_Int32>(bConvert ? convertTwipToMm100(mnDefaultDistance) : mnDefaultDistance);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -956,6 +970,18 @@ bool SvxTabStopItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
|
|||||||
Insert( aNewTab );
|
Insert( aNewTab );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case MID_TABSTOP_DEFAULT_DISTANCE:
|
||||||
|
{
|
||||||
|
sal_Int32 nNewDefaultDistance = 0;
|
||||||
|
if (!(rVal >>= nNewDefaultDistance))
|
||||||
|
return false;
|
||||||
|
if (bConvert)
|
||||||
|
nNewDefaultDistance = o3tl::toTwips(nNewDefaultDistance, o3tl::Length::mm100);
|
||||||
|
if (nNewDefaultDistance <= 0)
|
||||||
|
return false;
|
||||||
|
mnDefaultDistance = nNewDefaultDistance;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -967,6 +993,9 @@ bool SvxTabStopItem::operator==( const SfxPoolItem& rAttr ) const
|
|||||||
|
|
||||||
const SvxTabStopItem& rTSI = static_cast<const SvxTabStopItem&>(rAttr);
|
const SvxTabStopItem& rTSI = static_cast<const SvxTabStopItem&>(rAttr);
|
||||||
|
|
||||||
|
if ( mnDefaultDistance != rTSI.GetDefaultDistance() )
|
||||||
|
return false;
|
||||||
|
|
||||||
if ( Count() != rTSI.Count() )
|
if ( Count() != rTSI.Count() )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@@ -990,6 +1019,7 @@ bool SvxTabStopItem::GetPresentation
|
|||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
rText.clear();
|
rText.clear();
|
||||||
|
// TODO also consider mnDefaultTabDistance here
|
||||||
|
|
||||||
bool bComma = false;
|
bool bComma = false;
|
||||||
|
|
||||||
@@ -1038,6 +1068,8 @@ void SvxTabStopItem::Insert( const SvxTabStopItem* pTabs )
|
|||||||
void SvxTabStopItem::dumpAsXml(xmlTextWriterPtr pWriter) const
|
void SvxTabStopItem::dumpAsXml(xmlTextWriterPtr pWriter) const
|
||||||
{
|
{
|
||||||
(void)xmlTextWriterStartElement(pWriter, BAD_CAST("SvxTabStopItem"));
|
(void)xmlTextWriterStartElement(pWriter, BAD_CAST("SvxTabStopItem"));
|
||||||
|
(void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST("mnDefaultDistance"),
|
||||||
|
BAD_CAST(OString::number(mnDefaultDistance).getStr()));
|
||||||
for (const auto& rTabStop : maTabStops)
|
for (const auto& rTabStop : maTabStops)
|
||||||
rTabStop.dumpAsXml(pWriter);
|
rTabStop.dumpAsXml(pWriter);
|
||||||
(void)xmlTextWriterEndElement(pWriter);
|
(void)xmlTextWriterEndElement(pWriter);
|
||||||
|
@@ -40,6 +40,7 @@
|
|||||||
// SvxTabStop
|
// SvxTabStop
|
||||||
#define MID_TABSTOPS 0
|
#define MID_TABSTOPS 0
|
||||||
#define MID_STD_TAB 1
|
#define MID_STD_TAB 1
|
||||||
|
#define MID_TABSTOP_DEFAULT_DISTANCE 2
|
||||||
|
|
||||||
//SvxHyphenZoneItem
|
//SvxHyphenZoneItem
|
||||||
#define MID_IS_HYPHEN 0
|
#define MID_IS_HYPHEN 0
|
||||||
|
@@ -92,6 +92,7 @@ typedef o3tl::sorted_vector<SvxTabStop> SvxTabStopArr;
|
|||||||
class EDITENG_DLLPUBLIC SvxTabStopItem final : public SfxPoolItem
|
class EDITENG_DLLPUBLIC SvxTabStopItem final : public SfxPoolItem
|
||||||
{
|
{
|
||||||
SvxTabStopArr maTabStops;
|
SvxTabStopArr maTabStops;
|
||||||
|
sal_Int32 mnDefaultDistance = 0;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static SfxPoolItem* CreateDefault();
|
static SfxPoolItem* CreateDefault();
|
||||||
@@ -107,6 +108,8 @@ public:
|
|||||||
|
|
||||||
// Returns index of the tab at nPos, or TAB_NOTFOUND
|
// Returns index of the tab at nPos, or TAB_NOTFOUND
|
||||||
sal_uInt16 GetPos( const sal_Int32 nPos ) const;
|
sal_uInt16 GetPos( const sal_Int32 nPos ) const;
|
||||||
|
void SetDefaultDistance(sal_Int32 nDefaultDistancenDefTabSize);
|
||||||
|
sal_Int32 GetDefaultDistance() const;
|
||||||
|
|
||||||
// unprivatized:
|
// unprivatized:
|
||||||
sal_uInt16 Count() const { return maTabStops.size(); }
|
sal_uInt16 Count() const { return maTabStops.size(); }
|
||||||
|
@@ -295,6 +295,7 @@ inline constexpr OUStringLiteral UNO_NAME_EDIT_PARA_LMARGIN = u"ParaLeftMargin";
|
|||||||
inline constexpr OUStringLiteral UNO_NAME_EDIT_PARA_LINESPACING = u"ParaLineSpacing";
|
inline constexpr OUStringLiteral UNO_NAME_EDIT_PARA_LINESPACING = u"ParaLineSpacing";
|
||||||
inline constexpr OUStringLiteral UNO_NAME_EDIT_PARA_RMARGIN = u"ParaRightMargin";
|
inline constexpr OUStringLiteral UNO_NAME_EDIT_PARA_RMARGIN = u"ParaRightMargin";
|
||||||
inline constexpr OUStringLiteral UNO_NAME_EDIT_PARA_TAPSTOPS = u"ParaTabStops";
|
inline constexpr OUStringLiteral UNO_NAME_EDIT_PARA_TAPSTOPS = u"ParaTabStops";
|
||||||
|
inline constexpr OUStringLiteral UNO_NAME_EDIT_PARA_TABSTOP_DEFAULT_DISTANCE = u"ParaTabStopDefaultDistance";
|
||||||
inline constexpr OUStringLiteral UNO_NAME_EDIT_PARA_TMARGIN = u"ParaTopMargin";
|
inline constexpr OUStringLiteral UNO_NAME_EDIT_PARA_TMARGIN = u"ParaTopMargin";
|
||||||
inline constexpr OUStringLiteral UNO_NAME_EDIT_PARA_IS_HYPHEN = u"ParaIsHyphenation";
|
inline constexpr OUStringLiteral UNO_NAME_EDIT_PARA_IS_HYPHEN = u"ParaIsHyphenation";
|
||||||
inline constexpr OUStringLiteral UNO_NAME_EDIT_PARA_IS_HANGING_PUNCTUATION = u"ParaIsHangingPunctuation";
|
inline constexpr OUStringLiteral UNO_NAME_EDIT_PARA_IS_HANGING_PUNCTUATION = u"ParaIsHangingPunctuation";
|
||||||
|
@@ -147,6 +147,7 @@ struct SfxItemPropertyMapEntry;
|
|||||||
{ UNO_NAME_EDIT_PARA_LINESPACING, EE_PARA_SBL, cppu::UnoType<css::style::LineSpacing>::get(), 0, CONVERT_TWIPS}, \
|
{ UNO_NAME_EDIT_PARA_LINESPACING, EE_PARA_SBL, cppu::UnoType<css::style::LineSpacing>::get(), 0, CONVERT_TWIPS}, \
|
||||||
{ UNO_NAME_EDIT_PARA_RMARGIN, EE_PARA_LRSPACE, ::cppu::UnoType<sal_Int32>::get(), 0, MID_R_MARGIN, PropertyMoreFlags::METRIC_ITEM }, \
|
{ UNO_NAME_EDIT_PARA_RMARGIN, EE_PARA_LRSPACE, ::cppu::UnoType<sal_Int32>::get(), 0, MID_R_MARGIN, PropertyMoreFlags::METRIC_ITEM }, \
|
||||||
{ UNO_NAME_EDIT_PARA_TAPSTOPS, EE_PARA_TABS, cppu::UnoType<css::uno::Sequence< css::style::TabStop >>::get(), 0, 0 }, \
|
{ UNO_NAME_EDIT_PARA_TAPSTOPS, EE_PARA_TABS, cppu::UnoType<css::uno::Sequence< css::style::TabStop >>::get(), 0, 0 }, \
|
||||||
|
{ UNO_NAME_EDIT_PARA_TABSTOP_DEFAULT_DISTANCE, EE_PARA_TABS, ::cppu::UnoType<sal_Int32>::get(), 0, MID_TABSTOP_DEFAULT_DISTANCE }, \
|
||||||
{ UNO_NAME_EDIT_PARA_TMARGIN, EE_PARA_ULSPACE, ::cppu::UnoType<sal_Int32>::get(), 0, MID_UP_MARGIN, PropertyMoreFlags::METRIC_ITEM },\
|
{ UNO_NAME_EDIT_PARA_TMARGIN, EE_PARA_ULSPACE, ::cppu::UnoType<sal_Int32>::get(), 0, MID_UP_MARGIN, PropertyMoreFlags::METRIC_ITEM },\
|
||||||
{ UNO_NAME_EDIT_PARA_FIRST_LINE_INDENT, EE_PARA_LRSPACE, ::cppu::UnoType<sal_Int32>::get(), 0, MID_FIRST_LINE_INDENT, PropertyMoreFlags::METRIC_ITEM}, \
|
{ UNO_NAME_EDIT_PARA_FIRST_LINE_INDENT, EE_PARA_LRSPACE, ::cppu::UnoType<sal_Int32>::get(), 0, MID_FIRST_LINE_INDENT, PropertyMoreFlags::METRIC_ITEM}, \
|
||||||
{ UNO_NAME_EDIT_PARA_IS_HANGING_PUNCTUATION,EE_PARA_HANGINGPUNCTUATION, cppu::UnoType<bool>::get(), 0 ,0 }, \
|
{ UNO_NAME_EDIT_PARA_IS_HANGING_PUNCTUATION,EE_PARA_HANGINGPUNCTUATION, cppu::UnoType<bool>::get(), 0 ,0 }, \
|
||||||
|
Reference in New Issue
Block a user