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

Code style fixup.

File:
1 edited

Legend:

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

    r11216 r11327  
    33<description>Executes python script.</description> 
    44<icon>icons/PythonScript.svg</icon> 
    5 <contact>Miha Stajdohar (miha.stajdohar(@at@)gmail.com)</contact>  
     5<contact>Miha Stajdohar (miha.stajdohar(@at@)gmail.com)</contact> 
    66<priority>3150</priority> 
    77""" 
     8import sys 
     9import os 
     10import code 
     11import keyword 
     12 
     13from PyQt4.QtGui import ( 
     14    QSyntaxHighlighter, QPlainTextEdit, QTextCharFormat, QTextCursor, 
     15    QTextDocument, QPlainTextDocumentLayout, QBrush, QFont, QColor, QPalette, 
     16    QStyledItemDelegate, QStyleOptionViewItemV4, QLineEdit, QListView, 
     17    QSizePolicy, QAction, QMenu, QKeySequence, QSplitter, QToolButton, 
     18    QItemSelectionModel, QFileDialog 
     19) 
     20 
     21from PyQt4.QtCore import Qt, QRegExp, QByteArray 
     22from PyQt4.QtCore import SIGNAL 
     23 
    824from OWWidget import * 
    925 
    10 import sys, traceback 
     26from OWItemModels import PyListModel, ModelActionsWidget 
     27 
    1128import OWGUI 
    1229import Orange 
    13  
    14 import code 
    1530 
    1631 
     
    2944        self.decoratorFormat = QTextCharFormat() 
    3045        self.decoratorFormat.setForeground(QBrush(Qt.darkGray)) 
    31          
    32         self.keywords = ["def", "if", "else", "elif", "for", "while", "with", "try", "except", 
    33                          "finally", "not", "in", "lambda", "None", "import", "class", "return", "print", 
    34                          "yield", "break", "continue", "raise", "or", "and", "True", "False", "pass", 
    35                          "from", "as"] 
    36         self.rules = [(QRegExp(r"\b%s\b" % keyword), self.keywordFormat) for keyword in self.keywords] + \ 
    37                      [(QRegExp(r"\bdef\s+([A-Za-z_]+[A-Za-z0-9_]+)\s*\("), self.defFormat), 
    38                       (QRegExp(r"\bclass\s+([A-Za-z_]+[A-Za-z0-9_]+)\s*\("), self.defFormat), 
     46 
     47        self.keywords = list(keyword.kwlist) 
     48 
     49        self.rules = [(QRegExp(r"\b%s\b" % kwd), self.keywordFormat) 
     50                      for kwd in self.keywords] + \ 
     51                     [(QRegExp(r"\bdef\s+([A-Za-z_]+[A-Za-z0-9_]+)\s*\("), 
     52                       self.defFormat), 
     53                      (QRegExp(r"\bclass\s+([A-Za-z_]+[A-Za-z0-9_]+)\s*\("), 
     54                       self.defFormat), 
    3955                      (QRegExp(r"'.*'"), self.stringFormat), 
    4056                      (QRegExp(r'".*"'), self.stringFormat), 
    4157                      (QRegExp(r"#.*"), self.commentFormat), 
    42                       (QRegExp(r"@[A-Za-z_]+[A-Za-z0-9_]+"), self.decoratorFormat)] 
    43                       
     58                      (QRegExp(r"@[A-Za-z_]+[A-Za-z0-9_]+"), 
     59                       self.decoratorFormat)] 
     60 
     61        self.multilineStart = QRegExp(r"(''')|" + r'(""")') 
     62        self.multilineEnd = QRegExp(r"(''')|" + r'(""")') 
     63 
    4464        QSyntaxHighlighter.__init__(self, parent) 
    45          
     65 
    4666    def highlightBlock(self, text): 
    4767        for pattern, format in self.rules: 
     
    5575                    self.setFormat(exp.pos(0), len(str(exp.cap(0))), format) 
    5676                index = exp.indexIn(text, index + length) 
    57                  
    58         ## Multi line strings 
    59         start = QRegExp(r"(''')|" + r'(""")') 
    60         end = QRegExp(r"(''')|" + r'(""")') 
     77 
     78        # Multi line strings 
     79        start = self.multilineStart 
     80        end = self.multilineEnd 
     81 
    6182        self.setCurrentBlockState(0) 
    6283        startIndex, skip = 0, 0 
     
    7192                commentLen = endIndex - startIndex + 3 
    7293            self.setFormat(startIndex, commentLen, self.stringFormat) 
    73             startIndex, skip = start.indexIn(text, startIndex + commentLen + 3), 3 
    74                  
     94            startIndex, skip = (start.indexIn(text, 
     95                                              startIndex + commentLen + 3), 
     96                                3) 
     97 
     98 
    7599class PythonScriptEditor(QPlainTextEdit): 
    76100    INDENT = 4 
     101 
    77102    def lastLine(self): 
    78103        text = str(self.toPlainText()) 
     
    81106        text = text[index: pos].lstrip("\n") 
    82107        return text 
    83      
     108 
    84109    def keyPressEvent(self, event): 
    85110        if event.key() == Qt.Key_Return: 
    86111            text = self.lastLine() 
    87112            indent = len(text) - len(text.lstrip()) 
    88             if text.strip() == "pass" or text.strip().startswith("return"): 
     113            if text.strip() == "pass" or text.strip().startswith("return "): 
    89114                indent = max(0, indent - self.INDENT) 
    90115            elif text.strip().endswith(":"): 
     
    102127            else: 
    103128                QPlainTextEdit.keyPressEvent(self, event) 
    104                  
     129 
    105130        else: 
    106131            QPlainTextEdit.keyPressEvent(self, event) 
    107          
     132 
     133 
    108134class PythonConsole(QPlainTextEdit, code.InteractiveConsole): 
    109     def __init__(self, locals = None, parent=None): 
     135    def __init__(self, locals=None, parent=None): 
    110136        QPlainTextEdit.__init__(self, parent) 
    111137        code.InteractiveConsole.__init__(self, locals) 
     
    113139        self.loop = self.interact() 
    114140        self.loop.next() 
    115          
     141 
    116142    def setLocals(self, locals): 
    117143        self.locals = locals 
    118          
     144 
    119145    def interact(self, banner=None): 
    120146        try: 
     
    126152        except AttributeError: 
    127153            sys.ps2 = "... " 
    128         cprt = 'Type "help", "copyright", "credits" or "license" for more information.' 
     154        cprt = ('Type "help", "copyright", "credits" or "license" ' 
     155                'for more information.') 
    129156        if banner is None: 
    130157            self.write("Python %s on %s\n%s\n(%s)\n" % 
     
    153180                self.resetbuffer() 
    154181                more = 0 
    155                  
     182 
    156183    def raw_input(self, prompt): 
    157184        input = str(self.document().lastBlock().previous().text()) 
    158185        return input[len(prompt):] 
    159          
     186 
    160187    def new_prompt(self, prompt): 
    161188        self.write(prompt) 
    162189        self.newPromptPos = self.textCursor().position() 
    163          
     190 
    164191    def write(self, data): 
    165192        cursor = QTextCursor(self.document()) 
     
    168195        self.setTextCursor(cursor) 
    169196        self.ensureCursorVisible() 
    170          
     197 
    171198    def push(self, line): 
    172199        if self.history[0] != line: 
    173200            self.history.insert(0, line) 
    174201        self.historyInd = 0 
    175         more = 0 
     202 
    176203        saved = sys.stdout, sys.stderr 
    177204        try: 
     
    180207        finally: 
    181208            sys.stdout, sys.stderr = saved 
    182              
     209 
    183210    def setLine(self, line): 
    184211        cursor = QTextCursor(self.document()) 
     
    188215        cursor.insertText(line) 
    189216        self.setTextCursor(cursor) 
    190          
     217 
    191218    def keyPressEvent(self, event): 
    192219        if event.key() == Qt.Key_Return: 
     
    204231        else: 
    205232            QPlainTextEdit.keyPressEvent(self, event) 
    206              
     233 
    207234    def historyUp(self): 
    208235        self.setLine(self.history[self.historyInd]) 
    209236        self.historyInd = min(self.historyInd + 1, len(self.history) - 1) 
    210          
     237 
    211238    def historyDown(self): 
    212239        self.setLine(self.history[self.historyInd]) 
    213240        self.historyInd = max(self.historyInd - 1, 0) 
    214          
     241 
    215242    def complete(self): 
    216243        pass 
    217      
    218 from OWItemModels import PyListModel, ModelActionsWidget 
     244 
    219245 
    220246class Script(object): 
    221247    Modified = 1 
    222     MissingFromFilesystem = 2  
     248    MissingFromFilesystem = 2 
     249 
    223250    def __init__(self, name, script, flags=0, sourceFileName=None): 
    224251        self.name = name 
     
    228255        self.modifiedScript = None 
    229256 
     257 
    230258class ScriptItemDelegate(QStyledItemDelegate): 
    231259    def __init__(self, parent): 
    232260        QStyledItemDelegate.__init__(self, parent) 
    233          
     261 
    234262    def displayText(self, variant, locale): 
    235263        script = variant.toPyObject() 
     
    238266        else: 
    239267            return QString(script.name) 
    240      
     268 
    241269    def paint(self, painter, option, index): 
    242270        script = index.data(Qt.DisplayRole).toPyObject() 
    243         tmp_palette = None 
     271 
    244272        if script.flags & Script.Modified: 
    245273            option = QStyleOptionViewItemV4(option) 
     
    248276        QStyledItemDelegate.paint(self, painter, option, index) 
    249277 
    250          
    251278    def createEditor(self, parent, option, index): 
    252279        return QLineEdit(parent) 
    253      
     280 
    254281    def setEditorData(self, editor, index): 
    255282        script = index.data(Qt.DisplayRole).toPyObject() 
    256283        editor.setText(script.name) 
    257          
     284 
    258285    def setModelData(self, editor, model, index): 
    259286        model[index.row()].name = str(editor.text()) 
    260          
     287 
     288 
    261289class OWPythonScript(OWWidget): 
    262      
    263     settingsList = ["codeFile", "libraryListSource", "currentScriptIndex", "splitterState"] 
    264                      
     290 
     291    settingsList = ["codeFile", "libraryListSource", "currentScriptIndex", 
     292                    "splitterState"] 
     293 
    265294    def __init__(self, parent=None, signalManager=None): 
    266295        OWWidget.__init__(self, parent, signalManager, 'Python Script') 
    267          
    268         self.inputs = [("in_data", ExampleTable, self.setExampleTable), ("in_distance", orange.SymMatrix, self.setDistanceMatrix), ("in_learner", orange.Learner, self.setLearner), ("in_classifier", orange.Classifier, self.setClassifier)] 
    269         self.outputs = [("out_data", ExampleTable), ("out_distance", orange.SymMatrix), ("out_learner", orange.Learner), ("out_classifier", orange.Classifier, Dynamic)] 
     296 
     297        self.inputs = [("in_data", ExampleTable, self.setExampleTable), 
     298                       ("in_distance", orange.SymMatrix, 
     299                        self.setDistanceMatrix), 
     300                       ("in_learner", orange.Learner, self.setLearner), 
     301                       ("in_classifier", orange.Classifier, 
     302                        self.setClassifier)] 
     303 
     304        self.outputs = [("out_data", ExampleTable), 
     305                        ("out_distance", orange.SymMatrix), 
     306                        ("out_learner", orange.Learner), 
     307                        ("out_classifier", orange.Classifier, Dynamic)] 
    270308 
    271309        try: 
     
    280318        self.in_learner = None 
    281319        self.in_classifier = None 
    282          
     320 
    283321        self.codeFile = '' 
    284         self.libraryListSource = [Script("Hello world", "print 'Hello world'\n")] 
     322        self.libraryListSource = [Script("Hello world", 
     323                                         "print 'Hello world'\n")] 
    285324        self.currentScriptIndex = 0 
    286325        self.splitterState = None 
    287326        self.loadSettings() 
    288          
     327 
    289328        for s in self.libraryListSource: 
    290329            s.flags = 0 
    291          
     330 
    292331        self._cachedDocuments = {} 
    293          
     332 
    294333        self.infoBox = OWGUI.widgetBox(self.controlArea, 'Info') 
    295         label = OWGUI.label(self.infoBox, self, "<p>Execute python script.</p><p>Input variables:<ul><li> " + \ 
    296                     "<li>".join(t[0] for t in self.inputs) + "</ul></p><p>Output variables:<ul><li>" + \ 
    297                     "<li>".join(t[0] for t in self.outputs) + "</ul></p>") 
    298         self.libraryList = PyListModel([], self, flags=Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsEditable) 
    299 #        self.libraryList.append(Script("Hello world", "print 'Hello world'\n")) 
     334        OWGUI.label( 
     335            self.infoBox, self, 
     336            "<p>Execute python script.</p><p>Input variables:<ul><li> " + \ 
     337            "<li>".join(t[0] for t in self.inputs) + \ 
     338            "</ul></p><p>Output variables:<ul><li>" + \ 
     339            "<li>".join(t[0] for t in self.outputs) + \ 
     340            "</ul></p>" 
     341        ) 
     342 
     343        self.libraryList = PyListModel([], self, flags=Qt.ItemIsSelectable | \ 
     344                                       Qt.ItemIsEnabled | Qt.ItemIsEditable) 
     345 
    300346        self.libraryList.wrap(self.libraryListSource) 
    301          
     347 
    302348        self.controlBox = OWGUI.widgetBox(self.controlArea, 'Library') 
    303349        self.controlBox.layout().setSpacing(1) 
     350 
    304351        self.libraryView = QListView() 
    305         self.libraryView.setEditTriggers(QListView.DoubleClicked | QListView.EditKeyPressed) 
    306         self.libraryView.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Preferred) 
     352        self.libraryView.setEditTriggers(QListView.DoubleClicked | \ 
     353                                         QListView.EditKeyPressed) 
     354        self.libraryView.setSizePolicy(QSizePolicy.Ignored, 
     355                                       QSizePolicy.Preferred) 
    307356        self.libraryView.setItemDelegate(ScriptItemDelegate(self)) 
    308357        self.libraryView.setModel(self.libraryList) 
    309         self.connect(self.libraryView.selectionModel(), SIGNAL("selectionChanged(QItemSelection, QItemSelection)"), self.onSelectedScriptChanged) 
     358 
     359        self.connect(self.libraryView.selectionModel(), 
     360                     SIGNAL("selectionChanged(QItemSelection, QItemSelection)"), 
     361                     self.onSelectedScriptChanged) 
    310362        self.controlBox.layout().addWidget(self.libraryView) 
     363 
    311364        w = ModelActionsWidget() 
    312          
     365 
    313366        self.addNewScriptAction = action = QAction("+", self) 
    314         action.pyqtConfigure(toolTip="Add a new script to the library") 
     367        action.setToolTip("Add a new script to the library") 
    315368        self.connect(action, SIGNAL("triggered()"), self.onAddScript) 
    316         new_empty = QAction("Add a new empty script", action) 
    317         new_from_file = QAction("Add a new script from a file", action) 
    318         self.connect(new_empty, SIGNAL("triggered()"), self.onAddScript) 
    319         self.connect(new_from_file, SIGNAL("triggered()"), self.onAddScriptFromFile) 
    320         menu = QMenu(w) 
    321         menu.addAction(new_empty) 
    322         menu.addAction(new_from_file) 
    323          
    324 #        action.setMenu(menu) 
    325         button = w.addAction(action) 
    326          
     369        w.addAction(action) 
     370 
    327371        self.removeAction = action = QAction("-", self) 
    328         action.pyqtConfigure(toolTip="Remove script from library") 
     372        action.setToolTip("Remove script from library") 
    329373        self.connect(action, SIGNAL("triggered()"), self.onRemoveScript) 
    330374        w.addAction(action) 
    331          
     375 
    332376        action = QAction("Update", self) 
    333         action.pyqtConfigure(toolTip="Save changes in the editor to library") 
     377        action.setToolTip("Save changes in the editor to library") 
    334378        action.setShortcut(QKeySequence(QKeySequence.Save)) 
    335         self.connect(action, SIGNAL("triggered()"), self.commitChangesToLibrary) 
    336         b = w.addAction(action) 
    337 #        b.setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Fixed) 
    338          
     379        self.connect(action, SIGNAL("triggered()"), 
     380                     self.commitChangesToLibrary) 
     381        w.addAction(action) 
     382 
    339383        action = QAction("More", self) 
    340         action.pyqtConfigure(toolTip="More actions") #, icon=self.style().standardIcon(QStyle.SP_ToolBarHorizontalExtensionButton)) 
    341          
    342         self.openScriptFromFileAction = new_from_file = QAction("Import a script from a file", self) 
    343         self.saveScriptToFile = save_to_file = QAction("Save selected script to a file", self) 
     384        action.pyqtConfigure(toolTip="More actions") 
     385 
     386        new_from_file = QAction("Import a script from a file", self) 
     387        save_to_file = QAction("Save selected script to a file", self) 
    344388        save_to_file.setShortcut(QKeySequence(QKeySequence.SaveAs)) 
    345          
    346         self.connect(new_from_file, SIGNAL("triggered()"), self.onAddScriptFromFile) 
     389 
     390        self.connect(new_from_file, SIGNAL("triggered()"), 
     391                     self.onAddScriptFromFile) 
    347392        self.connect(save_to_file, SIGNAL("triggered()"), self.saveScript) 
    348          
     393 
    349394        menu = QMenu(w) 
    350395        menu.addAction(new_from_file) 
    351396        menu.addAction(save_to_file) 
    352397        action.setMenu(menu) 
    353         b = w.addAction(action) 
    354         b.setPopupMode(QToolButton.InstantPopup)  
    355         ## TODO: set the space for the indicator 
    356          
     398        button = w.addAction(action) 
     399        button.setPopupMode(QToolButton.InstantPopup) 
     400 
    357401        w.layout().setSpacing(1) 
    358          
     402 
    359403        self.controlBox.layout().addWidget(w) 
    360                      
    361 #        OWGUI.button(self.controlBox, self, "Open...", callback=self.openScript) 
    362 #        OWGUI.button(self.controlBox, self, "Save...", callback=self.saveScript) 
    363          
     404 
    364405        self.runBox = OWGUI.widgetBox(self.controlArea, 'Run') 
    365406        OWGUI.button(self.runBox, self, "Execute", callback=self.execute) 
    366          
     407 
    367408        self.splitCanvas = QSplitter(Qt.Vertical, self.mainArea) 
    368409        self.mainArea.layout().addWidget(self.splitCanvas) 
    369          
    370         self.defaultFont = defaultFont = "Monaco" if sys.platform == "darwin" else "Courier" 
     410 
     411        self.defaultFont = defaultFont = \ 
     412            "Monaco" if sys.platform == "darwin" else "Courier" 
     413 
    371414        self.textBox = OWGUI.widgetBox(self, 'Python script') 
    372415        self.splitCanvas.addWidget(self.textBox) 
    373416        self.text = PythonScriptEditor(self) 
    374417        self.textBox.layout().addWidget(self.text) 
    375          
     418 
    376419        self.textBox.setAlignment(Qt.AlignVCenter) 
    377420        self.text.setTabStopWidth(4) 
    378          
    379         self.connect(self.text, SIGNAL("modificationChanged(bool)"), self.onModificationChanged) 
    380          
     421 
     422        self.connect(self.text, SIGNAL("modificationChanged(bool)"), 
     423                     self.onModificationChanged) 
     424 
    381425        self.saveAction = action = QAction("&Save", self.text) 
    382         action.pyqtConfigure(toolTip="Save script to file") 
     426        action.setToolTip("Save script to file") 
    383427        action.setShortcut(QKeySequence(QKeySequence.Save)) 
    384428        action.setShortcutContext(Qt.WidgetWithChildrenShortcut) 
    385429        self.connect(action, SIGNAL("triggered()"), self.saveScript) 
    386          
     430 
    387431        self.consoleBox = OWGUI.widgetBox(self, 'Console') 
    388432        self.splitCanvas.addWidget(self.consoleBox) 
     
    392436        self.consoleBox.setAlignment(Qt.AlignBottom) 
    393437        self.console.setTabStopWidth(4) 
    394          
     438 
    395439        self.openScript(self.codeFile) 
    396440        try: 
    397             self.libraryView.selectionModel().select(self.libraryList.index(self.currentScriptIndex), QItemSelectionModel.ClearAndSelect) 
     441            self.libraryView.selectionModel().select( 
     442                self.libraryList.index(self.currentScriptIndex), 
     443                QItemSelectionModel.ClearAndSelect 
     444            ) 
    398445        except Exception: 
    399446            pass 
     447 
    400448        self.splitCanvas.setSizes([2, 1]) 
    401449        if self.splitterState is not None: 
    402450            self.splitCanvas.restoreState(QByteArray(self.splitterState)) 
    403          
    404         self.connect(self.splitCanvas, SIGNAL("splitterMoved(int, int)"), lambda pos, ind: setattr(self, "splitterState", str(self.splitCanvas.saveState()))) 
     451 
     452        self.connect(self.splitCanvas, SIGNAL("splitterMoved(int, int)"), 
     453                     self.onSpliterMoved) 
    405454        self.controlArea.layout().addStretch(1) 
    406         self.resize(800,600) 
    407          
     455        self.resize(800, 600) 
     456 
    408457    def setExampleTable(self, et): 
    409458        self.in_data = et 
    410          
     459 
    411460    def setDistanceMatrix(self, dm): 
    412461        self.in_distance = dm 
    413          
     462 
    414463    def setNetwork(self, net): 
    415464        self.in_network = net 
    416          
     465 
    417466    def setLearner(self, learner): 
    418467        self.in_learner = learner 
    419          
     468 
    420469    def setClassifier(self, classifier): 
    421470        self.in_classifier = classifier 
    422          
     471 
    423472    def selectedScriptIndex(self): 
    424473        rows = self.libraryView.selectionModel().selectedRows() 
     
    427476        else: 
    428477            return None 
    429          
     478 
    430479    def setSelectedScript(self, index): 
    431480        selection = self.libraryView.selectionModel() 
    432         selection.select(self.libraryList.index(index), QItemSelectionModel.ClearAndSelect) 
    433          
     481        selection.select(self.libraryList.index(index), 
     482                         QItemSelectionModel.ClearAndSelect) 
     483 
    434484    def onAddScript(self, *args): 
    435485        self.libraryList.append(Script("New script", "", 0)) 
    436486        self.setSelectedScript(len(self.libraryList) - 1) 
    437          
     487 
    438488    def onAddScriptFromFile(self, *args): 
    439         file = QFileDialog.getOpenFileName(self, 'Open Python Script', self.codeFile, 'Python files (*.py)\nAll files(*.*)') 
    440         file = unicode(file) 
    441         if file: 
    442             name = os.path.basename(file) 
    443             self.libraryList.append(Script(name, open(file, "rb").read(), 0, file)) 
     489        filename = QFileDialog.getOpenFileName( 
     490            self, 'Open Python Script', 
     491            self.codeFile, 
     492            'Python files (*.py)\nAll files(*.*)' 
     493        ) 
     494 
     495        filename = unicode(filename) 
     496        if filename: 
     497            name = os.path.basename(filename) 
     498            self.libraryList.append(Script(name, open(filename, "rb").read(), 
     499                                           0, filename)) 
    444500            self.setSelectedScript(len(self.libraryList) - 1) 
    445      
     501 
    446502    def onRemoveScript(self, *args): 
    447503        index = self.selectedScriptIndex() 
    448504        if index is not None: 
    449505            del self.libraryList[index] 
    450             self.libraryView.selectionModel().select(self.libraryList.index(max(index - 1, 0)), QItemSelectionModel.ClearAndSelect) 
    451      
     506 
     507            self.libraryView.selectionModel().select( 
     508                self.libraryList.index(max(index - 1, 0)), 
     509                QItemSelectionModel.ClearAndSelect 
     510            ) 
     511 
    452512    def onSaveScriptToFile(self, *args): 
    453513        index = self.selectedScriptIndex() 
    454514        if index is not None: 
    455515            self.saveScript() 
    456              
     516 
    457517    def onSelectedScriptChanged(self, selected, deselected): 
    458518        index = [i.row() for i in selected.indexes()] 
    459519        if index: 
    460             current = index[0]  
     520            current = index[0] 
    461521            if current >= len(self.libraryList): 
    462522                self.addNewScriptAction.trigger() 
    463523                return 
     524 
    464525            self.text.setDocument(self.documentForScript(current)) 
    465526            self.currentScriptIndex = current 
    466              
     527 
    467528    def documentForScript(self, script=0): 
    468529        if type(script) != Script: 
    469530            script = self.libraryList[script] 
     531 
    470532        if script not in self._cachedDocuments: 
    471533            doc = QTextDocument(self) 
     
    474536            doc.setDefaultFont(QFont(self.defaultFont)) 
    475537            doc.highlighter = PythonSyntaxHighlighter(doc) 
    476             self.connect(doc, SIGNAL("modificationChanged(bool)"), self.onModificationChanged) 
     538            self.connect(doc, SIGNAL("modificationChanged(bool)"), 
     539                         self.onModificationChanged) 
    477540            doc.setModified(False) 
    478541            self._cachedDocuments[script] = doc 
    479542        return self._cachedDocuments[script] 
    480      
     543 
    481544    def commitChangesToLibrary(self, *args): 
    482545        index = self.selectedScriptIndex() 
     
    485548            self.text.document().setModified(False) 
    486549            self.libraryList.emitDataChanged(index) 
    487              
     550 
    488551    def onModificationChanged(self, modified): 
    489552        index = self.selectedScriptIndex() 
     
    491554            self.libraryList[index].flags = Script.Modified if modified else 0 
    492555            self.libraryList.emitDataChanged(index) 
    493          
     556 
     557    def onSpliterMoved(self, pos, ind): 
     558        self.splitterState = str(self.splitCanvas.saveState()) 
     559 
    494560    def updateSelecetdScriptState(self): 
    495561        index = self.selectedScriptIndex() 
    496562        if index is not None: 
    497563            script = self.libraryList[index] 
    498             self.libraryList[index] = Script(script.name, self.text.toPlainText(), 0) 
    499              
     564            self.libraryList[index] = Script(script.name, 
     565                                             self.text.toPlainText(), 
     566                                             0) 
     567 
    500568    def openScript(self, filename=None): 
    501569        if filename == None: 
    502             filename = unicode(QFileDialog.getOpenFileName(self, 'Open Python Script', 
    503                                self.codeFile, 'Python files (*.py)\nAll files(*.*)')) 
     570            filename = QFileDialog.getOpenFileName( 
     571                self, 'Open Python Script', 
     572                self.codeFile, 
     573                'Python files (*.py)\nAll files(*.*)' 
     574            ) 
     575 
     576            filename = unicode(filename) 
    504577            self.codeFile = filename 
    505578        else: 
    506579            self.codeFile = filename 
    507              
     580 
    508581        if self.codeFile == "": 
    509582            return 
    510              
     583 
    511584        self.error(0) 
    512585        try: 
     
    515588            self.text.setPlainText("") 
    516589            return 
    517          
     590 
    518591        self.text.setPlainText(f.read()) 
    519592        f.close() 
    520      
     593 
    521594    def saveScript(self): 
    522595        index = self.selectedScriptIndex() 
     
    526599        else: 
    527600            filename = self.codeFile 
    528         filename = QFileDialog.getSaveFileName(self, 'Save Python Script', 
    529                             filename, 'Python files (*.py)\nAll files(*.*)')  
     601        filename = QFileDialog.getSaveFileName( 
     602            self, 'Save Python Script', 
     603            filename, 
     604            'Python files (*.py)\nAll files(*.*)' 
     605        ) 
     606 
    530607        self.codeFile = unicode(filename) 
    531          
     608 
    532609        if self.codeFile: 
    533610            fn = "" 
     
    537614            else: 
    538615                fn = self.codeFile 
    539              
     616 
    540617            f = open(fn, 'w') 
    541618            f.write(self.text.toPlainText()) 
    542619            f.close() 
    543              
     620 
    544621    def execute(self): 
    545622        self._script = str(self.text.toPlainText()) 
     
    551628            self.send(signal, getattr(self, signal, None)) 
    552629 
    553 if __name__=="__main__":     
     630 
     631if __name__ == "__main__": 
    554632    appl = QApplication(sys.argv) 
    555633    ow = OWPythonScript() 
Note: See TracChangeset for help on using the changeset viewer.