Ignore:
Timestamp:
11/14/12 12:37:29 (17 months ago)
Author:
Matija Polajnar <matija.polajnar@…>
Branch:
default
Message:

Show progress during installation of add-ons.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeCanvas/orngDlgs.py

    r11020 r11021  
    811811        # Buttons 
    812812        self.hbox = hbox = OWGUI.widgetBox(mainBox, orientation = "horizontal", sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)) 
     813        busyBox = OWGUI.widgetBox(hbox, sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Minimum))  # A humble stretch. 
     814        self.busyLbl = OWGUI.label(busyBox, self, "") 
    813815        self.progress = QProgressBar(hbox, sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)) 
    814816        hbox.layout().addWidget(self.progress) 
    815817        self.progress.setVisible(False) 
    816         OWGUI.widgetBox(hbox, sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Minimum))  # A humble stretch. 
    817818        self.okButton = OWGUI.button(hbox, self, "OK", callback = self.accept) 
    818819        self.cancelButton = OWGUI.button(hbox, self, "Cancel", callback = self.reject) 
     
    834835            if summary.exec_() == QDialog.Rejected: 
    835836                return 
     837 
     838        self.busy(True) 
     839        self.repaint() 
     840        add, remove, upgrade = self.to_install(), self.to_remove(), self.to_upgrade 
     841        for name in upgrade: 
     842            try: 
     843                self.busy("Upgrading %s ..." % name) 
     844                self.repaint() 
     845                Orange.utils.addons.upgrade(name, self.pcb) 
     846            except Exception, e: 
     847                print "Problem upgrading add-on %s: %s" % (name, e) 
     848        for name in remove: 
     849            try: 
     850                self.busy("Uninstalling %s ..." % name) 
     851                self.repaint() 
     852                Orange.utils.addons.uninstall(name, self.pcb) 
     853            except Exception, e: 
     854                print "Problem uninstalling add-on %s: %s" % (name, e) 
     855        for name in add: 
     856            try: 
     857                self.busy("Installing %s ..." % name) 
     858                self.repaint() 
     859                Orange.utils.addons.install(name, self.pcb) 
     860            except Exception, e: 
     861                print "Problem installing add-on %s: %s" % (name, e) 
     862 
    836863        QDialog.accept(self) 
    837864 
    838865    def busy(self, b=True): 
    839         self.progress.setVisible(b) 
     866        self.progress.setMaximum(1) 
     867        self.progress.setValue(0) 
     868        self.progress.setVisible(bool(b)) 
     869        self.busyLbl.setText(b if isinstance(b, str) else "") 
    840870        self.eSearch.setEnabled(not b) 
    841871        self.lst.setEnabled(not b) 
    842         self.hbox.setEnabled(not b) 
     872        self.okButton.setEnabled(not b) 
     873        self.cancelButton.setEnabled(not b) 
    843874        self.rightPanel.setEnabled(not b) 
    844875        self.infoPane.setEnabled(not b) 
    845          
     876 
     877    def pcb(self, max, val): 
     878        self.progress.setMaximum(max) 
     879        self.progress.setValue(val) 
     880        self.progress.repaint() 
     881 
    846882    def reloadRepo(self): 
    847883        # Reload add-on list. 
    848884        import Orange.utils.addons 
    849885        try: 
    850             self.busy(True) 
     886            self.busy("Reloading add-on repository ...") 
    851887            self.repaint() 
    852             def pcb(max, val): 
    853                 self.progress.setMaximum(max) 
    854                 self.progress.setValue(val) 
    855                 self.progress.repaint() 
    856             Orange.utils.addons.refresh_available_addons(progress_callback = pcb) 
    857         except Exception, e:  # Maybe gather all exceptions (for all repositories) and show them in the end? 
     888            Orange.utils.addons.refresh_available_addons(progress_callback = self.pcb) 
     889        except Exception, e: 
    858890            QMessageBox.critical(self, "Error", "Could not reload repository: %s." % e) 
    859891        finally: 
Note: See TracChangeset for help on using the changeset viewer.