22#include <com/sun/star/beans/PropertyAttribute.hpp>
23#include <com/sun/star/beans/PropertyVetoException.hpp>
24#include <com/sun/star/beans/UnknownPropertyException.hpp>
25#include <com/sun/star/beans/XPropertySet.hpp>
26#include <com/sun/star/lang/IllegalArgumentException.hpp>
27#include <com/sun/star/lang/XServiceInfo.hpp>
28#include <com/sun/star/style/VerticalAlignment.hpp>
29#include <com/sun/star/text/ColumnSeparatorStyle.hpp>
30#include <com/sun/star/text/XTextColumns.hpp>
31#include <com/sun/star/uno/Any.h>
32#include <com/sun/star/util/Color.hpp>
47 WID_TXTCOL_IS_AUTOMATIC,
48 WID_TXTCOL_AUTO_DISTANCE,
49 WID_TXTCOL_LINE_WIDTH,
50 WID_TXTCOL_LINE_COLOR,
51 WID_TXTCOL_LINE_REL_HGT,
52 WID_TXTCOL_LINE_ALIGN,
53 WID_TXTCOL_LINE_IS_ON,
54 WID_TXTCOL_LINE_STYLE,
59 css::beans::PropertyAttribute::READONLY, 0 },
62 {
u"SeparatorLineColor", WID_TXTCOL_LINE_COLOR,
66 {
u"SeparatorLineVerticalAlignment", WID_TXTCOL_LINE_ALIGN,
72class SvxXTextColumns final
73 :
public cppu::WeakImplHelper<css::beans::XPropertySet, css::text::XTextColumns,
74 css::lang::XServiceInfo>
77 SvxXTextColumns() =
default;
80 virtual sal_Int32 SAL_CALL getReferenceValue()
override;
81 virtual sal_Int16 SAL_CALL getColumnCount()
override;
82 virtual void SAL_CALL setColumnCount(sal_Int16 nColumns)
override;
83 virtual css::uno::Sequence<css::text::TextColumn> SAL_CALL getColumns()
override;
85 setColumns(
const css::uno::Sequence<css::text::TextColumn>&
Columns)
override;
88 virtual css::uno::Reference<css::beans::XPropertySetInfo>
89 SAL_CALL getPropertySetInfo()
override;
91 const css::uno::Any& aValue)
override;
92 virtual css::uno::Any SAL_CALL
getPropertyValue(
const OUString& PropertyName)
override;
93 virtual void SAL_CALL addPropertyChangeListener(
94 const OUString& aPropertyName,
95 const css::uno::Reference<css::beans::XPropertyChangeListener>& xListener)
override;
96 virtual void SAL_CALL removePropertyChangeListener(
97 const OUString& aPropertyName,
98 const css::uno::Reference<css::beans::XPropertyChangeListener>& aListener)
override;
99 virtual void SAL_CALL addVetoableChangeListener(
100 const OUString& PropertyName,
101 const css::uno::Reference<css::beans::XVetoableChangeListener>& aListener)
override;
102 virtual void SAL_CALL removeVetoableChangeListener(
103 const OUString& PropertyName,
104 const css::uno::Reference<css::beans::XVetoableChangeListener>& aListener)
override;
112 sal_Int32 m_nReference = USHRT_MAX;
113 css::uno::Sequence<css::text::TextColumn> m_aTextColumns;
114 bool m_bIsAutomaticWidth =
true;
115 sal_Int32 m_nAutoDistance = 0;
120 sal_Int32 m_nSepLineWidth = 0;
121 com::sun::star::util::Color m_nSepLineColor = 0;
122 sal_Int32 m_nSepLineHeightRelative = 100;
123 css::style::VerticalAlignment m_nSepLineVertAlign = css::style::VerticalAlignment_MIDDLE;
124 bool m_bSepLineIsOn =
false;
125 sal_Int16 m_nSepLineStyle = css::text::ColumnSeparatorStyle::NONE;
128OUString SvxXTextColumns::getImplementationName() {
return "com.sun.star.comp.svx.TextColumns"; }
130sal_Bool SvxXTextColumns::supportsService(
const OUString& rServiceName)
135css::uno::Sequence<OUString> SvxXTextColumns::getSupportedServiceNames()
137 return {
"com.sun.star.text.TextColumns" };
140sal_Int32 SvxXTextColumns::getReferenceValue()
146sal_Int16 SvxXTextColumns::getColumnCount()
149 return o3tl::narrowing<sal_Int16>(m_aTextColumns.getLength());
152void SvxXTextColumns::setColumnCount(sal_Int16 nColumns)
156 throw css::uno::RuntimeException();
157 m_bIsAutomaticWidth =
true;
158 m_aTextColumns.realloc(nColumns);
159 css::text::TextColumn* pCols = m_aTextColumns.getArray();
160 m_nReference = USHRT_MAX;
161 sal_Int32 nWidth = m_nReference / nColumns;
162 sal_Int32 nDiff = m_nReference - nWidth * nColumns;
163 sal_Int32 nDist = m_nAutoDistance / 2;
164 for (sal_Int16 i = 0;
i < nColumns;
i++)
166 pCols[
i].Width = nWidth;
167 pCols[
i].LeftMargin =
i == 0 ? 0 : nDist;
168 pCols[
i].RightMargin =
i == nColumns - 1 ? 0 : nDist;
170 pCols[nColumns - 1].Width += nDiff;
173css::uno::Sequence<css::text::TextColumn> SvxXTextColumns::getColumns()
176 return m_aTextColumns;
179void SvxXTextColumns::setColumns(
const css::uno::Sequence<css::text::TextColumn>& rColumns)
182 sal_Int32 nReferenceTemp = std::accumulate(
183 rColumns.begin(), rColumns.end(), sal_Int32(0),
184 [](
const sal_Int32 nSum,
const css::text::TextColumn& rCol) {
return nSum + rCol.Width; });
185 m_bIsAutomaticWidth =
false;
186 m_nReference = !nReferenceTemp ? USHRT_MAX : nReferenceTemp;
187 m_aTextColumns = rColumns;
190css::uno::Reference<css::beans::XPropertySetInfo> SvxXTextColumns::getPropertySetInfo()
192 return m_aPropSet.getPropertySetInfo();
195void SvxXTextColumns::setPropertyValue(
const OUString& rPropertyName,
const css::uno::Any& aValue)
199 throw css::beans::UnknownPropertyException(
"Unknown property: " + rPropertyName,
201 if (pEntry->
nFlags & css::beans::PropertyAttribute::READONLY)
202 throw css::beans::PropertyVetoException(
"Property is read-only: " + rPropertyName,
205 switch (pEntry->
nWID)
207 case WID_TXTCOL_LINE_WIDTH:
210 if (!(aValue >>= nTmp) || nTmp < 0)
211 throw css::lang::IllegalArgumentException();
212 m_nSepLineWidth = nTmp;
215 case WID_TXTCOL_LINE_COLOR:
216 if (!(aValue >>= m_nSepLineColor))
217 throw css::lang::IllegalArgumentException();
219 case WID_TXTCOL_LINE_STYLE:
220 if (!(aValue >>= m_nSepLineStyle))
221 throw css::lang::IllegalArgumentException();
223 case WID_TXTCOL_LINE_REL_HGT:
226 if (!(aValue >>= nTmp) || nTmp < 0)
227 throw css::lang::IllegalArgumentException();
228 m_nSepLineHeightRelative = nTmp;
231 case WID_TXTCOL_LINE_ALIGN:
232 if (css::style::VerticalAlignment eAlign; aValue >>= eAlign)
233 m_nSepLineVertAlign = eAlign;
234 else if (
sal_Int8 nTmp; aValue >>= nTmp)
235 m_nSepLineVertAlign =
static_cast<css::style::VerticalAlignment
>(nTmp);
237 throw css::lang::IllegalArgumentException();
239 case WID_TXTCOL_LINE_IS_ON:
240 if (!(aValue >>= m_bSepLineIsOn))
241 throw css::lang::IllegalArgumentException();
243 case WID_TXTCOL_AUTO_DISTANCE:
246 if (!(aValue >>= nTmp) || nTmp < 0 || nTmp >= m_nReference)
247 throw css::lang::IllegalArgumentException();
248 m_nAutoDistance = nTmp;
249 sal_Int32 nColumns = m_aTextColumns.getLength();
250 css::text::TextColumn* pCols = m_aTextColumns.getArray();
251 sal_Int32 nDist = m_nAutoDistance / 2;
252 for (sal_Int32 i = 0;
i < nColumns;
i++)
254 pCols[
i].LeftMargin =
i == 0 ? 0 : nDist;
255 pCols[
i].RightMargin =
i == nColumns - 1 ? 0 : nDist;
262css::uno::Any SvxXTextColumns::getPropertyValue(
const OUString& rPropertyName)
266 throw css::beans::UnknownPropertyException(
"Unknown property: " + rPropertyName,
270 switch (pEntry->
nWID)
272 case WID_TXTCOL_LINE_WIDTH:
273 aRet <<= m_nSepLineWidth;
275 case WID_TXTCOL_LINE_COLOR:
276 aRet <<= m_nSepLineColor;
278 case WID_TXTCOL_LINE_STYLE:
279 aRet <<= m_nSepLineStyle;
281 case WID_TXTCOL_LINE_REL_HGT:
282 aRet <<= m_nSepLineHeightRelative;
284 case WID_TXTCOL_LINE_ALIGN:
285 aRet <<= m_nSepLineVertAlign;
287 case WID_TXTCOL_LINE_IS_ON:
288 aRet <<= m_bSepLineIsOn;
290 case WID_TXTCOL_IS_AUTOMATIC:
291 aRet <<= m_bIsAutomaticWidth;
293 case WID_TXTCOL_AUTO_DISTANCE:
294 aRet <<= m_nAutoDistance;
300void SvxXTextColumns::addPropertyChangeListener(
302 const css::uno::Reference<css::beans::XPropertyChangeListener>& )
306void SvxXTextColumns::removePropertyChangeListener(
308 const css::uno::Reference<css::beans::XPropertyChangeListener>& )
312void SvxXTextColumns::addVetoableChangeListener(
314 const css::uno::Reference<css::beans::XVetoableChangeListener>& )
318void SvxXTextColumns::removeVetoableChangeListener(
320 const css::uno::Reference<css::beans::XVetoableChangeListener>& )
327 return getXWeak(
new SvxXTextColumns);
332 css::uno::Sequence<css::uno::Any>
const&)
334 return cppu::acquire(
new SvxXTextColumns);
css::uno::Reference< css::uno::XInterface > SvxXTextColumns_createInstance() noexcept
SVXCORE_DLLPUBLIC css::uno::XInterface * com_sun_star_comp_svx_TextColumns_get_implementation(css::uno::XComponentContext *, css::uno::Sequence< css::uno::Any > const &)
css::uno::Type const & get()
css::uno::Sequence< OUString > getSupportedServiceNames()
OUString getImplementationName()
bool CPPUHELPER_DLLPUBLIC supportsService(css::lang::XServiceInfo *implementation, rtl::OUString const &name)
VBAHELPER_DLLPUBLIC bool setPropertyValue(css::uno::Sequence< css::beans::PropertyValue > &aProp, const OUString &aName, const css::uno::Any &aValue)
bool getPropertyValue(ValueType &rValue, css::uno::Reference< css::beans::XPropertySet > const &xPropSet, OUString const &propName)
#define SVXCORE_DLLPUBLIC