[Libreoffice-commits] core.git: 2 commits - include/sfx2 sfx2/classification sfx2/source svx/source sw/source

Ashod Nakashian ashod.nakashian at collabora.co.uk
Sun Oct 22 05:13:00 UTC 2017


 include/sfx2/classificationhelper.hxx      |    4 ++++
 sfx2/classification/baf.xsd                |    1 +
 sfx2/classification/example.xml            |    8 ++++----
 sfx2/source/view/classificationhelper.cxx  |   24 +++++++++++++++++++++++-
 svx/source/dialog/ClassificationDialog.cxx |    6 +++---
 sw/source/core/edit/edfcol.cxx             |   26 +++++++++++++-------------
 6 files changed, 48 insertions(+), 21 deletions(-)

New commits:
commit db61ca5b3abbd2df433bcab516f8fa2cfbc01944
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date:   Wed Oct 18 13:09:59 2017 +0400

    TSCP: support abbreviated classification names
    
    Change-Id: Ib7edc491d2f8a69c48f1515ba29d79e09c88c3b7
    Reviewed-on: https://gerrit.libreoffice.org/43627
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>

diff --git a/include/sfx2/classificationhelper.hxx b/include/sfx2/classificationhelper.hxx
index e83eadfd05e9..036951fa0ab1 100644
--- a/include/sfx2/classificationhelper.hxx
+++ b/include/sfx2/classificationhelper.hxx
@@ -63,6 +63,10 @@ public:
     const OUString& GetBACName(SfxClassificationPolicyType eType);
     /// Return all possible valid category names, based on the policy.
     std::vector<OUString> GetBACNames();
+    /// Get the currently selected category abbreviation for eType. Returns full name if no abbreviation defined.
+    const OUString& GetAbbreviatedBACName(SfxClassificationPolicyType eType);
+    /// Return all possible valid abbreviated category names, based on the policy.
+    std::vector<OUString> GetAbbreviatedBACNames();
     /// Setting this sets all the other properties, based on the policy.
     void SetBACName(const OUString& rName, SfxClassificationPolicyType eType);
     /// If GetImpactScale() and GetImpactLevel*() will return something meaningful.
diff --git a/sfx2/classification/baf.xsd b/sfx2/classification/baf.xsd
index a0bae6cc9ff1..abf003b38624 100644
--- a/sfx2/classification/baf.xsd
+++ b/sfx2/classification/baf.xsd
@@ -68,6 +68,7 @@
       </xs:sequence>
       <xs:attribute name="Identifier" type="xs:anyURI" use="required"/>
       <xs:attribute name="Name" type="xs:string" use="optional"/>
+      <xs:attribute name="loextAbbreviatedName" type="xs:string" use="optional"/>
     </xs:complexType>
   </xs:element>
   <!-- Impact Level -->
diff --git a/sfx2/classification/example.xml b/sfx2/classification/example.xml
index 82098031ff91..a5065e3d959a 100644
--- a/sfx2/classification/example.xml
+++ b/sfx2/classification/example.xml
@@ -9,7 +9,7 @@
     </baf:AdministrativeData>
     <baf:Included>
         <!-- Translators: the Name attribute in this string can be localized -->
-        <baf:BusinessAuthorizationCategory Identifier="urn:example:tscp:1:non-business" Name="Non-Business">
+        <baf:BusinessAuthorizationCategory Identifier="urn:example:tscp:1:non-business" Name="Non-Business" loextAbbreviatedName="NB">
             <baf:LabelingRules/>
             <baf:ImpactLevel>
                 <baf:Scale>UK-Cabinet</baf:Scale>
@@ -17,7 +17,7 @@
             </baf:ImpactLevel>
         </baf:BusinessAuthorizationCategory>
         <!-- Translators: the Name attribute in this string can be localized -->
-        <baf:BusinessAuthorizationCategory Identifier="urn:example:tscp:1:general-business" Name="General Business">
+        <baf:BusinessAuthorizationCategory Identifier="urn:example:tscp:1:general-business" Name="General Business" loextAbbreviatedName="GB">
             <baf:LabelingRules>
                 <baf:VisualMarkingPart>
                     <baf:Identifier>Document: Header</baf:Identifier>
@@ -31,7 +31,7 @@
             </baf:ImpactLevel>
         </baf:BusinessAuthorizationCategory>
         <!-- Translators: the Name attribute in this string can be localized -->
-        <baf:BusinessAuthorizationCategory Identifier="urn:example:tscp:1:confidential" Name="Confidential">
+        <baf:BusinessAuthorizationCategory Identifier="urn:example:tscp:1:confidential" Name="Confidential" loextAbbreviatedName="Conf">
             <baf:LabelingRules>
                 <baf:VisualMarkingPart>
                     <baf:Identifier>Document: Header</baf:Identifier>
@@ -55,7 +55,7 @@
             </baf:ImpactLevel>
         </baf:BusinessAuthorizationCategory>
         <!-- Translators: the Name attribute in this string can be localized -->
-        <baf:BusinessAuthorizationCategory Identifier="urn:example:tscp:1:internal-only" Name="Internal Only">
+        <baf:BusinessAuthorizationCategory Identifier="urn:example:tscp:1:internal-only" Name="Internal Only" loextAbbreviatedName="IO">
             <baf:LabelingRules>
                 <baf:VisualMarkingPart>
                     <baf:Identifier>Document: Header</baf:Identifier>
diff --git a/sfx2/source/view/classificationhelper.cxx b/sfx2/source/view/classificationhelper.cxx
index 3378ed0df239..77932f4fb260 100644
--- a/sfx2/source/view/classificationhelper.cxx
+++ b/sfx2/source/view/classificationhelper.cxx
@@ -92,6 +92,7 @@ class SfxClassificationCategory
 public:
     /// PROP_BACNAME() is stored separately for easier lookup.
     OUString m_aName;
+    OUString m_aAbbreviatedName;
     std::map<OUString, OUString> m_aLabels;
 };
 
@@ -170,7 +171,8 @@ void SAL_CALL SfxClassificationParser::startElement(const OUString& rName, const
     }
     else if (rName == "baf:BusinessAuthorizationCategory")
     {
-        OUString aName = xAttribs->getValueByName("Name");
+        const OUString aName = xAttribs->getValueByName("Name");
+        const OUString aAbbreviatedName = xAttribs->getValueByName("loextAbbreviatedName");
         if (!m_pCategory && !aName.isEmpty())
         {
             OUString aIdentifier = xAttribs->getValueByName("Identifier");
@@ -179,6 +181,8 @@ void SAL_CALL SfxClassificationParser::startElement(const OUString& rName, const
             m_aCategories.emplace_back(SfxClassificationCategory());
             SfxClassificationCategory& rCategory = m_aCategories.back();
             rCategory.m_aName = aName;
+            // Set the abbreviated name, if any, otherwise fallback on the full name.
+            rCategory.m_aAbbreviatedName = !aAbbreviatedName.isEmpty() ? aAbbreviatedName : aName;
             rCategory.m_aLabels["PolicyAuthority:Name"] = m_aPolicyAuthorityName;
             rCategory.m_aLabels["Policy:Name"] = m_aPolicyName;
             rCategory.m_aLabels["BusinessAuthorization:Identifier"] = m_aProgramID;
@@ -587,6 +591,11 @@ const OUString& SfxClassificationHelper::GetBACName(SfxClassificationPolicyType
     return m_pImpl->m_aCategory[eType].m_aName;
 }
 
+const OUString& SfxClassificationHelper::GetAbbreviatedBACName(SfxClassificationPolicyType eType)
+{
+    return m_pImpl->m_aCategory[eType].m_aAbbreviatedName;
+}
+
 bool SfxClassificationHelper::HasImpactLevel()
 {
     auto itCategory = m_pImpl->m_aCategory.find(SfxClassificationPolicyType::IntellectualProperty);
@@ -754,6 +763,19 @@ std::vector<OUString> SfxClassificationHelper::GetBACNames()
     return aRet;
 }
 
+std::vector<OUString> SfxClassificationHelper::GetAbbreviatedBACNames()
+{
+    if (m_pImpl->m_aCategories.empty())
+        m_pImpl->parsePolicy();
+
+    std::vector<OUString> aRet;
+    std::transform(m_pImpl->m_aCategories.begin(), m_pImpl->m_aCategories.end(), std::back_inserter(aRet), [](const SfxClassificationCategory& rCategory)
+    {
+        return rCategory.m_aAbbreviatedName;
+    });
+    return aRet;
+}
+
 void SfxClassificationHelper::SetBACName(const OUString& rName, SfxClassificationPolicyType eType)
 {
     if (m_pImpl->m_aCategories.empty())
diff --git a/svx/source/dialog/ClassificationDialog.cxx b/svx/source/dialog/ClassificationDialog.cxx
index 45e83af10ae7..c0d0e0691a6c 100644
--- a/svx/source/dialog/ClassificationDialog.cxx
+++ b/svx/source/dialog/ClassificationDialog.cxx
@@ -178,7 +178,7 @@ std::vector<ClassificationResult> ClassificationDialog::getResult()
 
 IMPL_LINK(ClassificationDialog, SelectClassificationHdl, ListBox&, rBox, void)
 {
-    sal_Int32 nSelected = rBox.GetSelectedEntryPos();
+    const sal_Int32 nSelected = rBox.GetSelectedEntryPos();
     if (nSelected >= 0)
     {
         std::unique_ptr<EditTextObject> pEditText(m_pEditWindow->pEdEngine->CreateTextObject());
@@ -198,7 +198,7 @@ IMPL_LINK(ClassificationDialog, SelectClassificationHdl, ListBox&, rBox, void)
             }
         }
 
-        OUString aString = maHelper.GetBACNames()[nSelected];
+        const OUString aString = maHelper.GetAbbreviatedBACNames()[nSelected];
         insertField(ClassificationType::CATEGORY, aString);
 
         m_pInternationalClassificationListBox->SelectEntryPos(nSelected);
@@ -228,7 +228,7 @@ IMPL_LINK(ClassificationDialog, SelectMarkingHdl, ListBox&, rBox, void)
             }
         }
 
-        OUString aString = maHelper.GetMarkings()[nSelected];
+        const OUString aString = maHelper.GetMarkings()[nSelected];
         insertField(ClassificationType::MARKING, aString);
     }
 }
commit e4c912f6b0855d3f0cf713cb4e4ecdb00a28e263
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date:   Tue Oct 17 04:16:46 2017 -0400

    TSCP: wrap paragraph classification in parens
    
    Change-Id: Ieb0236d7cde2dfde8758040605c7d83d1b905e7b
    Reviewed-on: https://gerrit.libreoffice.org/43626
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>

diff --git a/sw/source/core/edit/edfcol.cxx b/sw/source/core/edit/edfcol.cxx
index 5cd5dd70a77c..ca5252cddf81 100644
--- a/sw/source/core/edit/edfcol.cxx
+++ b/sw/source/core/edit/edfcol.cxx
@@ -888,45 +888,45 @@ void SwEditShell::ApplyParagraphClassification(std::vector<svx::ClassificationRe
     // need to insert in reverse order.
     std::reverse(aResults.begin(), aResults.end());
     sal_Int32 nTextNumber = 1;
-    for (svx::ClassificationResult const & rResult : aResults)
+    for (size_t nIndex = 0; nIndex < aResults.size(); ++nIndex)
     {
+        const svx::ClassificationResult& rResult = aResults[nIndex];
+        const bool isLast = nIndex == 0;
+        const bool isFirst = nIndex == aResults.size() - 1;
+        OUString sKey;
         switch(rResult.meType)
         {
             case svx::ClassificationType::TEXT:
             {
-                const OUString sKey = sPolicy + "Marking:Text:" + OUString::number(nTextNumber++);
-                uno::Reference<text::XTextField> xTextField = lcl_InsertParagraphClassification(xModel, xParent);
-                lcl_UpdateParagraphClassificationField(GetDoc(), xModel, xTextField, sKey, rResult.msString);
+                sKey = sPolicy + "Marking:Text:" + OUString::number(nTextNumber++);
             }
             break;
 
             case svx::ClassificationType::CATEGORY:
             {
-                const OUString sKey = sPolicy + "BusinessAuthorizationCategory:Name";
-                uno::Reference<text::XTextField> xTextField = lcl_InsertParagraphClassification(xModel, xParent);
-                lcl_UpdateParagraphClassificationField(GetDoc(), xModel, xTextField, sKey, rResult.msString);
+                sKey = sPolicy + "BusinessAuthorizationCategory:Name";
             }
             break;
 
             case svx::ClassificationType::MARKING:
             {
-                const OUString sKey = sPolicy + "Extension:Marking";
-                uno::Reference<text::XTextField> xTextField = lcl_InsertParagraphClassification(xModel, xParent);
-                lcl_UpdateParagraphClassificationField(GetDoc(), xModel, xTextField, sKey, rResult.msString);
+                sKey = sPolicy + "Extension:Marking";
             }
             break;
 
             case svx::ClassificationType::INTELLECTUAL_PROPERTY_PART:
             {
-                const OUString sKey = sPolicy + "Extension:IntellectualPropertyPart";
-                uno::Reference<text::XTextField> xTextField = lcl_InsertParagraphClassification(xModel, xParent);
-                lcl_UpdateParagraphClassificationField(GetDoc(), xModel, xTextField, sKey, rResult.msString);
+                sKey = sPolicy + "Extension:IntellectualPropertyPart";
             }
             break;
 
             default:
             break;
         }
+
+        uno::Reference<text::XTextField> xTextField = lcl_InsertParagraphClassification(xModel, xParent);
+        const OUString text = (isFirst ? ("(" + rResult.msString) : isLast ? (rResult.msString + ")") : rResult.msString);
+        lcl_UpdateParagraphClassificationField(GetDoc(), xModel, xTextField, sKey, text);
     }
 }
 


More information about the Libreoffice-commits mailing list