From 0e11b24f0fa5ad80b7736d94368af0be527d1289 Mon Sep 17 00:00:00 2001
From: Walter Van Herck <w.van.herck@fz-juelich.de>
Date: Thu, 7 Aug 2014 15:11:01 +0200
Subject: [PATCH] Added TranformationItem and View and necessary connection
 with Particle

---
 GUI/coregui/Models/GUIObjectBuilder.cpp       |  1 +
 GUI/coregui/Models/ItemFactory.cpp            |  3 +
 GUI/coregui/Models/ParticleItem.cpp           |  5 +-
 GUI/coregui/Models/TransformationItem.cpp     | 19 +++++
 GUI/coregui/Models/TransformationItem.h       | 18 ++++
 GUI/coregui/Models/item_constants.h           |  1 +
 .../SampleDesigner/DesignerHelper.cpp         |  3 +
 .../SampleDesigner/DesignerHelper.h           |  9 +-
 .../InterferenceFunctionViews.h               |  7 +-
 .../SampleDesigner/ParticleView.cpp           | 14 +++-
 .../Components/SampleDesigner/ParticleView.h  |  2 +
 .../SampleDesigner/SampleViewFactory.cpp      |  5 ++
 .../SampleDesigner/TransformationView.cpp     | 15 ++++
 .../SampleDesigner/TransformationView.h       | 19 +++++
 .../Views/Components/widgetbox/widgetbox.xml  | 84 ++++++++++---------
 15 files changed, 157 insertions(+), 48 deletions(-)
 create mode 100644 GUI/coregui/Models/TransformationItem.cpp
 create mode 100644 GUI/coregui/Models/TransformationItem.h
 create mode 100644 GUI/coregui/Views/Components/SampleDesigner/TransformationView.cpp
 create mode 100644 GUI/coregui/Views/Components/SampleDesigner/TransformationView.h

diff --git a/GUI/coregui/Models/GUIObjectBuilder.cpp b/GUI/coregui/Models/GUIObjectBuilder.cpp
index 8e98343054f..69d09f28056 100644
--- a/GUI/coregui/Models/GUIObjectBuilder.cpp
+++ b/GUI/coregui/Models/GUIObjectBuilder.cpp
@@ -10,6 +10,7 @@
 #include "MaterialEditor.h"
 #include "MaterialModel.h"
 #include "ParticleItem.h"
+#include "TransformationItem.h"
 #include "FormFactorItems.h"
 #include "InterferenceFunctionItems.h"
 #include "TransformFromDomain.h"
diff --git a/GUI/coregui/Models/ItemFactory.cpp b/GUI/coregui/Models/ItemFactory.cpp
index 195322346b8..8f7bb5848f0 100644
--- a/GUI/coregui/Models/ItemFactory.cpp
+++ b/GUI/coregui/Models/ItemFactory.cpp
@@ -18,6 +18,7 @@
 #include "LayerItem.h"
 #include "ParticleLayoutItem.h"
 #include "ParticleItem.h"
+#include "TransformationItem.h"
 #include "ParticleCoreShellItem.h"
 #include "InterferenceFunctionItems.h"
 #include "InstrumentItem.h"
@@ -44,6 +45,7 @@ ItemFactory::ItemMap_t initializeItemMap() {
     result[Constants::LayerType] = &createInstance<LayerItem>;
     result[Constants::ParticleLayoutType] = &createInstance<ParticleLayoutItem>;
     result[Constants::ParticleType] = &createInstance<ParticleItem>;
+    result[Constants::TransformationType] = &createInstance<TransformationItem>;
     result[Constants::ParticleCoreShellType] = &createInstance<ParticleCoreShellItem>;
     result[Constants::InterferenceFunction1DParaCrystalType] = &createInstance<InterferenceFunction1DParaCrystalItem>;
     result[Constants::InterferenceFunction2DParaCrystalType] = &createInstance<InterferenceFunction2DParaCrystalItem>;
@@ -110,6 +112,7 @@ QStringList ItemFactory::m_valid_top_item_names = QStringList()
         << Constants::LayerType
         << Constants::ParticleLayoutType
         << Constants::ParticleType
+        << Constants::TransformationType
         << Constants::ParticleCoreShellType
         << Constants::InterferenceFunction1DParaCrystalType
         << Constants::InterferenceFunction2DParaCrystalType
diff --git a/GUI/coregui/Models/ParticleItem.cpp b/GUI/coregui/Models/ParticleItem.cpp
index 9863c2d8d65..0f099b17f36 100644
--- a/GUI/coregui/Models/ParticleItem.cpp
+++ b/GUI/coregui/Models/ParticleItem.cpp
@@ -30,12 +30,11 @@ ParticleItem::ParticleItem(ParameterizedItem *parent)
 {
     setItemName(Constants::ParticleType);
     setItemPort(ParameterizedItem::PortInfo::Port0);
-    //registerGroupProperty(P_FORM_FACTOR, Constants::CylinderType);
     registerGroupProperty(P_FORM_FACTOR, Constants::FormFactorGroup);
-
     registerProperty(P_MATERIAL, MaterialUtils::getDefaultMaterialProperty().getVariant());
-
     registerProperty(P_DEPTH, 0.0);
     registerProperty(P_ABUNDANCE, 1.0);
+
+    addToValidChildren(Constants::TransformationType, PortInfo::Port0, 1);
 }
 
diff --git a/GUI/coregui/Models/TransformationItem.cpp b/GUI/coregui/Models/TransformationItem.cpp
new file mode 100644
index 00000000000..c33137c0f91
--- /dev/null
+++ b/GUI/coregui/Models/TransformationItem.cpp
@@ -0,0 +1,19 @@
+#include "TransformationItem.h"
+#include "ParticleItem.h"
+#include "GUIHelpers.h"
+#include <QDebug>
+
+const QString TransformationItem::P_POS = "Position";
+const QString TransformationItem::P_ROT = "Rotation";
+
+
+TransformationItem::TransformationItem(ParameterizedItem *parent)
+    : ParameterizedGraphicsItem(Constants::TransformationType, parent)
+{
+    setItemName(Constants::TransformationType);
+    setItemPort(ParameterizedItem::PortInfo::Port0);
+
+    registerGroupProperty(P_POS, Constants::VectorType);
+    registerGroupProperty(P_ROT, Constants::VectorType);
+}
+
diff --git a/GUI/coregui/Models/TransformationItem.h b/GUI/coregui/Models/TransformationItem.h
new file mode 100644
index 00000000000..b4c743a13d4
--- /dev/null
+++ b/GUI/coregui/Models/TransformationItem.h
@@ -0,0 +1,18 @@
+#ifndef TRANSFORMATIONITEM_H
+#define TRANSFORMATIONITEM_H
+
+#include "ParameterizedGraphicsItem.h"
+#include <QVector>
+
+class TransformationItem : public ParameterizedGraphicsItem
+{
+    Q_OBJECT
+public:
+    static const QString P_POS, P_ROT;
+    explicit TransformationItem(ParameterizedItem *parent=0);
+    ~TransformationItem(){}
+};
+
+
+#endif // TRANSFORMATIONITEM_H
+
diff --git a/GUI/coregui/Models/item_constants.h b/GUI/coregui/Models/item_constants.h
index 9aac45c0903..8471f19af1b 100644
--- a/GUI/coregui/Models/item_constants.h
+++ b/GUI/coregui/Models/item_constants.h
@@ -14,6 +14,7 @@ const ModelType MultiLayerType = "MultiLayer";
 const ModelType ParticleType = "Particle";
 const ModelType ParticleLayoutType = "ParticleLayout";
 const ModelType ParticleCoreShellType = "ParticleCoreShell";
+const ModelType TransformationType = "Transformation";
 const ModelType InterferenceFunction1DParaCrystalType = "InterferenceFunction1DParaCrystal";
 const ModelType InterferenceFunction2DParaCrystalType = "InterferenceFunction2DParaCrystal";
 const ModelType InterferenceFunction2DLatticeType = "InterferenceFunction2DLattice";
diff --git a/GUI/coregui/Views/Components/SampleDesigner/DesignerHelper.cpp b/GUI/coregui/Views/Components/SampleDesigner/DesignerHelper.cpp
index 3bd989b145b..e7bba120d10 100644
--- a/GUI/coregui/Views/Components/SampleDesigner/DesignerHelper.cpp
+++ b/GUI/coregui/Views/Components/SampleDesigner/DesignerHelper.cpp
@@ -142,6 +142,9 @@ QRectF DesignerHelper::getDefaultBoundingRect(const QString &name)
     else  if (name==Constants::ParticleLayoutType) {
         return QRectF(0, 0, getDefaultParticleLayoutWidth(), getDefaultParticleLayoutHeight());
     }
+    else  if (name==Constants::TransformationType) {
+        return QRectF(0, 0, getDefaultTransformationWidth(), getDefaultTransformationHeight());
+    }
     else  if (name.startsWith(Constants::FormFactorType) || name==Constants::ParticleType || name==Constants::ParticleCoreShellType) {
         return QRectF(0, 0, getDefaultParticleWidth(), getDefaultParticleHeight());
     }
diff --git a/GUI/coregui/Views/Components/SampleDesigner/DesignerHelper.h b/GUI/coregui/Views/Components/SampleDesigner/DesignerHelper.h
index 491b93ed456..ceea41b6f05 100644
--- a/GUI/coregui/Views/Components/SampleDesigner/DesignerHelper.h
+++ b/GUI/coregui/Views/Components/SampleDesigner/DesignerHelper.h
@@ -23,7 +23,8 @@ public:
         InterferenceFunction1DParaType,
         InterferenceFunction2DParaType,
         InterferenceFunction2DLatticeType,
-        ParticleType
+        ParticleType,
+        TransformationType
     };
 
     static int getDefaultLayerWidth() { return m_default_layer_width; }
@@ -40,10 +41,14 @@ public:
     static int getDefaultInterferenceFunctionWidth() { return m_default_layer_height*4; }
     static int getDefaultInterferenceFunctionHeight() { return m_default_layer_height*4; }
 
-    static int getDefaultParticleWidth() { return m_default_layer_height*3; }
+    static int getDefaultParticleWidth() { return m_default_layer_height*3.5; }
     static int getDefaultParticleHeight() { return m_default_layer_height*4; }
     static QColor getDefaultParticleColor() { return QColor(210, 223, 237); }
 
+    static int getDefaultTransformationWidth() { return m_default_layer_height*4; }
+    static int getDefaultTransformationHeight() { return m_default_layer_height*2; }
+    static QColor getDefaultTransformationColor() { return QColor(145, 50, 220); }
+
     static int getDefaultMaterialWidth() { return m_default_layer_height*1.2; }
     static int getDefaultMaterialHeight() { return m_default_layer_height*1.2; }
     static QColor getDefaultMaterialColor() { return QColor(qrand() % 256, qrand() % 256, qrand() % 256); }
diff --git a/GUI/coregui/Views/Components/SampleDesigner/InterferenceFunctionViews.h b/GUI/coregui/Views/Components/SampleDesigner/InterferenceFunctionViews.h
index 51712c2db99..10f35231703 100644
--- a/GUI/coregui/Views/Components/SampleDesigner/InterferenceFunctionViews.h
+++ b/GUI/coregui/Views/Components/SampleDesigner/InterferenceFunctionViews.h
@@ -1,5 +1,5 @@
-#ifndef PARACRYSTALVIEWS_H
-#define PARACRYSTALVIEWS_H
+#ifndef INTERFERENCEFUNCTIONVIEWS_H
+#define INTERFERENCEFUNCTIONVIEWS_H
 
 
 #include "ConnectableView.h"
@@ -41,5 +41,4 @@ public:
     int type() const { return Type; }
 };
 
-
-#endif
+#endif // INTERFERENCEFUNCTIONVIEWS_H
diff --git a/GUI/coregui/Views/Components/SampleDesigner/ParticleView.cpp b/GUI/coregui/Views/Components/SampleDesigner/ParticleView.cpp
index a0cdb2b0a1d..85a0619dc79 100644
--- a/GUI/coregui/Views/Components/SampleDesigner/ParticleView.cpp
+++ b/GUI/coregui/Views/Components/SampleDesigner/ParticleView.cpp
@@ -1,6 +1,7 @@
 #include "ParticleView.h"
 #include "ParticleItem.h"
 #include "FancyGroupProperty.h"
+#include "GUIHelpers.h"
 #include <QPainter>
 #include <QStyleOptionGraphicsItem>
 #include <QObject>
@@ -15,7 +16,7 @@ ParticleView::ParticleView(QGraphicsItem *parent)
     setColor(DesignerHelper::getDefaultParticleColor());
     setRectangle(DesignerHelper::getDefaultBoundingRect(Constants::ParticleType));
     addPort("out", NodeEditorPort::Output, NodeEditorPort::FormFactor);
-    addPort("rotation", NodeEditorPort::Input, NodeEditorPort::GeometryTransformation);
+    addPort("transformation", NodeEditorPort::Input, NodeEditorPort::GeometryTransformation);
     m_roundpar = 5;
     m_label_vspace = 45;
 }
@@ -70,3 +71,14 @@ void ParticleView::onPropertyChange(const QString &propertyName)
         IView::onPropertyChange(propertyName);
     }
 }
+
+void ParticleView::addView(IView *childView, int /*row*/)
+{
+    qDebug() << "ParticleView::addView() xxx " << m_item->itemName() << childView->getParameterizedItem()->itemName() << childView->type() << DesignerHelper::ParticleType;
+    if(childView->type() == DesignerHelper::TransformationType) {
+        connectInputPort(dynamic_cast<ConnectableView *>(childView), 0);
+    }
+    else {
+        throw GUIHelpers::Error("ParticleView::addView() -> Error. Unknown view");
+    }
+}
diff --git a/GUI/coregui/Views/Components/SampleDesigner/ParticleView.h b/GUI/coregui/Views/Components/SampleDesigner/ParticleView.h
index a038fda06c2..3faf81c0b06 100644
--- a/GUI/coregui/Views/Components/SampleDesigner/ParticleView.h
+++ b/GUI/coregui/Views/Components/SampleDesigner/ParticleView.h
@@ -23,6 +23,8 @@ public:
 
     void onPropertyChange(const QString &propertyName);
 
+    void addView(IView *childView, int row = 0); // to add Transformation
+
 private:
     QPixmap m_pixmap;
 
diff --git a/GUI/coregui/Views/Components/SampleDesigner/SampleViewFactory.cpp b/GUI/coregui/Views/Components/SampleDesigner/SampleViewFactory.cpp
index 308e3a3e063..178eac0cd50 100644
--- a/GUI/coregui/Views/Components/SampleDesigner/SampleViewFactory.cpp
+++ b/GUI/coregui/Views/Components/SampleDesigner/SampleViewFactory.cpp
@@ -4,6 +4,7 @@
 #include "LayerView.h"
 #include "ParticleLayoutView.h"
 #include "ParticleView.h"
+#include "TransformationView.h"
 #include "ParticleCoreShellView.h"
 #include "InterferenceFunctionViews.h"
 #include "GUIHelpers.h"
@@ -15,6 +16,7 @@ QStringList SampleViewFactory::m_valid_item_names  = QStringList()
         << Constants::LayerType
         << Constants::ParticleLayoutType
         << Constants::ParticleType
+        << Constants::TransformationType
         << Constants::ParticleCoreShellType
         << Constants::InterferenceFunction1DParaCrystalType
         << Constants::InterferenceFunction2DParaCrystalType
@@ -45,6 +47,9 @@ IView *SampleViewFactory::createSampleView(const QString &name)
     else if (name==Constants::ParticleType) {
         return new ParticleView();
     }
+    else if (name==Constants::TransformationType) {
+        return new TransformationView();
+    }
     else if (name==Constants::ParticleCoreShellType) {
         return new ParticleCoreShellView();
     }
diff --git a/GUI/coregui/Views/Components/SampleDesigner/TransformationView.cpp b/GUI/coregui/Views/Components/SampleDesigner/TransformationView.cpp
new file mode 100644
index 00000000000..e3278f55c2a
--- /dev/null
+++ b/GUI/coregui/Views/Components/SampleDesigner/TransformationView.cpp
@@ -0,0 +1,15 @@
+#include "TransformationView.h"
+#include "DesignerHelper.h"
+#include "item_constants.h"
+
+
+TransformationView::TransformationView(QGraphicsItem *parent)
+    : ConnectableView(parent)
+{
+    setName(Constants::TransformationType);
+    setLabel("Transformation");
+    setColor(DesignerHelper::getDefaultTransformationColor());
+    setRectangle( DesignerHelper::getDefaultBoundingRect(getName()) );
+    addPort("out", NodeEditorPort::Output, NodeEditorPort::GeometryTransformation);
+    m_roundpar = 3;
+}
diff --git a/GUI/coregui/Views/Components/SampleDesigner/TransformationView.h b/GUI/coregui/Views/Components/SampleDesigner/TransformationView.h
new file mode 100644
index 00000000000..f62f5450c73
--- /dev/null
+++ b/GUI/coregui/Views/Components/SampleDesigner/TransformationView.h
@@ -0,0 +1,19 @@
+#ifndef TRANSFORMATIONVIEW_H
+#define TRANSFORMATIONVIEW_H
+
+
+#include "ConnectableView.h"
+
+class TransformationView : public ConnectableView
+{
+    Q_OBJECT
+
+public:
+    enum { Type = DesignerHelper::TransformationType };
+
+    TransformationView(QGraphicsItem *parent = 0);
+
+    int type() const { return Type; }
+};
+
+#endif // TRANSFORMATIONVIEW_H
diff --git a/GUI/coregui/Views/Components/widgetbox/widgetbox.xml b/GUI/coregui/Views/Components/widgetbox/widgetbox.xml
index d9d1e56df8d..fdc8c3386a9 100644
--- a/GUI/coregui/Views/Components/widgetbox/widgetbox.xml
+++ b/GUI/coregui/Views/Components/widgetbox/widgetbox.xml
@@ -1,9 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <widgetbox version="0.5">
-    
+
     <category name="Layers">
-        
-        
+
         <categoryentry  name="Multi Layer" icon="images/MultiLayer.png">
             <widget class="MultiLayer">
                 <property name="objectName">
@@ -19,12 +18,11 @@
                 </property>
             </widget>
         </categoryentry>
-        
+
     </category>
-    
-    
+
     <category name="Particle layouts">
-        
+
         <categoryentry name="Basic particle layout" icon="images/ParticleLayout.png">
             <widget class="ParticleLayout">
                 <property name="objectName">
@@ -32,12 +30,11 @@
                 </property>
             </widget>
         </categoryentry>
-                
+
     </category>
-    
-    
+
     <category name="Interference functions">
-        
+
         <categoryentry name="1D paracrystal" icon="images/ParaCrystal1D.png">
             <widget class="InterferenceFunction1DParaCrystal">
                 <property name="objectName">
@@ -45,7 +42,7 @@
                 </property>
             </widget>
         </categoryentry>
-        
+
         <categoryentry  name="2D paracrystal" icon="images/ParaCrystal2D.png">
             <widget class="InterferenceFunction2DParaCrystal">
                 <property name="objectName">
@@ -53,8 +50,13 @@
                 </property>
             </widget>
         </categoryentry>
+<<<<<<< HEAD
         
         <categoryentry  name="2D lattice" icon="images/Lattice2D.png">
+=======
+
+        <categoryentry  name="2D lattice" icon="images/ParaCrystal2D.png">
+>>>>>>> Added TranformationItem and View and necessary connection with Particle
             <widget class="InterferenceFunction2DLattice">
                 <property name="objectName">
                     <string notr="true">somestring</string>
@@ -63,8 +65,7 @@
         </categoryentry>
 
     </category>
-    
-    
+
     <category name="Particles">
 
         <categoryentry name="Anisotropic pyramid" icon="images/ff_anisopyramid_32.png">
@@ -74,7 +75,7 @@
                 </property>
             </widget>
         </categoryentry>
-    
+
         <categoryentry name="Box" icon="images/ff_box_32.png">
             <widget class="FormFactorBox">
                 <property name="objectName">
@@ -82,7 +83,7 @@
                 </property>
             </widget>
         </categoryentry>
-    
+
         <categoryentry name="Cone" icon="images/ff_cone_32.png">
             <widget class="FormFactorCone">
                 <property name="objectName">
@@ -90,7 +91,7 @@
                 </property>
             </widget>
         </categoryentry>
-    
+
         <categoryentry name="Cone6" icon="images/ff_cone6_32.png">
             <widget class="FormFactorCone6">
                 <property name="objectName">
@@ -98,7 +99,7 @@
                 </property>
             </widget>
         </categoryentry>
-    
+
         <categoryentry name="Cuboctahedron" icon="images/ff_cubeoct_32.png">
             <widget class="FormFactorCuboctahedron">
                 <property name="objectName">
@@ -106,7 +107,7 @@
                 </property>
             </widget>
         </categoryentry>
-    
+
         <categoryentry name="Cylinder" icon="images/ff_cylinder_32.png">
             <widget class="FormFactorCylinder">
                 <property name="objectName">
@@ -114,7 +115,7 @@
                 </property>
             </widget>
         </categoryentry>
-    
+
         <categoryentry name="Ellipsoidal cylinder" icon="images/ff_ellipscylinder_32.png">
             <widget class="FormFactorEllipsoidalCylinder">
                 <property name="objectName">
@@ -122,7 +123,7 @@
                 </property>
             </widget>
         </categoryentry>
-    
+
         <categoryentry name="Full sphere" icon="images/ff_fullsphere_32.png">
             <widget class="FormFactorFullSphere">
                 <property name="objectName">
@@ -130,7 +131,7 @@
                 </property>
             </widget>
         </categoryentry>
-    
+
         <categoryentry name="Full spheroid" icon="images/ff_fullspheroid_32.png">
             <widget class="FormFactorFullSpheroid">
                 <property name="objectName">
@@ -138,7 +139,7 @@
                 </property>
             </widget>
         </categoryentry>
-    
+
         <categoryentry name="Hemi ellipsoid" icon="images/ff_hemiellipsoid_32.png">
             <widget class="FormFactorHemiEllipsoid">
                 <property name="objectName">
@@ -146,7 +147,7 @@
                 </property>
             </widget>
         </categoryentry>
-    
+
         <categoryentry name="Prism3" icon="images/ff_prism3_32.png">
             <widget class="FormFactorPrism3">
                 <property name="objectName">
@@ -154,7 +155,7 @@
                 </property>
             </widget>
         </categoryentry>
-    
+
         <categoryentry name="Prism6" icon="images/ff_prism6_32.png">
             <widget class="FormFactorPrism6">
                 <property name="objectName">
@@ -162,7 +163,7 @@
                 </property>
             </widget>
         </categoryentry>
-    
+
         <categoryentry name="Pyramid" icon="images/ff_pyramid_32.png">
             <widget class="FormFactorPyramid">
                 <property name="objectName">
@@ -170,7 +171,7 @@
                 </property>
             </widget>
         </categoryentry>
-    
+
         <categoryentry name="Ripple1" icon="images/ff_ripple1_32.png">
             <widget class="FormFactorRipple1">
                 <property name="objectName">
@@ -178,7 +179,7 @@
                 </property>
             </widget>
         </categoryentry>
-    
+
         <categoryentry name="Ripple2" icon="images/ff_ripple2_32.png">
             <widget class="FormFactorRipple2">
                 <property name="objectName">
@@ -194,7 +195,7 @@
                 </property>
             </widget>
         </categoryentry>
-        
+
         <categoryentry name="Truncated sphere" icon="images/ff_truncsphere_32.png">
             <widget class="FormFactorTruncatedSphere">
                 <property name="objectName">
@@ -202,7 +203,7 @@
                 </property>
             </widget>
         </categoryentry>
-    
+
         <categoryentry name="Truncated spheroid" icon="images/ff_truncspheroid_32.png">
             <widget class="FormFactorTruncatedSpheroid">
                 <property name="objectName">
@@ -210,11 +211,22 @@
                 </property>
             </widget>
         </categoryentry>
-        
+
+    </category>
+
+    <category name="Transformations">
+
+        <categoryentry name="Transformation" icon="images/Transformation.png">
+            <widget class="Transformation">
+                <property name="objectName">
+                    <string notr="true">somestring</string>
+                </property>
+            </widget>
+        </categoryentry>
+
     </category>
 
 
-    
     <category name="Particle assemblies">
 
         <categoryentry name="Core shell particle" icon="images/ParticleCoreShell.png">
@@ -224,14 +236,11 @@
                 </property>
             </widget>
         </categoryentry>
-    
+
     </category>
 
-    
-    
     <category name="Standard samples">
-        
-        <categoryentry name="Example #1 (no interference)" icon="images/Transformation.png">
+        <categoryentry name="Example #1 (no interference)" icon="images/sample_layers2.png">
             <widget class="example01">
                 <property name="objectName">
                     <string notr="true">somestring</string>
@@ -280,6 +289,5 @@
         </categoryentry>
 
     </category>
-        
 
 </widgetbox>
-- 
GitLab