Hello,

recently I have started to use Leo editor for outlining my university 
projects and I like it a lot. Also I was really excited about one of its 
plugins, graphcanvas.py, and its ability to automatically layout nodes in 
the graph. I had several problems with this plugin, but was able to fix 
them by modifing the code a bit.

1) Leo crashed after choosing any type of layout

I have installed a pydot package (this one: 
https://pypi.python.org/pypi/pydot, version 1.2.3) via pip and confirmend 
that it worked with my Python 3.5.2 installation.

But when I tried to apply PyDot "neato" layout, Leo crashed with the 
following exception:

Traceback (most recent call last):
  File "/home/nodex/Software/Leo/leo/plugins/graphcanvas.py", line 725, in 
<lambda>
    ('neato', lambda: self.layout('neato')),
  File "/home/nodex/Software/Leo/leo/plugins/graphcanvas.py", line 798, in 
layout
    x,y,width,height = map(float, G.get_bb().strip('"').split(','))
AttributeError: 'list' object has no attribute 'get_bb'

It is line 798 in the graphcanvas.py file. I have some experience with 
debugging Python projects, so after some time I found out why G.get_bb() 
caused Leo to crash - during execution of that line, variable G is a list 
of Dot objects (more specifically, it contains a single Dot object), so it 
is impossible to invoke get_bb() from it. So I have modified that line:

# G.get_bb() -> G[0].get_bb()
x,y,width,height = map(float, G[0].get_bb().strip('"').split(','))

Also another choice forced me to change line 790 because of the same reason:

# G.get_node() -> G[0].get_node()
lst = G[0].get_node(''.join(['"', i.gnx, '"']))

This changes fixed both problems.

This problem may be caused by my choice of pydot package (there are several 
other pydot packages in PyPi).

2) Leo crashed after holding Ctrl and scrolling up (zooming) in the Graph 
pane

Traceback (most recent call last):
  File "/home/nodex/Software/Leo/leo/plugins/graphcanvas.py", line 209, in 
wheelEvent
    scale = 1.+0.1*(event.delta() / 120)
AttributeError: 'QWheelEvent' object has no attribute 'delta'


It is line 209 in the graphcanvas.py file. After some debugging and 
googling I have found out, that I am using PyQt 5.5.1 and in Qt 5 delta() 
method of QWheelEvent class is depracated and replaced by angleDelta() 
method.

PyQt4.8: http://doc.qt.io/qt-4.8/qwheelevent.html#delta
PyQt5: http://doc.qt.io/qt-5/qwheelevent.html#angleDelta

So I have changed this line:

# event.delta() -> event.angleDelta().y()
scale = 1. + 0.1 * (event.angleDelta().y() / 120)

And that fixed the zooming problem.




If these changes are ok, then I would like to contribute them to the 
project. But I have never contributed to any open source projects, so if 
someone could guide me through this process, I would really appreciate it :)


-- 
You received this message because you are subscribed to the Google Groups 
"leo-editor" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/leo-editor.
For more options, visit https://groups.google.com/d/optout.

Reply via email to