sw/inc/inspectorproperties.hrc                        |    6 +
 sw/source/uibase/sidebar/WriterInspectorTextPanel.cxx |   89 +++++++++++++++---
 2 files changed, 84 insertions(+), 11 deletions(-)

New commits:
commit 6ce2eddfdc35100b8079a4584dd3945e923d66a9
Author:     Shivam Kumar Singh <shivamhere...@gmail.com>
AuthorDate: Fri Aug 7 13:36:52 2020 +0530
Commit:     Mike Kaganski <mike.kagan...@collabora.com>
CommitDate: Sun Aug 9 21:50:11 2020 +0200

    tdf#135406 - Border properties not properly listed in the Styles Inspector
    
    Several Border properties are stored as STRUCT internally.
    Added support to show them in the Inspector.
    
    Change-Id: Ida1014691ab2245eea04487ce753c23bdf0bddb9
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/100288
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>
    Tested-by: Jenkins

diff --git a/sw/inc/inspectorproperties.hrc b/sw/inc/inspectorproperties.hrc
index 7d9a272d1df2..f51521b30e9e 100644
--- a/sw/inc/inspectorproperties.hrc
+++ b/sw/inc/inspectorproperties.hrc
@@ -28,7 +28,13 @@
  --------------------------------------------------------------------*/
 
 // Format names
+#define RID_BORDER_COLOR                                    
NC_("RID_ATTRIBUTE_NAMES_MAP", "Color")
 #define RID_BORDER_DISTANCE                                 
NC_("RID_ATTRIBUTE_NAMES_MAP", "Border Distance")
+#define RID_BORDER_INNER_LINE_WIDTH                         
NC_("RID_ATTRIBUTE_NAMES_MAP", "Inner Line Width")
+#define RID_BORDER_LINE_DISTANCE                            
NC_("RID_ATTRIBUTE_NAMES_MAP", "Line Distance")
+#define RID_BORDER_LINE_STYLE                               
NC_("RID_ATTRIBUTE_NAMES_MAP", "Line Style")
+#define RID_BORDER_LINE_WIDTH                               
NC_("RID_ATTRIBUTE_NAMES_MAP", "Line Width")
+#define RID_BORDER_OUTER_LINE_WIDTH                         
NC_("RID_ATTRIBUTE_NAMES_MAP", "Outer Line Width")
 #define RID_BOTTOM_BORDER                                   
NC_("RID_ATTRIBUTE_NAMES_MAP", "Bottom Border")
 #define RID_BOTTOM_BORDER_DISTANCE                          
NC_("RID_ATTRIBUTE_NAMES_MAP", "Bottom Border Distance")
 #define RID_BREAK_TYPE                                      
NC_("RID_ATTRIBUTE_NAMES_MAP", "Break Type")
diff --git a/sw/source/uibase/sidebar/WriterInspectorTextPanel.cxx 
b/sw/source/uibase/sidebar/WriterInspectorTextPanel.cxx
index f63fdc79b8bf..7c10f757edbc 100644
--- a/sw/source/uibase/sidebar/WriterInspectorTextPanel.cxx
+++ b/sw/source/uibase/sidebar/WriterInspectorTextPanel.cxx
@@ -30,6 +30,7 @@
 #include <com/sun/star/beans/XPropertySet.hpp>
 #include <com/sun/star/beans/XPropertyState.hpp>
 #include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
+#include <com/sun/star/table/BorderLine2.hpp>
 #include <com/sun/star/lang/IllegalArgumentException.hpp>
 
 #include <unotextrange.hxx>
@@ -296,6 +297,12 @@ static OUString PropertyNametoRID(const OUString& rName)
         { "UnvisitedCharStyleName", RID_UNVISITED_CHAR_STYLE_NAME },
         { "VisitedCharStyleName", RID_VISITED_CHAR_STYLE_NAME },
         { "WritingMode", RID_WRITING_MODE },
+        { "BorderColor", RID_BORDER_COLOR },
+        { "BorderInnerLineWidth", RID_BORDER_INNER_LINE_WIDTH },
+        { "BorderLineDistance", RID_BORDER_LINE_DISTANCE },
+        { "BorderLineStyle", RID_BORDER_LINE_STYLE },
+        { "BorderLineWidth", RID_BORDER_LINE_WIDTH },
+        { "BorderOuterLineWidth", RID_BORDER_OUTER_LINE_WIDTH },
     };
 
     auto itr = aNameToRID.find(rName);
@@ -304,6 +311,69 @@ static OUString PropertyNametoRID(const OUString& rName)
     return rName;
 }
 
+static svx::sidebar::TreeNode SimplePropToTreeNode(const OUString& rName, 
const css::uno::Any& rVal)
+{
+    svx::sidebar::TreeNode aCurNode;
+    aCurNode.sNodeName = PropertyNametoRID(rName);
+    aCurNode.aValue = rVal;
+
+    return aCurNode;
+}
+
+static svx::sidebar::TreeNode BorderToTreeNode(const OUString& rName, const 
css::uno::Any& rVal)
+{
+    table::BorderLine2 aBorder;
+    rVal >>= aBorder;
+    svx::sidebar::TreeNode aChild;
+    svx::sidebar::TreeNode aCurNode;
+    aCurNode.sNodeName = PropertyNametoRID(rName);
+    aCurNode.NodeType = svx::sidebar::TreeNode::ComplexProperty;
+
+    aCurNode.children.push_back(SimplePropToTreeNode("BorderColor", 
css::uno::Any(aBorder.Color)));
+    aCurNode.children.push_back(
+        SimplePropToTreeNode("BorderLineWidth", 
css::uno::Any(aBorder.LineWidth)));
+    aCurNode.children.push_back(
+        SimplePropToTreeNode("BorderLineStyle", 
css::uno::Any(aBorder.LineStyle)));
+    aCurNode.children.push_back(
+        SimplePropToTreeNode("BorderLineDistance", 
css::uno::Any(aBorder.LineDistance)));
+    aCurNode.children.push_back(
+        SimplePropToTreeNode("BorderInnerLineWidth", 
css::uno::Any(aBorder.InnerLineWidth)));
+    aCurNode.children.push_back(
+        SimplePropToTreeNode("BorderOuterLineWidth", 
css::uno::Any(aBorder.OuterLineWidth)));
+
+    return aCurNode;
+}
+
+static svx::sidebar::TreeNode
+PropertyToTreeNode(const css::beans::Property& rProperty,
+                   const uno::Reference<beans::XPropertySet>& xPropertiesSet, 
const bool& rIsGrey)
+{
+    const OUString& rPropName = rProperty.Name;
+    svx::sidebar::TreeNode aCurNode;
+    const uno::Any aAny = xPropertiesSet->getPropertyValue(rPropName);
+    aCurNode.sNodeName = PropertyNametoRID(rPropName);
+
+    // These properties are handled separately as they are stored in STRUCT 
and not in single data members
+    if (rPropName == "CharTopBorder" || rPropName == "CharBottomBorder"
+        || rPropName == "CharLeftBorder" || rPropName == "CharRightBorder"
+        || rPropName == "TopBorder" || rPropName == "BottomBorder" || 
rPropName == "LeftBorder"
+        || rPropName == "RightBorder")
+    {
+        aCurNode = BorderToTreeNode(rPropName, aAny);
+    }
+    else
+        aCurNode = SimplePropToTreeNode(rPropName, aAny);
+
+    if (rIsGrey)
+    {
+        aCurNode.isGrey = true;
+        for (svx::sidebar::TreeNode& rChildNode : aCurNode.children)
+            rChildNode.isGrey = true; // grey out all the children nodes
+    }
+
+    return aCurNode;
+}
+
 static void InsertValues(const css::uno::Reference<css::uno::XInterface>& 
rSource,
                          std::unordered_map<OUString, bool>& rIsDefined,
                          svx::sidebar::TreeNode& rNode, const bool& isRoot,
@@ -316,21 +386,18 @@ static void InsertValues(const 
css::uno::Reference<css::uno::XInterface>& rSourc
 
     for (const beans::Property& rProperty : aProperties)
     {
-        if (std::find(rHiddenProperty.begin(), rHiddenProperty.end(), 
rProperty.Name)
+        const OUString& rPropName = rProperty.Name;
+        if (std::find(rHiddenProperty.begin(), rHiddenProperty.end(), 
rPropName)
             != rHiddenProperty.end())
             continue;
+
         if (isRoot
-            || xPropertiesState->getPropertyState(rProperty.Name)
-                   == beans::PropertyState_DIRECT_VALUE)
+            || xPropertiesState->getPropertyState(rPropName) == 
beans::PropertyState_DIRECT_VALUE)
         {
-            const uno::Any aAny = 
xPropertiesSet->getPropertyValue(rProperty.Name);
-            svx::sidebar::TreeNode aTemp;
-            if (rIsDefined[rProperty.Name])
-                aTemp.isGrey = true;
-            rIsDefined[rProperty.Name] = true;
-            aTemp.sNodeName = PropertyNametoRID(rProperty.Name);
-            aTemp.aValue = aAny;
-            rNode.children.push_back(aTemp);
+            svx::sidebar::TreeNode aCurNode
+                = PropertyToTreeNode(rProperty, xPropertiesSet, 
rIsDefined[rPropName]);
+            rIsDefined[rPropName] = true;
+            rNode.children.push_back(aCurNode);
         }
     }
 
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to