[Libreoffice-commits] core.git: sd/source
Tomaž Vajngerl
tomaz.vajngerl at collabora.co.uk
Wed Nov 1 10:13:40 UTC 2017
sd/source/ui/view/drviews2.cxx | 160 ++++++++++++++++++++++-------------------
1 file changed, 87 insertions(+), 73 deletions(-)
New commits:
commit f0306eee4d3ef8322c511a0bc642f0d907a2e83d
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
Date: Sun Oct 29 11:26:47 2017 +0900
TSCP: extract some functions, simplify code
Change-Id: I993b272b0976e857506041794f5c00183e5854a9
Reviewed-on: https://gerrit.libreoffice.org/44017
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
diff --git a/sd/source/ui/view/drviews2.cxx b/sd/source/ui/view/drviews2.cxx
index f041d80e92ac..167ed9e56a6e 100644
--- a/sd/source/ui/view/drviews2.cxx
+++ b/sd/source/ui/view/drviews2.cxx
@@ -34,6 +34,7 @@
#include <com/sun/star/beans/PropertyAttribute.hpp>
#include <comphelper/processfactory.hxx>
+#include <comphelper/scopeguard.hxx>
#include <editeng/editdata.hxx>
#include <editeng/eeitem.hxx>
@@ -258,17 +259,90 @@ bool hasCustomPropertyField(std::vector<editeng::Section> const & aSections, OUS
return false;
}
+OUString getWeightString(SfxItemSet const & rItemSet)
+{
+ OUString sWeightString = "NORMAL";
+
+ if (const SfxPoolItem* pItem = rItemSet.GetItem(EE_CHAR_WEIGHT, false))
+ {
+ const SvxWeightItem* pWeightItem = dynamic_cast<const SvxWeightItem*>(pItem);
+ if (pWeightItem && pWeightItem->GetWeight() == WEIGHT_BOLD)
+ sWeightString = "BOLD";
+ }
+ return sWeightString;
+}
+
} // end anonymous namespace
-class ClassificationCollector
+class ClassificationCommon
{
-private:
+protected:
sd::DrawViewShell& m_rDrawViewShell;
+
+public:
+ ClassificationCommon(sd::DrawViewShell & rDrawViewShell)
+ : m_rDrawViewShell(rDrawViewShell)
+ {}
+};
+
+class ClassificationCollector : public ClassificationCommon
+{
+private:
std::vector<svx::ClassificationResult> m_aResults;
+ void iterateSectionsAndCollect(std::vector<editeng::Section> const & rSections, EditTextObject const & rEditText)
+ {
+ OUString sPolicy = SfxClassificationHelper::policyTypeToString(SfxClassificationHelper::getPolicyType());
+ uno::Reference<document::XDocumentProperties> xDocumentProperties = SfxObjectShell::Current()->getDocProperties();
+ uno::Reference<beans::XPropertyContainer> xPropertyContainer = xDocumentProperties->getUserDefinedProperties();
+
+ sal_Int32 nCurrentParagraph = -1;
+ OUString sBlank;
+
+ for (editeng::Section const & rSection : rSections)
+ {
+ // Insert new paragraph if needed
+ while (nCurrentParagraph < rSection.mnParagraph)
+ {
+ nCurrentParagraph++;
+ // Get Weight of current paragraph
+ OUString sWeightProperty = getWeightString(rEditText.GetParaAttribs(nCurrentParagraph));
+ // Insert new paragraph into collection
+ m_aResults.push_back({ svx::ClassificationType::PARAGRAPH, sWeightProperty, sBlank });
+ }
+
+ const SvxFieldItem* pFieldItem = findField(rSection);
+ if (pFieldItem)
+ {
+ const auto* pCustomPropertyField = dynamic_cast<const editeng::CustomPropertyField*>(pFieldItem->GetField());
+ OUString aKey = pCustomPropertyField->GetKey();
+ if (aKey.startsWith(sPolicy + "Marking:Text:"))
+ {
+ OUString aValue = lcl_getProperty(xPropertyContainer, aKey);
+ m_aResults.push_back({ svx::ClassificationType::TEXT, aValue, sBlank });
+ }
+ else if (aKey.startsWith(sPolicy + "BusinessAuthorizationCategory:Name"))
+ {
+ OUString aValue = lcl_getProperty(xPropertyContainer, aKey);
+ m_aResults.push_back({ svx::ClassificationType::CATEGORY, aValue, sBlank });
+ }
+ else if (aKey.startsWith(sPolicy + "Extension:Marking"))
+ {
+ OUString aValue = lcl_getProperty(xPropertyContainer, aKey);
+ m_aResults.push_back({ svx::ClassificationType::MARKING, aValue, sBlank });
+ }
+ else if (aKey.startsWith(sPolicy + "Extension:IntellectualPropertyPart"))
+ {
+ OUString aValue = lcl_getProperty(xPropertyContainer, aKey);
+ m_aResults.push_back({ svx::ClassificationType::INTELLECTUAL_PROPERTY_PART, aValue, sBlank });
+ }
+ }
+ }
+ }
+
public:
ClassificationCollector(sd::DrawViewShell & rDrawViewShell)
- : m_rDrawViewShell(rDrawViewShell)
+ : ClassificationCommon(rDrawViewShell)
{}
std::vector<svx::ClassificationResult> getResults()
@@ -281,11 +355,6 @@ public:
OUString sPolicy = SfxClassificationHelper::policyTypeToString(SfxClassificationHelper::getPolicyType());
OUString sKey = sPolicy + "BusinessAuthorizationCategory:Name";
- uno::Reference<document::XDocumentProperties> xDocumentProperties = SfxObjectShell::Current()->getDocProperties();
-
- // Properties
- uno::Reference<beans::XPropertyContainer> xPropertyContainer = xDocumentProperties->getUserDefinedProperties();
-
// Set to MASTER mode
EditMode eOldMode = m_rDrawViewShell.GetEditMode();
if (eOldMode != EditMode::MasterPage)
@@ -314,62 +383,7 @@ public:
if (hasCustomPropertyField(aSections, sKey))
{
bFound = true;
- const OUString sBlank("");
- sal_Int32 nCurrentParagraph = -1;
-
- for (editeng::Section const & rSection : aSections)
- {
- // Insert new paragraph if needed
- while (nCurrentParagraph < rSection.mnParagraph)
- {
- nCurrentParagraph++;
-
- // Get Weight of current paragraph
- FontWeight eFontWeight = WEIGHT_NORMAL;
- SfxItemSet aItemSet(rEditText.GetParaAttribs(nCurrentParagraph));
- if (const SfxPoolItem* pItem = aItemSet.GetItem(EE_CHAR_WEIGHT, false))
- {
- const SvxWeightItem* pWeightItem = dynamic_cast<const SvxWeightItem*>(pItem);
- if (pWeightItem && pWeightItem->GetWeight() == WEIGHT_BOLD)
- eFontWeight = WEIGHT_BOLD;
- }
-
- // Font weight to string
- OUString sWeightProperty = "NORMAL";
- if (eFontWeight == WEIGHT_BOLD)
- sWeightProperty = "BOLD";
-
- // Insert into collection
- m_aResults.push_back({ svx::ClassificationType::PARAGRAPH, sWeightProperty, sBlank });
- }
-
- const SvxFieldItem* pFieldItem = findField(rSection);
- const editeng::CustomPropertyField* pCustomPropertyField = pFieldItem ? dynamic_cast<const editeng::CustomPropertyField*>(pFieldItem->GetField()) : nullptr;
- if (pCustomPropertyField)
- {
- OUString aKey = pCustomPropertyField->GetKey();
- if (aKey.startsWith(sPolicy + "Marking:Text:"))
- {
- OUString aValue = lcl_getProperty(xPropertyContainer, aKey);
- m_aResults.push_back({ svx::ClassificationType::TEXT, aValue, sBlank });
- }
- else if (aKey.startsWith(sPolicy + "BusinessAuthorizationCategory:Name"))
- {
- OUString aValue = lcl_getProperty(xPropertyContainer, aKey);
- m_aResults.push_back({ svx::ClassificationType::CATEGORY, aValue, sBlank });
- }
- else if (aKey.startsWith(sPolicy + "Extension:Marking"))
- {
- OUString aValue = lcl_getProperty(xPropertyContainer, aKey);
- m_aResults.push_back({ svx::ClassificationType::MARKING, aValue, sBlank });
- }
- else if (aKey.startsWith(sPolicy + "Extension:IntellectualPropertyPart"))
- {
- OUString aValue = lcl_getProperty(xPropertyContainer, aKey);
- m_aResults.push_back({ svx::ClassificationType::INTELLECTUAL_PROPERTY_PART, aValue, sBlank });
- }
- }
- }
+ iterateSectionsAndCollect(aSections, rEditText);
}
}
}
@@ -383,11 +397,9 @@ public:
}
};
-class ClassificationInserter
+class ClassificationInserter : public ClassificationCommon
{
private:
- sd::DrawViewShell& m_rDrawViewShell;
-
/// Delete the previous existing classification object(s) - if they exists
void deleteExistingObjects()
{
@@ -424,7 +436,7 @@ private:
public:
ClassificationInserter(sd::DrawViewShell & rDrawViewShell)
- : m_rDrawViewShell(rDrawViewShell)
+ : ClassificationCommon(rDrawViewShell)
{}
@@ -435,14 +447,19 @@ public:
if (eOldMode != EditMode::MasterPage)
m_rDrawViewShell.ChangeEditMode(EditMode::MasterPage, false);
+ // Scoped guard to revert the mode
+ comphelper::ScopeGuard const aGuard([this, eOldMode] () {
+ m_rDrawViewShell.ChangeEditMode(eOldMode, false);
+ });
+
// Delete the previous existing object - if exists
deleteExistingObjects();
+ // Document properties
uno::Reference<document::XDocumentProperties> xDocumentProperties = SfxObjectShell::Current()->getDocProperties();
-
- // Clear properties
uno::Reference<beans::XPropertyContainer> xPropertyContainer = xDocumentProperties->getUserDefinedProperties();
+ // Clear properties
lcl_removeAllProperties(xPropertyContainer);
SfxClassificationHelper aHelper(xDocumentProperties);
@@ -545,9 +562,6 @@ public:
m_rDrawViewShell.GetDrawView()->InsertObjectAtView(pRectObj, *m_rDrawViewShell.GetDrawView()->GetSdrPageView());
pOutliner->Init(eOutlinerMode);
- // Revert edit mode
- m_rDrawViewShell.ChangeEditMode(eOldMode, false);
-
return true;
}
};
More information about the Libreoffice-commits
mailing list