Skip to content

Commit

Permalink
update usage of signal_manager
Browse files Browse the repository at this point in the history
also whitespace fix

Leo build: 20170327100836
  • Loading branch information
tbnorth committed Mar 27, 2017
1 parent 757376b commit 904614c
Show file tree
Hide file tree
Showing 10 changed files with 182 additions and 62 deletions.
4 changes: 2 additions & 2 deletions leo/core/commit_timestamp.json
@@ -1,4 +1,4 @@
{
"asctime": "Fri, Mar 24, 2017 5:04:04 PM",
"timestamp": "20170324170404"
"asctime": "Mon, Mar 27, 2017 10:08:36 AM",
"timestamp": "20170327100836"
}
1 change: 1 addition & 0 deletions leo/core/editpane/__init__.py
@@ -0,0 +1 @@

55 changes: 43 additions & 12 deletions leo/core/editpane/editpane.py
Expand Up @@ -14,7 +14,8 @@ def DBG(text):
if g.isPython3:
from importlib import import_module

from signal_manager import SignalManager
import signal_manager as sig

class LeoEditPane(QtWidgets.QWidget):
"""
Leo node body editor / viewer
Expand Down Expand Up @@ -56,13 +57,13 @@ def __init__(self, c=None, p=None, mode='edit', show_head=True, show_control=Fal

self.set_mode(self.mode)

# do this last, max. chance of not registering broken handler
self.handlers = [
('select1', self._before_select),
('select2', self._after_select),
# ('bodykey2', self._after_body_key),
('bodykey2', self._after_body_key),
]
self._register_handlers()

def _add_checkbox(self, text, state_changed, tooltip, checked=True,
enabled=True, button_label=True):
"""
Expand Down Expand Up @@ -101,7 +102,8 @@ def _add_frame(self):
w.layout().setContentsMargins(0, 0, 0, 0)
w.layout().setSpacing(0)
return w
def _after_body_key(self, p): # tag, keywords):

def _after_body_key(self, tag, keywords={}):
"""_after_body_key - after Leo selects another node
FIXME: although class EditCommandsClass-->insert &
Expand All @@ -115,16 +117,23 @@ def _after_body_key(self, p): # tag, keywords):
:return: None
"""

#X c = keywords['c']
#X if c != self.c:
#X return None
if isinstance(tag, str): # Leo hook
c = keywords['c']
if c != self.c:
return None
p = keywords['p']
else: # signal
if sig.is_locked(self):
return
p = tag

DBG("after body key")

if self.update:
self.update_position(p) # keywords['p'])
self.update_position(p)

return None

def _after_select(self, tag, keywords):
"""_after_select - after Leo selects another node
Expand All @@ -143,6 +152,7 @@ def _after_select(self, tag, keywords):
self.new_position(keywords['new_p'])

return None

def _before_select(self, tag, keywords):
"""_before_select - before Leo selects another node
Expand All @@ -164,6 +174,7 @@ def _before_select(self, tag, keywords):
DBG("before select")

return None

def _find_gnx_node(self, gnx):
'''Return the first position having the given gnx.'''
if self.c.p.gnx == gnx:
Expand All @@ -173,14 +184,16 @@ def _find_gnx_node(self, gnx):
return p
g.es("Edit/View pane couldn't find node")
return None

def _register_handlers(self):
"""_register_handlers - attach to Leo signals
"""
DBG("\nregister handlers")
for hook, handler in self.handlers:
g.registerHandler(hook, handler)

SignalManager._signal_connect(self.c, 'body_changed', self._after_body_key)
sig.connect(self.c, 'body_changed', self._after_body_key)

def _build_layout(self, show_head=True, show_control=True, update=True, recurse=False):
"""build_layout - build layout
"""
Expand Down Expand Up @@ -246,23 +259,27 @@ def change_goto(self, state, one_shot=False):
self.goto = one_shot or bool(state)
self.state_changed()
self.goto = bool(state)

def change_recurse(self, state, one_shot=False):
self.recurse = one_shot or bool(state)
self.state_changed()
self.recurse = bool(state)

def change_track(self, state, one_shot=False):
self.track = one_shot or bool(state)
if self.track:
p = self.c.p
self.new_position(p)
self.track = bool(state)

def change_update(self, state, one_shot=False):
self.update = one_shot or bool(state)
if self.update:
p = self.get_position()
if p is not None:
self.new_position(p)
self.update = bool(state)

def close(self):
"""close - clean up
"""
Expand All @@ -273,18 +290,22 @@ def close(self):
for hook, handler in self.handlers:
g.unregisterHandler(hook, handler)
return do_close

def edit_widget_focus(self):
"""edit_widget_focus - edit widget got focus"""
if self.goto:
self.goto_node()

def get_position(self):
"""get_position - get current position"""
return self._find_gnx_node(self.gnx)

def goto_node(self):
"""goto_node - goto node being edited / viewed"""
p = self.get_position()
if p and p != self.c.p:
self.c.selectPosition(p)

def load_modules(self):
"""load_modules - load modules to find widgets
"""
Expand All @@ -311,7 +332,7 @@ def load_modules(self):
if module not in self.modules:
self.modules.append(module)
self.widget_classes.append(value)

def misc_menu(self):
"""build menu on Action button"""

Expand All @@ -333,6 +354,7 @@ def cb(checked, widget_class=widget_class):
act.triggered.connect(cb)
menu.addAction(act)
menu.exec_(self.mapToGlobal(self.control_menu_button.pos()))

def mode_menu(self):
"""build menu on Action button"""
menu = QtWidgets.QMenu()
Expand All @@ -346,6 +368,7 @@ def cb(checked, self=self, mode=mode):
act.setChecked(mode == self.mode)
menu.addAction(act)
menu.exec_(self.mapToGlobal(self.btn_mode.pos()))

def new_position(self, p):
"""new_position - update editor and view for new Leo position
Expand All @@ -358,6 +381,7 @@ def new_position(self, p):

self.new_position_edit(p)
self.new_position_view(p)

def new_position_edit(self, p):
"""new_position_edit - update editor for new position
Expand Down Expand Up @@ -390,7 +414,7 @@ def text_changed(self, new_text):
p = self.get_position()
p.b = new_text

SignalManager._signal_emit(self.c, 'body_changed', p)
sig.emit(self.c, 'body_changed', p, _sig_lock=self)

for lep in self.c._LEPs:
break
Expand All @@ -400,6 +424,7 @@ def text_changed(self, new_text):
self.update_position_view(p)
else:
lep.update_position(lep.get_position())

def update_position(self, p):
"""update_position - update editor and view for current Leo position
Expand All @@ -412,6 +437,7 @@ def update_position(self, p):

self.update_position_edit(p)
self.update_position_view(p)

def update_position_edit(self, p):
"""update_position_edit - update editor for current position
Expand All @@ -424,6 +450,7 @@ def update_position_edit(self, p):
DBG("update edit position")
if self.mode != 'view':
self.edit_widget.update_position(p)

def update_position_view(self, p):
"""update_position_view - update viewer for current position
Expand All @@ -436,10 +463,10 @@ def update_position_view(self, p):
DBG("update view position")
if self.mode != 'edit':
self.view_widget.update_position(p)

def render(self, checked):
pass


def set_widget(self, widget_class=None, lep_type='TEXT'):
"""set_widget - set edit or view widget
Expand Down Expand Up @@ -473,6 +500,7 @@ def set_mode(self, mode):
self.mode = mode
self.btn_mode.setText(u"%s\u25BE" % mode.title())
self.state_changed()

def state_changed(self):
"""state_changed - control state has changed
"""
Expand All @@ -491,3 +519,6 @@ def state_changed(self):
self.view_frame.show()

self.update_position(self.c.p)



11 changes: 10 additions & 1 deletion leo/core/editpane/markdownview.py
Expand Up @@ -4,6 +4,7 @@
import markdown
from webkitview import LEP_WebKitView as HtmlView
from plaintextview import LEP_PlainTextView as TextView

def to_html(text):
"""to_html - convert to HTML
Expand All @@ -19,8 +20,9 @@ def to_html(text):
'markdown.extensions.codehilite',
]
)

class LEP_MarkdownView(HtmlView):
"""LEP_MarkdownView -
"""LEP_MarkdownView -
"""
lep_type = "MARKDOWN"
lep_name = "Markdown(.py) View"
Expand All @@ -29,6 +31,7 @@ def __init__(self, c=None, lep=None, *args, **kwargs):
super(LEP_MarkdownView, self).__init__(c=c, lep=lep, *args, **kwargs)
self.c = c
self.lep = lep

def new_position(self, p):
"""new_position - update for new position
Expand All @@ -38,6 +41,7 @@ def new_position(self, p):
self.setHtml(to_html(g.getScript(self.c, p, useSelectedText=False, useSentinels=False)))
else:
self.setHtml(to_html(p.b))

def update_position(self, p):
"""update_position - update for current position
Expand All @@ -49,6 +53,7 @@ def update_position(self, p):
# self.horizontalScrollBar().setValue(h)
# self.verticalScrollBar().setValue(v)


class LEP_MarkdownHtmlView(TextView):
"""LEP_MarkdownHtmlView - view the HTML for markdown
"""
Expand All @@ -59,6 +64,7 @@ def __init__(self, c=None, lep=None, *args, **kwargs):
super(LEP_MarkdownHtmlView, self).__init__(c=c, lep=lep, *args, **kwargs)
self.c = c
self.lep = lep

def new_position(self, p):
"""new_position - update for new position
Expand All @@ -68,3 +74,6 @@ def new_position(self, p):
self.setPlainText(to_html(g.getScript(self.c, p, useSelectedText=False, useSentinels=False)))
else:
self.setPlainText(to_html(p.b))



11 changes: 10 additions & 1 deletion leo/core/editpane/plaintextedit.py
Expand Up @@ -3,13 +3,13 @@

import time # temporary for debugging

from signal_manager import SignalManager
def DBG(text):
"""DBG - temporary debugging function
:param str text: text to print
"""
print("LEP: %s" % text)

class LEP_PlainTextEdit(QtWidgets.QTextEdit):
"""LEP_PlainTextEdit - simple LeoEditorPane editor
"""
Expand All @@ -21,6 +21,7 @@ def __init__(self, c=None, lep=None, *args, **kwargs):
self.c = c
self.lep = lep
self.textChanged.connect(self.text_changed)

def focusInEvent (self, event):
QtWidgets.QTextEdit.focusInEvent(self, event)
DBG("focusin()")
Expand All @@ -33,12 +34,14 @@ def focusOutEvent (self, event):
#X p = self.lep.get_position()
#X p.b = self.toPlainText()
#X self.lep.c.redraw()

def new_position(self, p):
"""new_position - update for new position
:param Leo position p: new position
"""
self.setText(p.b)

def text_changed(self):
"""text_changed - text editor text changed"""
if QtWidgets.QApplication.focusWidget() == self:
Expand All @@ -47,13 +50,16 @@ def text_changed(self):

else:
DBG("text changed, NOT focused")

def update_position(self, p):
"""update_position - update for current position
:param Leo position p: current position
"""
DBG("update editor position")
self.setText(p.b)


class LEP_PlainTextEditB(LEP_PlainTextEdit):
"""LEP_PlainTextEditB - copy of LEP_PlainTextEdit with different
background color to test multiple edtitors
Expand All @@ -63,3 +69,6 @@ def __init__(self, c=None, lep=None, *args, **kwargs):
"""set up"""
super(LEP_PlainTextEditB, self).__init__(c=c, lep=lep, *args, **kwargs)
self.setStyleSheet("* {background: #989; color: #222; }")



0 comments on commit 904614c

Please sign in to comment.