Changeset 9123:57f5fd2c13eb in orange


Ignore:
Timestamp:
10/19/11 16:43:46 (2 years ago)
Author:
ales_erjavec <ales.erjavec@…>
Branch:
default
Convert:
adef537a57bfbe62e5279e3e2ad2dd5bfd402778
Message:

Using QFileSystemWatcher for watch for changes in the device file.
Fixed R console error handling.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/Prototypes/OWRScript.py

    r8042 r9123  
    1313globalenv = r.globalenv 
    1414 
     15import rpy2.rinterface 
    1516import rpy2.robjects as robjects 
    1617import rpy2.rlike.container as rlc 
     
    3031        try: 
    3132            r_res = self._rpy(line) 
    32             self.write(r_res.r_repr()) 
     33            if not isinstance(r_res, rpy2.rinterface.RNULLType): 
     34                self.write(r_res.r_repr()) 
     35        except rpy2.rinterface.RRuntimeError, ex: 
     36            self.write(ex.message) 
    3337        except Exception, ex: 
    3438            self.write(repr(ex)) 
     
    202206        self.scriptLibraryList = [RScript("New script", "x <- c(1,2,5)\ny <- c(2,1 6)\nplot(x,y)\n")] 
    203207        self.selectedScriptIndex = 0 
     208        self.selectedGrDev = "PNG" 
    204209         
    205210        self.lastDir = os.path.expanduser("~/script.R") 
     
    235240        box = OWGUI.widgetBox(self.controlArea, "Run") 
    236241        OWGUI.button(box, self, "Execute", callback=self.runScript, tooltip="Execute the script") 
     242         
    237243        OWGUI.rubber(self.controlArea) 
    238244         
     
    248254        self._cachedDocuments = {} 
    249255         
     256        self.grView = QLabel() 
     257         
    250258        self.resize(800, 600) 
    251259        QTimer.singleShot(30, self.initGrDevice) 
    252260         
    253261    def initGrDevice(self): 
    254 #        from rpy2.robjects.packages import importr 
    255 #        grdevices = importr('grDevices') 
    256262        import tempfile 
    257         self.grDevFile = tempfile.NamedTemporaryFile("rwb", prefix="orange-rscript-grDev", suffix=".png",  delete=False) 
     263        self.grDevFile = tempfile.NamedTemporaryFile("rwb", prefix="orange-rscript-grDev", suffix=".png", delete=False) 
    258264        self.grDevFile.close() 
    259265        robjects.r('png("%s", width=512, height=512)' % self.grDevFile.name) 
    260         print "Temp bitmap file", self.grDevFile.name 
    261 #        self.fileWatcher = QFileSystemWatcher(self) 
    262 #        self.connect(self.fileWatcher, SIGNAL("fileChanged(QString)"), self.updateGraphicsView) 
    263          
    264      
     266        self.fileWatcher = QFileSystemWatcher(self) 
     267        self.fileWatcher.addPath(self.grDevFile.name) 
     268        self.connect(self.fileWatcher, SIGNAL("fileChanged(QString)"), self.updateGraphicsView) 
     269         
    265270    def updateGraphicsView(self, filename): 
    266         self.grView = w = QLabel() 
    267         w.setPixmap(QPixmap(filename)) 
    268         w.show() 
    269  
    270          
     271        self.grView.setPixmap(QPixmap(filename)) 
     272        self.grView.show() 
     273        if self.grDevFile.name not in list(self.fileWatcher.files()): 
     274            # The file can be removed and recreated by R, in which case we need to re-add it 
     275            self.fileWatcher.addPath(self.grDevFile.name) 
     276 
    271277    def selectScript(self, index): 
    272278        index = self.libraryModel.index(index) 
    273279        self.libraryView.selectionModel().select(index, QItemSelectionModel.ClearAndSelect) 
    274          
    275280         
    276281    def selectedScript(self): 
     
    282287            return None 
    283288         
    284          
    285289    def onAddNewScript(self): 
    286290        self.libraryModel.append(RScript("New Script", "")) 
    287291        self.selectScript(len(self.libraryModel) - 1) 
    288292         
    289          
    290293    def onRemoveScript(self): 
    291294        row = self.selectedScript() 
    292295        if row is not None: 
    293296            del self.libraryModel[row] 
    294          
    295297         
    296298    def onUpdateScript(self): 
     
    299301            self.libraryModel[row].script = str(self.scriptEdit.toPlainText()) 
    300302            self.scriptEdit.document().setModified(False) 
    301             self.libraryModel.emitDataChanged([row]) 
    302              
     303            self.libraryModel.emitDataChanged([row])    
    303304         
    304305    def onAddScriptFromFile(self): 
     
    308309            self.lastDir, name = os.path.split(filename) 
    309310            self.libraryModel.append(RScript(name, script, sourceFileName=filename)) 
    310             self.selectScript(len(self.libraryModel) - 1) 
    311              
     311            self.selectScript(len(self.libraryModel) - 1)    
    312312             
    313313    def onSaveScriptToFile(self): 
     
    321321                script.flags = 0 
    322322                open(filename, "wb").write(script.script) 
    323                  
    324                  
     323                        
    325324    def onScriptSelection(self, *args): 
    326325        row = self.selectedScript() 
    327326        if row is not None: 
    328327            self.scriptEdit.setDocument(self.documentForScript(row)) 
    329              
    330                  
     328                        
    331329    def documentForScript(self, script=0): 
    332330        if type(script) != RScript: 
     
    343341        return self._cachedDocuments[script] 
    344342     
    345          
    346343    def onModificationChanged(self, changed): 
    347344        row = self.selectedScript() 
     
    349346            self.libraryModel[row].flags = RScript.Modified if changed else 0 
    350347            self.libraryModel.emitDataChanged([row])  
    351                                 
    352                              
     348                              
    353349    def setData(self, data): 
    354350        self.in_data = data 
    355351        self.console.setLocals(self.getLocals()) 
    356352 
    357  
    358353    def setDistance(self, matrix): 
    359354        self.in_distance = matrix 
    360355        self.console.setLocals(self.getLocals()) 
    361356 
    362          
    363357    def getLocals(self): 
    364358        return {"in_data": self.in_data, 
     
    371365        self.console.new_prompt(">>> ") 
    372366        robjects.r("dev.off()\n") 
    373         self.updateGraphicsView(self.grDevFile.name) 
    374367         
    375368     
Note: See TracChangeset for help on using the changeset viewer.