summaryrefslogtreecommitdiffstats
path: root/reportdesign/source/ui/inspection/metadata.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'reportdesign/source/ui/inspection/metadata.cxx')
-rw-r--r--reportdesign/source/ui/inspection/metadata.cxx305
1 files changed, 305 insertions, 0 deletions
diff --git a/reportdesign/source/ui/inspection/metadata.cxx b/reportdesign/source/ui/inspection/metadata.cxx
new file mode 100644
index 000000000..f652fa4a4
--- /dev/null
+++ b/reportdesign/source/ui/inspection/metadata.cxx
@@ -0,0 +1,305 @@
+/* -*- 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 .
+ */
+#include <metadata.hxx>
+#include <com/sun/star/inspection/XPropertyHandler.hpp>
+#include <core_resource.hxx>
+#include <helpids.h>
+#include <strings.hrc>
+#include <strings.hxx>
+
+#include <algorithm>
+
+
+namespace rptui
+{
+
+
+ using namespace ::com::sun::star::uno;
+ using namespace ::com::sun::star;
+
+
+ //= OPropertyInfoImpl
+
+ struct OPropertyInfoImpl
+ {
+ OUString sName;
+ OUString sTranslation;
+ OString sHelpId;
+ sal_Int32 nId;
+ PropUIFlags nUIFlags;
+
+ OPropertyInfoImpl(
+ const OUString& rName,
+ sal_Int32 _nId,
+ const OUString& aTranslation,
+ const OString& _sHelpId,
+ PropUIFlags _nUIFlags);
+ };
+
+
+ OPropertyInfoImpl::OPropertyInfoImpl(const OUString& _rName, sal_Int32 _nId,
+ const OUString& aString, const OString& sHid, PropUIFlags _nUIFlags)
+ :sName(_rName)
+ ,sTranslation(aString)
+ ,sHelpId(sHid)
+ ,nId(_nId)
+ ,nUIFlags(_nUIFlags)
+ {
+ }
+
+ namespace {
+
+ // compare PropertyInfo
+ struct PropertyInfoLessByName
+ {
+ bool operator()( const OPropertyInfoImpl& _lhs, const OPropertyInfoImpl& _rhs )
+ {
+ return _lhs.sName < _rhs.sName;
+ }
+ };
+
+ }
+
+ //= OPropertyInfoService
+
+#define DEF_INFO( ident, uinameres, helpid, flags ) \
+ OPropertyInfoImpl( PROPERTY_##ident, PROPERTY_ID_##ident, \
+ RptResId( RID_STR_##uinameres ), HID_RPT_PROP_##helpid, flags )
+
+#define DEF_INFO_1( ident, uinameres, helpid, flag1 ) \
+ DEF_INFO( ident, uinameres, helpid, PropUIFlags::flag1 )
+
+#define DEF_INFO_2( ident, uinameres, helpid, flag1, flag2 ) \
+ DEF_INFO( ident, uinameres, helpid, PropUIFlags::flag1 | PropUIFlags::flag2 )
+
+ sal_uInt16 OPropertyInfoService::s_nCount = 0;
+ OPropertyInfoImpl* OPropertyInfoService::s_pPropertyInfos = nullptr;
+
+ const OPropertyInfoImpl* OPropertyInfoService::getPropertyInfo()
+ {
+ if ( s_pPropertyInfos )
+ return s_pPropertyInfos;
+
+ static OPropertyInfoImpl aPropertyInfos[] =
+ {
+ /*
+ DEF_INFO_?( propname and id, resource id, help id, flags ),
+ */
+ DEF_INFO_1( FORCENEWPAGE, FORCENEWPAGE, FORCENEWPAGE, Composeable )
+ ,DEF_INFO_1( NEWROWORCOL, NEWROWORCOL, NEWROWORCOL, Composeable )
+ ,DEF_INFO_1( KEEPTOGETHER, KEEPTOGETHER, KEEPTOGETHER, Composeable )
+ ,DEF_INFO_1( CANGROW, CANGROW, CANGROW, Composeable )
+ ,DEF_INFO_1( CANSHRINK, CANSHRINK, CANSHRINK, Composeable )
+ ,DEF_INFO_1( REPEATSECTION, REPEATSECTION, REPEATSECTION, Composeable )
+ ,DEF_INFO_1( PRINTREPEATEDVALUES, PRINTREPEATEDVALUES, PRINTREPEATEDVALUES, Composeable )
+ ,DEF_INFO_1( CONDITIONALPRINTEXPRESSION, CONDITIONALPRINTEXPRESSION, CONDITIONALPRINTEXPRESSION, Composeable )
+ ,DEF_INFO_1( STARTNEWCOLUMN, STARTNEWCOLUMN, STARTNEWCOLUMN, Composeable )
+ ,DEF_INFO_1( RESETPAGENUMBER, RESETPAGENUMBER, RESETPAGENUMBER, Composeable )
+ ,DEF_INFO_1( PRINTWHENGROUPCHANGE, PRINTWHENGROUPCHANGE, PRINTWHENGROUPCHANGE, Composeable )
+ ,DEF_INFO_1( VISIBLE, VISIBLE, VISIBLE, Composeable )
+ ,DEF_INFO_1( GROUPKEEPTOGETHER, GROUPKEEPTOGETHER, GROUPKEEPTOGETHER, Composeable )
+ ,DEF_INFO_1( PAGEHEADEROPTION, PAGEHEADEROPTION, PAGEHEADEROPTION, Composeable )
+ ,DEF_INFO_1( PAGEFOOTEROPTION, PAGEFOOTEROPTION, PAGEFOOTEROPTION, Composeable )
+ ,DEF_INFO_1( POSITIONX, POSITIONX, RPT_POSITIONX, Composeable )
+ ,DEF_INFO_1( POSITIONY, POSITIONY, RPT_POSITIONY, Composeable )
+ ,DEF_INFO_1( WIDTH, WIDTH, RPT_WIDTH, Composeable )
+ ,DEF_INFO_1( HEIGHT, HEIGHT, RPT_HEIGHT, Composeable )
+ ,DEF_INFO_1( AUTOGROW, AUTOGROW, RPT_AUTOGROW, Composeable )
+ ,DEF_INFO_1( FONT, FONT, RPT_FONT, Composeable )
+ ,DEF_INFO_1( PREEVALUATED, PREEVALUATED, PREEVALUATED, Composeable )
+ ,DEF_INFO_1( DEEPTRAVERSING, DEEPTRAVERSING, DEEPTRAVERSING, Composeable )
+ ,DEF_INFO_1( FORMULA, FORMULA, FORMULA, Composeable )
+ ,DEF_INFO_1( INITIALFORMULA, INITIALFORMULA, INITIALFORMULA, Composeable )
+ ,DEF_INFO_2( TYPE, TYPE, TYPE, Composeable,DataProperty )
+ ,DEF_INFO_2( DATAFIELD, DATAFIELD, DATAFIELD, Composeable,DataProperty )
+ ,DEF_INFO_2( FORMULALIST, FORMULALIST, FORMULALIST, Composeable,DataProperty )
+ ,DEF_INFO_2( SCOPE, SCOPE, SCOPE, Composeable,DataProperty )
+ ,DEF_INFO_1( PRESERVEIRI, PRESERVEIRI, PRESERVEIRI, Composeable )
+ ,DEF_INFO_1( BACKCOLOR, BACKCOLOR, BACKCOLOR, Composeable )
+ ,DEF_INFO_1( CONTROLBACKGROUND, BACKCOLOR, BACKCOLOR, Composeable )
+ ,DEF_INFO_1( BACKTRANSPARENT, BACKTRANSPARENT, BACKTRANSPARENT, Composeable )
+ ,DEF_INFO_1( CONTROLBACKGROUNDTRANSPARENT, CONTROLBACKGROUNDTRANSPARENT,
+ CONTROLBACKGROUNDTRANSPARENT, Composeable )
+ ,DEF_INFO_1( CHARTTYPE, CHARTTYPE, CHARTTYPE, Composeable )
+ ,DEF_INFO_1( PREVIEW_COUNT, PREVIEW_COUNT, PREVIEW_COUNT, Composeable )
+ ,DEF_INFO_2( MASTERFIELDS, MASTERFIELDS, MASTERFIELDS, Composeable,DataProperty )
+ ,DEF_INFO_2( DETAILFIELDS, DETAILFIELDS, DETAILFIELDS, Composeable,DataProperty)
+ ,DEF_INFO_1( AREA, AREA, AREA, Composeable )
+ ,DEF_INFO_2( MIMETYPE, MIMETYPE, MIMETYPE, Composeable,DataProperty )
+ ,DEF_INFO_1( PARAADJUST, PARAADJUST, PARAADJUST, Composeable )
+ ,DEF_INFO_1( VERTICALALIGN, VERTICALALIGN, VERTICALALIGN, Composeable )
+ };
+
+ s_pPropertyInfos = aPropertyInfos;
+ s_nCount = SAL_N_ELEMENTS(aPropertyInfos);
+ ::std::sort( aPropertyInfos, aPropertyInfos + SAL_N_ELEMENTS(aPropertyInfos), PropertyInfoLessByName() );
+
+ return s_pPropertyInfos;
+ }
+
+
+ sal_Int32 OPropertyInfoService::getPropertyId(const OUString& _rName)
+ {
+ const OPropertyInfoImpl* pInfo = getPropertyInfo(_rName);
+ return pInfo ? pInfo->nId : -1;
+ }
+
+
+ OUString OPropertyInfoService::getPropertyTranslation(sal_Int32 _nId)
+ {
+ const OPropertyInfoImpl* pInfo = getPropertyInfo(_nId);
+ return pInfo ? pInfo->sTranslation : OUString();
+ }
+
+
+ OString OPropertyInfoService::getPropertyHelpId(sal_Int32 _nId)
+ {
+ const OPropertyInfoImpl* pInfo = getPropertyInfo(_nId);
+ return pInfo ? pInfo->sHelpId : OString();
+ }
+
+
+ PropUIFlags OPropertyInfoService::getPropertyUIFlags(sal_Int32 _nId)
+ {
+ const OPropertyInfoImpl* pInfo = getPropertyInfo(_nId);
+ return pInfo ? pInfo->nUIFlags : PropUIFlags::NONE;
+ }
+
+
+ const OPropertyInfoImpl* OPropertyInfoService::getPropertyInfo(const OUString& _rName)
+ {
+ // initialization
+ if(!s_pPropertyInfos)
+ getPropertyInfo();
+ OPropertyInfoImpl aSearch(_rName, 0, OUString(), "", PropUIFlags::NONE);
+
+ const OPropertyInfoImpl* pPropInfo = ::std::lower_bound(
+ s_pPropertyInfos, s_pPropertyInfos + s_nCount, aSearch, PropertyInfoLessByName() );
+
+ if ( ( pPropInfo < s_pPropertyInfos + s_nCount ) && pPropInfo->sName == _rName )
+ return pPropInfo;
+
+ return nullptr;
+ }
+
+
+ const OPropertyInfoImpl* OPropertyInfoService::getPropertyInfo(sal_Int32 _nId)
+ {
+ // initialization
+ if(!s_pPropertyInfos)
+ getPropertyInfo();
+
+ // TODO: a real structure which allows quick access by name as well as by id
+ for (sal_uInt16 i = 0; i < s_nCount; i++)
+ if (s_pPropertyInfos[i].nId == _nId)
+ return &s_pPropertyInfos[i];
+
+ return nullptr;
+ }
+
+
+ bool OPropertyInfoService::isComposable( const OUString& _rPropertyName, const css::uno::Reference< css::inspection::XPropertyHandler >& _rxFormComponentHandler )
+ {
+ sal_Int32 nId = getPropertyId( _rPropertyName );
+ if ( nId != -1 )
+ {
+ PropUIFlags nFlags = getPropertyUIFlags( nId );
+ return bool( nFlags & PropUIFlags::Composeable );
+ }
+
+ return _rxFormComponentHandler->isComposable( _rPropertyName );
+ }
+
+
+ void OPropertyInfoService::getExcludeProperties(::std::vector< beans::Property >& _rExcludeProperties,const css::uno::Reference< css::inspection::XPropertyHandler >& _xFormComponentHandler)
+ {
+ const uno::Sequence< beans::Property > aProps = _xFormComponentHandler->getSupportedProperties();
+ static const OUStringLiteral pExcludeProperties[] =
+ {
+ "Enabled",
+ "Printable",
+ "WordBreak",
+ "MultiLine",
+ "Tag",
+ "HelpText",
+ "HelpURL",
+ "MaxTextLen",
+ "ReadOnly",
+ "Tabstop",
+ "TabIndex",
+ "ValueMin",
+ "ValueMax",
+ "Spin",
+ "SpinValue",
+ "SpinValueMin",
+ "SpinValueMax",
+ "DefaultSpinValue",
+ "SpinIncrement",
+ "Repeat",
+ "RepeatDelay",
+ "ControlLabel", /// TODO: has to be checked
+ "LabelControl",
+ "Title", // comment this out if you want to have title feature for charts
+ PROPERTY_MAXTEXTLEN,
+ PROPERTY_EFFECTIVEDEFAULT,
+ PROPERTY_EFFECTIVEMAX,
+ PROPERTY_EFFECTIVEMIN,
+ "HideInactiveSelection",
+ "SubmitAction",
+ "InputRequired",
+ "VerticalAlign",
+ PROPERTY_ALIGN,
+ PROPERTY_EMPTY_IS_NULL,
+ PROPERTY_FILTERPROPOSAL
+ ,PROPERTY_POSITIONX
+ ,PROPERTY_POSITIONY
+ ,PROPERTY_WIDTH
+ ,PROPERTY_HEIGHT
+ ,PROPERTY_AUTOGROW
+ ,PROPERTY_FONT
+ ,PROPERTY_LABEL
+ ,PROPERTY_LINECOLOR
+ ,PROPERTY_BORDER
+ ,PROPERTY_BORDERCOLOR
+ ,PROPERTY_BACKTRANSPARENT
+ ,PROPERTY_CONTROLBACKGROUND
+ ,PROPERTY_BACKGROUNDCOLOR
+ ,PROPERTY_CONTROLBACKGROUNDTRANSPARENT
+ ,PROPERTY_FORMULALIST
+ ,PROPERTY_SCOPE
+ ,PROPERTY_TYPE
+ ,PROPERTY_DATASOURCENAME
+ ,PROPERTY_VERTICALALIGN
+ };
+
+ for (beans::Property const & prop : aProps)
+ {
+ size_t nPos = 0;
+ for (; nPos < SAL_N_ELEMENTS(pExcludeProperties) && pExcludeProperties[nPos] != prop.Name; ++nPos )
+ ;
+ if ( nPos == SAL_N_ELEMENTS(pExcludeProperties) )
+ _rExcludeProperties.push_back(prop);
+ }
+ }
+
+
+} // namespace pcr
+
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */