Skip to content

Commit

Permalink
Merge pull request biolab#41 from ales-erjavec/fixes/widget-manager-i…
Browse files Browse the repository at this point in the history
…nit-queue-on-demand

[FIX] widgetmanager: Add nodes to init queue in OnDemand policy
  • Loading branch information
ales-erjavec authored Oct 25, 2019
2 parents 9bae165 + b0a98f6 commit 926248d
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 2 deletions.
18 changes: 18 additions & 0 deletions orangecanvas/scheme/tests/test_widgetmanager.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,24 @@ def test_create_normal(self):
self.assertEqual(len(spy), 3)
self.assertSetEqual({n for n, _ in spy}, set(nodes))

def test_create_on_demand(self):
workflow = self.scheme
nodes = workflow.nodes
wm = TestingWidgetManager()
wm.set_creation_policy(WidgetManager.OnDemand)
spy = QSignalSpy(wm.widget_for_node_added)
wm.set_workflow(workflow)
self.assertEqual(len(spy), 0)
self.assertFalse(spy.wait(30))
self.assertEqual(len(spy), 0)
w = wm.widget_for_node(nodes[0])
self.assertEqual(list(spy), [[nodes[0], w]])
# transition to normal
spy = QSignalSpy(wm.widget_for_node_added)
wm.set_creation_policy(WidgetManager.Normal)
self.assertTrue(spy.wait())
self.assertEqual(spy[0][0], nodes[1])

def test_mappings(self):
workflow = self.scheme
nodes = workflow.nodes
Expand Down
5 changes: 3 additions & 2 deletions orangecanvas/scheme/widgetmanager.py
Original file line number Diff line number Diff line change
Expand Up @@ -332,9 +332,10 @@ def __add_node(self, node):
node.installEventFilter(self)
if self.__creation_policy == WidgetManager.Immediate:
self.ensure_created(node)
elif self.__creation_policy == WidgetManager.Normal:
else:
self.__init_queue.append(node)
self.__init_timer.start()
if self.__creation_policy == WidgetManager.Normal:
self.__init_timer.start()

def __on_node_removed(self, node): # type: (SchemeNode) -> None
assert self.__workflow is not None
Expand Down

0 comments on commit 926248d

Please sign in to comment.