minimap.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #!/usr/bin/python3
  2. import gi
  3. gi.require_version('Gtk', '3.0')
  4. gi.require_version('GFlow', '0.8')
  5. gi.require_version('GtkFlow', '0.8')
  6. from gi.repository import GLib
  7. from gi.repository import Gtk
  8. from gi.repository import GFlow
  9. from gi.repository import GtkFlow
  10. import sys
  11. class ExampleNode(GFlow.SimpleNode):
  12. def __new__(cls, *args, **kwargs):
  13. x = GFlow.SimpleNode.new()
  14. x.__class__ = cls
  15. return x
  16. class NumberNode(ExampleNode):
  17. def __init__(self, number=0.0):
  18. self.number = GFlow.SimpleSource.with_type(float)
  19. self.number.set_value(number)
  20. self.number.set_name("output")
  21. self.add_source(self.number)
  22. adjustment = Gtk.Adjustment.new(0, 0, 100, 1, 10, 0)
  23. self.spinbutton = Gtk.SpinButton()
  24. self.spinbutton.set_adjustment(adjustment)
  25. self.spinbutton.set_size_request(50,20)
  26. self.spinbutton.connect("value_changed", self.do_value_changed)
  27. self.set_name("NumberGenerator")
  28. def do_value_changed(self, widget=None, data=None):
  29. self.number.set_value(float(self.spinbutton.get_value()))
  30. class PrintNode(ExampleNode):
  31. def __init__(self):
  32. self.number = GFlow.SimpleSink.new(float(0))
  33. self.number.set_name("")
  34. self.number.connect("changed", self.do_printing)
  35. self.add_sink(self.number)
  36. self.childlabel = Gtk.Label()
  37. self.set_name("Output")
  38. def do_printing(self, dock, val=None, flow_id=None):
  39. if val is None:
  40. self.childlabel.set_text("")
  41. else:
  42. self.childlabel.set_text(str(val))
  43. class Calculator(object):
  44. def __init__(self):
  45. w = Gtk.Window.new(Gtk.WindowType.TOPLEVEL)
  46. self.nv = GtkFlow.NodeView.new()
  47. self.nv.set_placeholder("Please click the buttons above to spawn nodes.")
  48. self.vp = Gtk.Viewport()
  49. self.sw = Gtk.ScrolledWindow()
  50. self.minimap = GtkFlow.Minimap.new()
  51. hbox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 0)
  52. create_numbernode_button = Gtk.Button.new_with_label("Create NumberNode")
  53. create_numbernode_button.connect("clicked", self.do_create_numbernode)
  54. hbox.add(create_numbernode_button)
  55. create_addnode_button = Gtk.Button.new_with_label("Create OperationNode")
  56. create_addnode_button.connect("clicked", self.do_create_addnode)
  57. hbox.add(create_addnode_button)
  58. create_printnode_button = Gtk.Button.new_with_label("Create PrintNode")
  59. create_printnode_button.connect("clicked", self.do_create_printnode)
  60. hbox.add(create_printnode_button)
  61. self.vp.add(self.nv)
  62. self.sw.add(self.vp)
  63. vbox = Gtk.Box.new(Gtk.Orientation.VERTICAL, 0)
  64. vbox.pack_start(hbox, False, False, 0)
  65. vbox.pack_start(self.minimap, False, False, 0)
  66. vbox.pack_start(self.sw, True, True, 0)
  67. self.minimap.set_nodeview(self.nv)
  68. w.add(vbox)
  69. w.show_all()
  70. w.connect("destroy", self.do_quit)
  71. Gtk.main()
  72. def do_create_addnode(self, widget=None, data=None):
  73. n = AddNode()
  74. self.nv.add_with_child(n, n.btnbox)
  75. def do_create_numbernode(self, widget=None, data=None):
  76. n = NumberNode()
  77. self.nv.add_with_child(n, n.spinbutton)
  78. def do_create_printnode(self, widget=None, data=None):
  79. n = PrintNode()
  80. self.nv.add_with_child(n, n.childlabel)
  81. def do_quit(self, widget=None, data=None):
  82. Gtk.main_quit()
  83. sys.exit(0)
  84. if __name__ == "__main__":
  85. Calculator()