Changeset 11364:f25b850d417f in orange


Ignore:
Timestamp:
02/28/13 14:14:22 (14 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Added support for pasting code into the console widget.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeWidgets/Data/OWPythonScript.py

    r11330 r11364  
    1010import code 
    1111import keyword 
     12import itertools 
    1213 
    1314from PyQt4.QtGui import ( 
     
    243244        pass 
    244245 
     246    def _moveCursorToInputLine(self): 
     247        """ 
     248        Move the cursor to the input line if not already there. If the cursor 
     249        if already in the input line (at position greater or equal to 
     250        `newPromptPos`) it is left unchanged, otherwise it is moved at the 
     251        end. 
     252 
     253        """ 
     254        cursor = self.textCursor() 
     255        pos = cursor.position() 
     256        if pos < self.newPromptPos: 
     257            cursor.movePosition(QTextCursor.End) 
     258            self.setTextCursor(cursor) 
     259 
     260    def pasteCode(self, source): 
     261        """ 
     262        Paste source code into the console. 
     263        """ 
     264        self._moveCursorToInputLine() 
     265 
     266        for line in interleave(source.splitlines(), itertools.repeat("\n")): 
     267            if line != "\n": 
     268                self.insertPlainText(line) 
     269            else: 
     270                self.write("\n") 
     271                self.loop.next() 
     272 
     273    def insertFromMimeData(self, source): 
     274        """ 
     275        Reimplemented from QPlainTextEdit.insertFromMimeData. 
     276        """ 
     277        if source.hasText(): 
     278            self.pasteCode(unicode(source.text())) 
     279            return 
     280 
     281 
     282def interleave(seq1, seq2): 
     283    """ 
     284    Interleave elements of `seq2` between consecutive elements of `seq1`. 
     285 
     286        >>> list(interleave([1, 3, 5], [2, 4])) 
     287        [1, 2, 3, 4, 5] 
     288 
     289    """ 
     290    iterator1, iterator2 = iter(seq1), iter(seq2) 
     291    leading = next(iterator1) 
     292    for element in iterator1: 
     293        yield leading 
     294        yield next(iterator2) 
     295        leading = element 
     296 
     297    yield leading 
     298 
    245299 
    246300class Script(object): 
Note: See TracChangeset for help on using the changeset viewer.