Hi,
I have submitted a patch for review:
https://gerrit.libreoffice.org/2473
To pull it, you can do:
git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/73/2473/1
some refinements on label configurations in writer
Change-Id: I94ad02972b0fae1327f72a41373f34962452b8ef
---
M extras/source/labels/labels.xml
M sw/source/ui/envelp/labelcfg.cxx
M sw/source/ui/envelp/labfmt.cxx
M sw/source/ui/envelp/labfmt.hrc
M sw/source/ui/envelp/labfmt.src
M sw/source/ui/inc/labelcfg.hxx
6 files changed, 155 insertions(+), 164 deletions(-)
diff --git a/extras/source/labels/labels.xml b/extras/source/labels/labels.xml
index a9f81ba..8ed02b9 100644
--- a/extras/source/labels/labels.xml
+++ b/extras/source/labels/labels.xml
@@ -651,7 +651,7 @@
<measure>S;4064;2117;3810;2117;467;1090;5;13;21000;29700</measure>
</label>
<label id="L125">
- <name>J8654 Miini Address</name>
+ <name>J8654 Mini Address</name>
<measure>S;4826;2540;4572;2540;975;2143;4;10;21000;29700</measure>
</label>
<label id="L126">
@@ -1199,7 +1199,7 @@
<measure>S;4064;2117;3810;2117;467;1090;5;13;21000;29700</measure>
</label>
<label id="L262">
- <name>L7652 Miini Address</name>
+ <name>L7652 Mini Address</name>
<measure>S;4826;1693;4572;1693;975;1299;4;16;21000;29700</measure>
</label>
<label id="L263">
@@ -1207,7 +1207,7 @@
<measure>S;4572;1693;2200;1270;2542;4902;4;12;21000;29700</measure>
</label>
<label id="L264">
- <name>L7654 Miini Address</name>
+ <name>L7654 Mini Address</name>
<measure>S;4826;2540;4572;2540;975;2143;4;10;21000;29700</measure>
</label>
<label id="L265">
diff --git a/sw/source/ui/envelp/labelcfg.cxx b/sw/source/ui/envelp/labelcfg.cxx
index 28d4074..785eff6 100644
--- a/sw/source/ui/envelp/labelcfg.cxx
+++ b/sw/source/ui/envelp/labelcfg.cxx
@@ -59,6 +59,18 @@
return sTmp;
}
+static Sequence<OUString> lcl_CreatePropertyNames(const OUString& rPrefix)
+{
+ Sequence<OUString> aProperties(2);
+ OUString* pProperties = aProperties.getArray();
+ for(sal_Int32 nProp = 0; nProp < 2; nProp++)
+ pProperties[nProp] = rPrefix;
+
+ pProperties[ 0] += "Name";
+ pProperties[ 1] += "Measure";
+ return aProperties;
+}
+
SwLabelConfig::SwLabelConfig() :
ConfigItem("Office.Labels/Manufacturer")
{
@@ -72,6 +84,7 @@
OUString sName;
OUString sMeasure;
+ // fill m_aLabels and m_aManufacturers with the predefined labels
res = reader.nextItem(
xmlreader::XmlReader::TEXT_NONE, &name, &nsId);
assert(res == xmlreader::XmlReader::RESULT_BEGIN &&
@@ -105,7 +118,10 @@
xmlreader::Span(RTL_CONSTASCII_STRINGPARAM("measure")));
// Ending label mark
lcl_assertEndingItem(reader);
- m_aLabels[sManufacturer][sName] = sMeasure;
+ if ( m_aLabels.find( sManufacturer ) == m_aLabels.end() )
+ m_aManufacturers.push_back( sManufacturer );
+ m_aLabels[sManufacturer][sName].m_aMeasure = sMeasure;
+ m_aLabels[sManufacturer][sName].m_bPredefined = true;
}
// Get next manufacturer or end
res = reader.nextItem(
@@ -115,7 +131,35 @@
xmlreader::XmlReader::TEXT_NONE, &name, &nsId);
assert(res == xmlreader::XmlReader::RESULT_DONE);
- FillManufacturers();
+ // add to m_aLabels and m_aManufacturers the custom labels
+ const Sequence<rtl::OUString>& rMan = GetNodeNames( OUString() );
+ const rtl::OUString* pMan = rMan.getConstArray();
+ for ( sal_Int32 nMan = 0; nMan < rMan.getLength(); nMan++ )
+ {
+ sManufacturer = pMan[nMan];
+ const Sequence<OUString> aLabels = GetNodeNames( sManufacturer );
+ const OUString* pLabels = aLabels.getConstArray();
+ for( sal_Int32 nLabel = 0; nLabel < aLabels.getLength(); nLabel++ )
+ {
+ OUString sPrefix( sManufacturer );
+ sPrefix += "/";
+ sPrefix += pLabels[nLabel];
+ sPrefix += "/";
+ Sequence<OUString> aPropNames = lcl_CreatePropertyNames( sPrefix );
+ Sequence<Any> aValues = GetProperties( aPropNames );
+ const Any* pValues = aValues.getConstArray();
+ if (aValues.getLength() >= 1)
+ if(pValues[0].hasValue())
+ pValues[0] >>= sName;
+ if (aValues.getLength() >= 2)
+ if(pValues[1].hasValue())
+ pValues[1] >>= sMeasure;
+ if ( m_aLabels.find( sManufacturer ) == m_aLabels.end() )
+ m_aManufacturers.push_back( sManufacturer );
+ m_aLabels[sManufacturer][sName].m_aMeasure = sMeasure;
+ m_aLabels[sManufacturer][sName].m_bPredefined = false;
+ }
+ }
}
SwLabelConfig::~SwLabelConfig()
@@ -127,32 +171,6 @@
void SwLabelConfig::Notify( const ::com::sun::star::uno::Sequence< rtl::OUString >& ) {}
-void SwLabelConfig::FillManufacturers()
-{
- m_aManufacturers.clear();
- for (std::map< OUString, std::map<OUString, OUString> >::iterator it =
- m_aLabels.begin(); it != m_aLabels.end(); ++it)
- m_aManufacturers.push_back( it->first );
-
- const com::sun::star::uno::Sequence<rtl::OUString>& rMan = GetNodeNames(OUString());
- const rtl::OUString* pMan = rMan.getConstArray();
- for(sal_Int32 nMan = 0; nMan < rMan.getLength(); nMan++)
- if (m_aLabels.find( pMan[nMan] ) == m_aLabels.end())
- m_aManufacturers.push_back( pMan[nMan] );
-}
-
-static Sequence<OUString> lcl_CreatePropertyNames(const OUString& rPrefix)
-{
- Sequence<OUString> aProperties(2);
- OUString* pProperties = aProperties.getArray();
- for(sal_Int32 nProp = 0; nProp < 2; nProp++)
- pProperties[nProp] = rPrefix;
-
- pProperties[ 0] += "Name";
- pProperties[ 1] += "Measure";
- return aProperties;
-}
-
static SwLabRec* lcl_CreateSwLabRec(const OUString& rType, const OUString& rMeasure, const
OUString& rManufacturer)
{
SwLabRec* pNewRec = new SwLabRec;
@@ -161,7 +179,7 @@
pNewRec->lPHeight = 0;
pNewRec->aType = rType;
//all values are contained as colon-separated 1/100 mm values
- //except for the continuous flag ('C'/'S')
+ //except for the continuous flag ('C'/'S') and nCols, nRows (sal_Int32)
String sMeasure(rMeasure);
sal_uInt16 nTokenCount = comphelper::string::getTokenCount(sMeasure, ';');
for(sal_uInt16 i = 0; i < nTokenCount; i++)
@@ -183,7 +201,7 @@
case 10 : pNewRec->lPHeight = MM100_TO_TWIP(nVal); break;
}
}
- // lines added for compatibility with custom label defintions saved before patch 44516
+ // lines added for compatibility with custom label definitions saved before patch fdo#44516
if (pNewRec->lPWidth == 0 || pNewRec->lPHeight == 0)
{
// old style definition (no paper dimensions), calculate probable values
@@ -194,7 +212,7 @@
}
static Sequence<PropertyValue> lcl_CreateProperties(
- Sequence<OUString>& rPropNames, const SwLabRec& rRec)
+ Sequence<OUString>& rPropNames, OUString& rMeasure, const SwLabRec& rRec)
{
const OUString* pNames = rPropNames.getConstArray();
Sequence<PropertyValue> aRet(rPropNames.getLength());
@@ -209,19 +227,19 @@
case 0: pValues[nProp].Value <<= OUString(rRec.aType); break;
case 1:
{
- OUString sTmp;
- sTmp += rRec.bCont ? OUString("C") : OUString("S"); sTmp += sColon;
- sTmp += OUString::valueOf(TWIP_TO_MM100(rRec.lHDist) ); sTmp += sColon;
- sTmp += OUString::valueOf(TWIP_TO_MM100(rRec.lVDist)); sTmp += sColon;
- sTmp += OUString::valueOf(TWIP_TO_MM100(rRec.lWidth) ); sTmp += sColon;
- sTmp += OUString::valueOf(TWIP_TO_MM100(rRec.lHeight) ); sTmp += sColon;
- sTmp += OUString::valueOf(TWIP_TO_MM100(rRec.lLeft) ); sTmp += sColon;
- sTmp += OUString::valueOf(TWIP_TO_MM100(rRec.lUpper) ); sTmp += sColon;
- sTmp += OUString::valueOf(rRec.nCols ); sTmp += sColon;
- sTmp += OUString::valueOf(rRec.nRows ); sTmp += sColon;
- sTmp += OUString::valueOf(TWIP_TO_MM100(rRec.lPWidth) ); sTmp += sColon;
- sTmp += OUString::valueOf(TWIP_TO_MM100(rRec.lPHeight) );
- pValues[nProp].Value <<= sTmp;
+ rMeasure = "";
+ rMeasure += rRec.bCont ? OUString( "C" ) : OUString( "S" ); rMeasure +=
sColon;
+ rMeasure += OUString::valueOf( TWIP_TO_MM100( rRec.lHDist ) ); rMeasure +=
sColon;
+ rMeasure += OUString::valueOf( TWIP_TO_MM100( rRec.lVDist ) ); rMeasure +=
sColon;
+ rMeasure += OUString::valueOf( TWIP_TO_MM100( rRec.lWidth ) ); rMeasure +=
sColon;
+ rMeasure += OUString::valueOf( TWIP_TO_MM100( rRec.lHeight ) ); rMeasure +=
sColon;
+ rMeasure += OUString::valueOf( TWIP_TO_MM100( rRec.lLeft ) ); rMeasure +=
sColon;
+ rMeasure += OUString::valueOf( TWIP_TO_MM100( rRec.lUpper ) ); rMeasure +=
sColon;
+ rMeasure += OUString::valueOf( rRec.nCols ); rMeasure +=
sColon;
+ rMeasure += OUString::valueOf( rRec.nRows ); rMeasure +=
sColon;
+ rMeasure += OUString::valueOf( TWIP_TO_MM100( rRec.lPWidth ) ); rMeasure +=
sColon;
+ rMeasure += OUString::valueOf( TWIP_TO_MM100( rRec.lPHeight ) );
+ pValues[nProp].Value <<= rMeasure;
}
break;
}
@@ -229,80 +247,21 @@
return aRet;
}
+// function fills SwLabDlg with label definitions for manufacturer rManufacturer
void SwLabelConfig::FillLabels(const OUString& rManufacturer, SwLabRecs& rLabArr)
{
OUString sManufacturer(wrapConfigurationElementName(rManufacturer));
- const Sequence<OUString> aLabels = GetNodeNames(sManufacturer);
- const OUString* pLabels = aLabels.getConstArray();
- for(sal_Int32 nLabel = 0; nLabel < aLabels.getLength(); nLabel++)
- {
- OUString sPrefix(sManufacturer);
- sPrefix += "/";
- sPrefix += pLabels[nLabel];
- sPrefix += "/";
- Sequence<OUString> aPropNames = lcl_CreatePropertyNames(sPrefix);
- Sequence<Any> aValues = GetProperties(aPropNames);
- const Any* pValues = aValues.getConstArray();
- OUString sType;
- OUString sMeasure;
- if (aValues.getLength() >= 1)
- if(pValues[0].hasValue())
- pValues[0] >>= sType;
- if (aValues.getLength() >= 2)
- if(pValues[1].hasValue())
- pValues[1] >>= sMeasure;
- // Remove default value if we have one from configuration
- if(m_aLabels.find(rManufacturer) != m_aLabels.end())
- m_aLabels[rManufacturer].erase(sType);
- rLabArr.push_back( lcl_CreateSwLabRec(sType, sMeasure, rManufacturer) );
- }
- // Add default labels
if (m_aLabels.find(rManufacturer) == m_aLabels.end())
return;
- for (std::map<OUString, OUString>::iterator it =
- m_aLabels[rManufacturer].begin();
+ for (std::map<OUString, SwLabelMeasure>::iterator it = m_aLabels[rManufacturer].begin();
it != m_aLabels[rManufacturer].end(); ++it)
- rLabArr.push_back( lcl_CreateSwLabRec(it->first, it->second, rManufacturer) );
+ rLabArr.push_back( lcl_CreateSwLabRec(it->first, it->second.m_aMeasure, rManufacturer) );
}
sal_Bool SwLabelConfig::HasLabel(const rtl::OUString& rManufacturer, const rtl::OUString& rType)
{
- if (m_aLabels.find(rManufacturer) != m_aLabels.end())
- if (m_aLabels[rManufacturer].find(rType) != m_aLabels[rManufacturer].end())
- return true;
-
- bool bFound = false;
- for (size_t nNode = 0; nNode < m_aManufacturers.size() && !bFound; nNode++)
- {
- if (m_aManufacturers[nNode] == rManufacturer)
- bFound = true;
- }
- if(bFound)
- {
- OUString sManufacturer(wrapConfigurationElementName(rManufacturer));
- const Sequence<OUString> aLabels = GetNodeNames(sManufacturer);
- const OUString* pLabels = aLabels.getConstArray();
- for(sal_Int32 nLabel = 0; nLabel < aLabels.getLength(); nLabel++)
- {
- OUString sPrefix(sManufacturer);
- sPrefix += "/";
- sPrefix += pLabels[nLabel];
- sPrefix += "/";
- Sequence<OUString> aProperties(1);
- aProperties.getArray()[0] = sPrefix;
- aProperties.getArray()[0] += "Name";
- Sequence<Any> aValues = GetProperties(aProperties);
- const Any* pValues = aValues.getConstArray();
- if(pValues[0].hasValue())
- {
- OUString sTmp;
- pValues[0] >>= sTmp;
- if(rType == sTmp)
- return sal_True;
- }
- }
- }
- return sal_False;
+ return ( ( m_aLabels.find(rManufacturer) != m_aLabels.end() ) &&
+ ( m_aLabels[rManufacturer].find(rType) != m_aLabels[rManufacturer].end() ) );
}
static bool lcl_Exists(const OUString& rNode, const Sequence<OUString>& rLabels)
@@ -314,75 +273,85 @@
return false;
}
-void SwLabelConfig::SaveLabel( const rtl::OUString& rManufacturer,
- const rtl::OUString& rType, const SwLabRec& rRec)
+// label is always saved as a custom label
+// predefined labels can NOT be overwritten by custom labels with same manufacturer/name
+void SwLabelConfig::SaveLabel( const rtl::OUString& rManufacturer,
+ const rtl::OUString& rType, const SwLabRec& rRec )
{
- bool bFound = false;
- for (size_t nNode = 0; nNode < m_aManufacturers.size() && !bFound; nNode++)
+ OUString sFoundNode;
+ bool bManufacturerNodeFound;
+ if ( m_aLabels.find( rManufacturer ) == m_aLabels.end() ||
+ GetNodeNames( rManufacturer ).getLength() == 0 )
{
- if (m_aManufacturers[nNode] == rManufacturer)
- bFound = true;
- }
- if(!bFound)
- {
- if(!AddNode(OUString(), rManufacturer))
+ bManufacturerNodeFound = false;
+ // manufacturer node does not exist, add (and also to m_aManufacturers)
+ if ( !AddNode( OUString(), rManufacturer ) )
{
OSL_FAIL("New configuration node could not be created");
return ;
}
- else
- {
- FillManufacturers();
- }
+ m_aManufacturers.push_back( rManufacturer );
}
+ else
+ bManufacturerNodeFound = true;
- OUString sManufacturer(wrapConfigurationElementName(rManufacturer));
- const Sequence<OUString> aLabels = GetNodeNames(sManufacturer);
- const OUString* pLabels = aLabels.getConstArray();
- OUString sFoundNode;
- for(sal_Int32 nLabel = 0; nLabel < aLabels.getLength(); nLabel++)
+ if ( !bManufacturerNodeFound ||
+ m_aLabels[rManufacturer].find( rType ) == m_aLabels[rManufacturer].end() )
{
- OUString sPrefix(sManufacturer);
- sPrefix += "/";
- sPrefix += pLabels[nLabel];
- sPrefix += "/";
- Sequence<OUString> aProperties(1);
- aProperties.getArray()[0] = sPrefix;
- aProperties.getArray()[0] += "Name";
- Sequence<Any> aValues = GetProperties(aProperties);
- const Any* pValues = aValues.getConstArray();
- if(pValues[0].hasValue())
- {
- OUString sTmp;
- pValues[0] >>= sTmp;
- if(rType == sTmp)
- {
- sFoundNode = pLabels[nLabel];
- break;
- }
- }
- }
- // if not found - generate a unique node name
- if(sFoundNode.isEmpty())
- {
+ // type does not yet exist, add to config
+ const Sequence<OUString> aLabels = GetNodeNames( rManufacturer );
sal_Int32 nIndex = aLabels.getLength();
- OUString sPrefix("Label");
+ OUString sPrefix( "Label" );
sFoundNode = sPrefix;
- sFoundNode += OUString::valueOf(nIndex);
- while(lcl_Exists(sFoundNode, aLabels))
+ sFoundNode += OUString::valueOf( nIndex );
+ while ( lcl_Exists( sFoundNode, aLabels ) )
{
sFoundNode = sPrefix;
sFoundNode += OUString::valueOf(nIndex++);
}
}
- OUString sPrefix(wrapConfigurationElementName(rManufacturer));
+ else
+ {
+ // get the appropiate node
+ OUString sManufacturer( wrapConfigurationElementName( rManufacturer ) );
+ const Sequence<OUString> aLabels = GetNodeNames( sManufacturer );
+ const OUString* pLabels = aLabels.getConstArray();
+ for (sal_Int32 nLabel = 0; nLabel < aLabels.getLength(); nLabel++)
+ {
+ OUString sPrefix( sManufacturer );
+ sPrefix += "/";
+ sPrefix += pLabels[nLabel];
+ sPrefix += "/";
+ Sequence<OUString> aProperties(1);
+ aProperties.getArray()[0] = sPrefix;
+ aProperties.getArray()[0] += "Name";
+ Sequence<Any> aValues = GetProperties( aProperties );
+ const Any* pValues = aValues.getConstArray();
+ if ( pValues[0].hasValue() )
+ {
+ OUString sTmp;
+ pValues[0] >>= sTmp;
+ if ( rType == sTmp )
+ {
+ sFoundNode = pLabels[nLabel];
+ break;
+ }
+ }
+ }
+ }
+
+ OUString sPrefix( wrapConfigurationElementName( rManufacturer ) );
sPrefix += "/";
sPrefix += sFoundNode;
sPrefix += "/";
- Sequence<OUString> aPropNames = lcl_CreatePropertyNames(sPrefix);
- Sequence<PropertyValue> aPropValues = lcl_CreateProperties(aPropNames, rRec);
- SetSetProperties(wrapConfigurationElementName(rManufacturer), aPropValues);
+ Sequence<OUString> aPropNames = lcl_CreatePropertyNames( sPrefix );
+ OUString sMeasure;
+ Sequence<PropertyValue> aPropValues = lcl_CreateProperties( aPropNames, sMeasure, rRec );
+ SetSetProperties( wrapConfigurationElementName( rManufacturer ), aPropValues );
+ //update m_aLabels
+ m_aLabels[rManufacturer][rType].m_aMeasure = sMeasure;
+ m_aLabels[rManufacturer][rType].m_bPredefined = false;
}
diff --git a/sw/source/ui/envelp/labfmt.cxx b/sw/source/ui/envelp/labfmt.cxx
index 1b30056..23a4453 100644
--- a/sw/source/ui/envelp/labfmt.cxx
+++ b/sw/source/ui/envelp/labfmt.cxx
@@ -617,7 +617,9 @@
SwLabelConfig& rCfg = pLabPage->GetParentSwLabDlg()->GetLabelsConfig();
const std::vector<OUString>& rMan = rCfg.GetManufacturers();
for (sal_uInt16 i = 0; i < rMan.size(); i++)
+ {
aMakeCB.InsertEntry(rMan[i]);
+ }
}
IMPL_LINK_NOARG(SwSaveLabelDlg, OkHdl)
@@ -627,6 +629,12 @@
String sType(aTypeED.GetText());
if(rCfg.HasLabel(sMake, sType))
{
+ if ( rCfg.IsPredefinedLabel(sMake, sType) )
+ {
+ SAL_WARN( "IMPL_LINK_NOARG(SwSaveLabelDlg, OkHdl)", "label is predefined and cannot be
overwritten" );
+ WarningBox( this, SW_RES( WB_PREDEFINED_LABEL ) ).Execute();
+ return 0;
+ }
String sTmp(aQueryMB.GetMessText());
String sQuery(sTmp);
sQuery.SearchAndReplace(rtl::OUString("%1"), sMake);
diff --git a/sw/source/ui/envelp/labfmt.hrc b/sw/source/ui/envelp/labfmt.hrc
index dd7804b..49c238b 100644
--- a/sw/source/ui/envelp/labfmt.hrc
+++ b/sw/source/ui/envelp/labfmt.hrc
@@ -71,13 +71,14 @@
#define STR_ROWS (RC_LABFMT_BEGIN + 8)
#define STR_PWIDTH (RC_LABFMT_BEGIN + 9)
#define STR_PHEIGHT (RC_LABFMT_BEGIN + 10)
+#define WB_PREDEFINED_LABEL (RC_LABFMT_BEGIN + 10)
// overflow check ********************************************************
-#define LABFMT_ACT_END STR_PHEIGHT
+#define LABFMT_ACT_END WB_PREDEFINED_LABEL
#if LABFMT_ACT_END > RC_LABFMT_END
-#error Resource-Ueberlauf in #file, #line
+#error Resource overflow in #file, #line
#endif
#endif
diff --git a/sw/source/ui/envelp/labfmt.src b/sw/source/ui/envelp/labfmt.src
index 8bb7bbe..4b83f69 100644
--- a/sw/source/ui/envelp/labfmt.src
+++ b/sw/source/ui/envelp/labfmt.src
@@ -302,6 +302,12 @@
{
Text [ en-US ] = "Page Height" ;
};
+WarningBox WB_PREDEFINED_LABEL
+{
+ BUTTONS = WB_OK;
+ DEFBUTTON = WB_DEF_OK;
+ Message [ en-US ] = "Predefined labels cannot be overwritten, use another name." ;
+};
ModalDialog DLG_SAVE_LABEL
{
HelpID = HID_SAVE_LABEL_DLG ;
diff --git a/sw/source/ui/inc/labelcfg.hxx b/sw/source/ui/inc/labelcfg.hxx
index 80135fe..216bef4 100644
--- a/sw/source/ui/inc/labelcfg.hxx
+++ b/sw/source/ui/inc/labelcfg.hxx
@@ -28,10 +28,16 @@
class SwLabRecs;
class SwLabRec;
+struct SwLabelMeasure
+{
+ OUString m_aMeasure; // string contains the label dimensions
+ bool m_bPredefined; // used to distinguish predefined from user-defined labels
+};
+
class SW_DLLPUBLIC SwLabelConfig : public utl::ConfigItem
{
std::vector<rtl::OUString> m_aManufacturers;
- std::map< OUString, std::map<OUString, OUString> > m_aLabels;
+ std::map< OUString, std::map<OUString, SwLabelMeasure> > m_aLabels;
public:
SwLabelConfig();
@@ -40,11 +46,12 @@
virtual void Commit();
virtual void Notify( const ::com::sun::star::uno::Sequence< rtl::OUString >& aPropertyNames );
- void FillManufacturers();
void FillLabels(const rtl::OUString& rManufacturer, SwLabRecs& rLabArr);
const std::vector<rtl::OUString>& GetManufacturers() const {return m_aManufacturers;}
sal_Bool HasLabel(const rtl::OUString& rManufacturer, const rtl::OUString& rType);
+ bool IsPredefinedLabel(const rtl::OUString& rManufacturer, const rtl::OUString& rType)
+ { return m_aLabels[rManufacturer][rType].m_bPredefined; };
void SaveLabel(const rtl::OUString& rManufacturer, const rtl::OUString& rType,
const SwLabRec& rRec);
};
--
To view, visit https://gerrit.libreoffice.org/2473
To unsubscribe, visit https://gerrit.libreoffice.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I94ad02972b0fae1327f72a41373f34962452b8ef
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: master
Gerrit-Owner: Winfried Donkers <osc@dci-electronics.nl>
Context
- [PATCH] some refinements on label configurations in writer · Winfried Donkers (via Code Review)
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.