From 21192d4176b9aa50c71d48bbb84cc73a260c6eca Mon Sep 17 00:00:00 2001
From: inso <insomniak.fr@gmaiL.com>
Date: Mon, 6 Jun 2016 20:35:09 +0200
Subject: [PATCH] New view for nodes

---
 .travis.yml                                   |  2 +-
 src/sakia/gui/informations_tab.py             | 37 ++++++++++-------
 src/sakia/gui/views/nodes/base_node.py        |  5 +--
 src/sakia/gui/views/nodes/explorer_node.py    | 41 ++++++++++++-------
 src/sakia/gui/views/scenes/explorer_scene.py  |  4 +-
 .../unit/gui/views/test_explorer_node.py      |  8 ++--
 6 files changed, 58 insertions(+), 39 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index fef4b439..e1a91105 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -40,4 +40,4 @@ deploy:
   skip_cleanup: true
   on:
     tags: true
-    condition: ${TRAVIS_OS_NAME} = osx
+    condition: ${TRAVIS_OS_NAME} = linux
diff --git a/src/sakia/gui/informations_tab.py b/src/sakia/gui/informations_tab.py
index 2989c172..15ebe783 100644
--- a/src/sakia/gui/informations_tab.py
+++ b/src/sakia/gui/informations_tab.py
@@ -92,6 +92,18 @@ class InformationsTabWidget(QWidget, Ui_InformationsTabWidget):
                                                     self.community, self.app)\
                 .diff_localized(True, self.app.preferences['international_system_of_units'])
 
+            localized_ud_median_time = QLocale.toString(
+                        QLocale(),
+                        QDateTime.fromTime_t(block_ud['medianTime']),
+                        QLocale.dateTimeFormat(QLocale(), QLocale.ShortFormat)
+                    )
+
+            localized_next_ud_median_time = QLocale.toString(
+                        QLocale(),
+                        QDateTime.fromTime_t(block_ud['medianTime'] + params['dt']),
+                        QLocale.dateTimeFormat(QLocale(), QLocale.ShortFormat)
+                    )
+
             if block_ud_minus_1:
                 mass_minus_1 = (float(0) if block_ud['membersCount'] == 0 else
                         block_ud_minus_1['monetaryMass'] / block_ud['membersCount'])
@@ -106,6 +118,12 @@ class InformationsTabWidget(QWidget, Ui_InformationsTabWidget):
                     actual_growth = float(0)
                 else:
                     actual_growth = block_ud['dividend'] / (block_ud_minus_1['monetaryMass'] / block_ud['membersCount'])
+
+                localized_ud_median_time_minus_1 = QLocale.toString(
+                    QLocale(),
+                    QDateTime.fromTime_t(block_ud_minus_1['medianTime']),
+                    QLocale.dateTimeFormat(QLocale(), QLocale.ShortFormat)
+                )
             else:
                 localized_mass_minus_1_per_member = QLocale().toString(
                         float(0), 'f', self.app.preferences['digits_after_comma']
@@ -114,6 +132,7 @@ class InformationsTabWidget(QWidget, Ui_InformationsTabWidget):
                         float(0), 'f', self.app.preferences['digits_after_comma']
                 )
                 actual_growth = float(0)
+                localized_ud_median_time_minus_1 = "####"
 
             # set infos in label
             self.label_general.setText(
@@ -143,23 +162,11 @@ class InformationsTabWidget(QWidget, Ui_InformationsTabWidget):
                     actual_growth,
                     params['dt'] / 86400,
                     self.tr('Actual growth c = UD(t)/[M(t-1)/N(t)]'),
-                    QLocale.toString(
-                        QLocale(),
-                        QDateTime.fromTime_t(block_ud_minus_1['medianTime']),
-                        QLocale.dateTimeFormat(QLocale(), QLocale.ShortFormat)
-                    ),
+                    localized_ud_median_time_minus_1,
                     self.tr('Penultimate UD date and time (t-1)'),
-                    QLocale.toString(
-                        QLocale(),
-                        QDateTime.fromTime_t(block_ud['medianTime']),
-                        QLocale.dateTimeFormat(QLocale(), QLocale.ShortFormat)
-                    ),
+                    localized_ud_median_time,
                     self.tr('Last UD date and time (t)'),
-                    QLocale.toString(
-                        QLocale(),
-                        QDateTime.fromTime_t(block_ud['medianTime'] + params['dt']),
-                        QLocale.dateTimeFormat(QLocale(), QLocale.ShortFormat)
-                    ),
+                    localized_next_ud_median_time,
                     self.tr('Next UD date and time (t+1)')
                 )
             )
diff --git a/src/sakia/gui/views/nodes/base_node.py b/src/sakia/gui/views/nodes/base_node.py
index 53e0226b..ba8339ab 100644
--- a/src/sakia/gui/views/nodes/base_node.py
+++ b/src/sakia/gui/views/nodes/base_node.py
@@ -24,10 +24,7 @@ class BaseNode(QGraphicsEllipseItem):
         self.status_wallet = self.metadata['status'] & NodeStatus.HIGHLIGHTED
         self.status_member = not self.metadata['status'] & NodeStatus.OUT
         self.text = self.metadata['text']
-        try:
-            self.setToolTip(self.metadata['tooltip'])
-        except TypeError:
-            raise
+        self.setToolTip(self.text + " - " + self.metadata['tooltip'])
         self.arcs = []
         self.menu = None
         self.action_sign = None
diff --git a/src/sakia/gui/views/nodes/explorer_node.py b/src/sakia/gui/views/nodes/explorer_node.py
index 2e6badea..a816758d 100644
--- a/src/sakia/gui/views/nodes/explorer_node.py
+++ b/src/sakia/gui/views/nodes/explorer_node.py
@@ -7,7 +7,7 @@ import math
 
 
 class ExplorerNode(BaseNode):
-    def __init__(self, nx_node, center_pos, nx_pos, steps, steps_max):
+    def __init__(self, nx_node, center_pos, nx_pos, steps, steps_max, small):
         """
         Create node in the graph scene
 
@@ -16,6 +16,7 @@ class ExplorerNode(BaseNode):
         :param nx_pos: Position of the nodes in the graph
         :param int steps: The steps from the center identity
         :param int steps_max: The steps max of the graph
+        :param bool small: Small dots for big networks
         """
         super().__init__(nx_node, nx_pos)
 
@@ -23,22 +24,32 @@ class ExplorerNode(BaseNode):
         self.steps_max = steps_max
         self.highlighted = False
 
-        # text inside ellipse
-        self.text_item = QGraphicsSimpleTextItem(self)
-        self.text_item.setText(self.text)
-        # center ellipse around text
-        self.setRect(
-            0,
-            0,
-            self.text_item.boundingRect().width() * 2,
-            self.text_item.boundingRect().height() * 2
-        )
+        if small:
+            self.setRect(
+                0,
+                0,
+                10,
+                10
+            )
+            self.text_item = None
+        else:
+            # text inside ellipse
+            self.text_item = QGraphicsSimpleTextItem(self)
+            self.text_item.setText(self.text)
+            # center ellipse around text
+            self.setRect(
+                0,
+                0,
+                self.text_item.boundingRect().width() * 2,
+                self.text_item.boundingRect().height() * 2
+            )
+            # center text in ellipse
+            self.text_item.setPos(self.boundingRect().width() / 4.0, self.boundingRect().height() / 4.0)
+
 
         #  set anchor to the center
         self.setTransform(
             QTransform().translate(-self.boundingRect().width() / 2.0, -self.boundingRect().height() / 2.0))
-        # center text in ellipse
-        self.text_item.setPos(self.boundingRect().width() / 4.0, self.boundingRect().height() / 4.0)
 
         # cursor change on hover
         self.setAcceptHoverEvents(True)
@@ -76,7 +87,9 @@ class ExplorerNode(BaseNode):
 
         if self.status_wallet == NodeStatus.HIGHLIGHTED:
             text_color = QColor('grey')
-        self.text_item.setBrush(QBrush(text_color))
+
+        if self.text_item:
+            self.text_item.setBrush(QBrush(text_color))
 
         # create gradient inside the ellipse
         gradient = QRadialGradient(QPointF(0, self.boundingRect().height() / 4), self.boundingRect().width())
diff --git a/src/sakia/gui/views/scenes/explorer_scene.py b/src/sakia/gui/views/scenes/explorer_scene.py
index 696c8782..d44ce775 100644
--- a/src/sakia/gui/views/scenes/explorer_scene.py
+++ b/src/sakia/gui/views/scenes/explorer_scene.py
@@ -260,7 +260,9 @@ class ExplorerScene(BaseScene):
                     else:
                         center_pos = QPoint(0, 0)
 
-                v = ExplorerNode(nx_node, center_pos, graph_pos, distances[nx_node[0]], dist_max)
+                small = distances[nx_node[0]] > 1
+
+                v = ExplorerNode(nx_node, center_pos, graph_pos, distances[nx_node[0]], dist_max, small)
                 self.addItem(v)
                 self.nodes[nx_node[0]] = v
 
diff --git a/src/sakia/tests/unit/gui/views/test_explorer_node.py b/src/sakia/tests/unit/gui/views/test_explorer_node.py
index e684d5ab..a27c75e1 100644
--- a/src/sakia/tests/unit/gui/views/test_explorer_node.py
+++ b/src/sakia/tests/unit/gui/views/test_explorer_node.py
@@ -27,7 +27,7 @@ class TestExplorerNode(unittest.TestCase, QuamashTest):
             "B": (10, 20)
         }
         async def exec_test():
-            node = ExplorerNode(("A", metadata), QPointF(0, 0), nx_pos, 0, 1)
+            node = ExplorerNode(("A", metadata), QPointF(0, 0), nx_pos, 0, 1, False)
             self.assertEqual(node.id, "A")
             self.assertEqual(node.metadata['status'], NodeStatus.NEUTRAL)
             self.assertEqual(node.x(), 0)
@@ -35,7 +35,7 @@ class TestExplorerNode(unittest.TestCase, QuamashTest):
             self.assertEqual(node.status_wallet, False)
             self.assertEqual(node.status_member, True)
             self.assertEqual(node.text, "UserA")
-            self.assertEqual(node.toolTip(), "TestTooltip")
+            self.assertEqual(node.toolTip(), "UserA - TestTooltip")
 
         self.lp.run_until_complete(exec_test())
 
@@ -52,7 +52,7 @@ class TestExplorerNode(unittest.TestCase, QuamashTest):
             "B": (10, 20)
         }
         async def exec_test():
-            node = ExplorerNode(("A", metadata), QPointF(0, 0), nx_pos, 0, 1)
+            node = ExplorerNode(("A", metadata), QPointF(0, 0), nx_pos, 0, 1, False)
             node.paint(painter, QStyleOptionGraphicsItem(), widget)
 
         self.lp.run_until_complete(exec_test())
@@ -70,7 +70,7 @@ class TestExplorerNode(unittest.TestCase, QuamashTest):
             "B": (10, 20)
         }
         async def exec_test():
-            node = ExplorerNode(("A", metadata), QPointF(0, 0), nx_pos, 0, 1)
+            node = ExplorerNode(("A", metadata), QPointF(0, 0), nx_pos, 0, 1, False)
             bounding_rect = node.boundingRect()
             self.assertAlmostEqual(bounding_rect.x(), -0.5, delta=15)
             self.assertAlmostEqual(bounding_rect.y(), -0.5, delta=15)
-- 
GitLab