hgview

changeset 642:f3a1a23c50bf

[console] delay highlighting the source to speed up rendering
author Alain Leufroy <alain.leufroy@logilab.fr>
date Sun, 11 Sep 2011 16:29:23 +0200
parents 28d208a6cc91
children 3e77eb5ecbac
files hgviewlib/curses/widgets.py
diffstat 1 files changed, 11 insertions(+), 3 deletions(-) [+]
line diff
     1.1 --- a/hgviewlib/curses/widgets.py	Sun Sep 11 13:36:23 2011 +0200
     1.2 +++ b/hgviewlib/curses/widgets.py	Sun Sep 11 16:29:23 2011 +0200
     1.3 @@ -19,7 +19,7 @@
     1.4  """
     1.5  A module that contains usefull widgets.
     1.6  """
     1.7 -from urwid import Frame, Text, AttrWrap, ListBox
     1.8 +from urwid import Frame, Text, AttrWrap, ListBox, signals
     1.9  from urwid.util import is_mouse_press
    1.10  
    1.11  try:
    1.12 @@ -101,12 +101,16 @@
    1.13  
    1.14      It cans number lines and highlight content using pygments.
    1.15      """
    1.16 +
    1.17 +    signals = ['highlight']
    1.18 +
    1.19      def __init__(self, text, filename=None, lexer=None, numbering=False,
    1.20                   *args, **kwargs):
    1.21          self._lexer = lexer
    1.22          self.filename = filename
    1.23          self.numbering = numbering
    1.24          super(SourceText, self).__init__(text, *args, **kwargs)
    1.25 +        signals.connect_signal(self, 'highlight', self._highlight)
    1.26  
    1.27      def get_lexer(self):
    1.28          """Return the current source highlighting lexer"""
    1.29 @@ -136,11 +140,15 @@
    1.30          self._lexer = lexer
    1.31          if lexer == None: # No lexer found => finish
    1.32              return
    1.33 -        self.set_text(list(lex(text, self._lexer)))
    1.34 +        signals.delay_emit_signal(self, 'highlight', 0.05)
    1.35 +
    1.36 +    def _highlight(self):
    1.37 +        self.set_text(list(lex(self.text, self._lexer)))
    1.38 +
    1.39      def clear_lexer(self):
    1.40          """Disable source highlighting"""
    1.41          self.set_text(self.text)
    1.42 -    lexer = property(get_lexer, update_lexer, clear_lexer, 
    1.43 +    lexer = property(get_lexer, update_lexer, clear_lexer,
    1.44                       'source highlighting lexer (require pygments)')
    1.45  
    1.46      def render(self, size, focus=False):