Changeset 11479:69e2cdaf858a in orange


Ignore:
Timestamp:
04/25/13 14:51:08 (12 months ago)
Author:
markotoplak
Branch:
default
Message:

Add-on update interface available from the new canvas.

Location:
Orange/OrangeCanvas
Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeCanvas/application/canvasmain.py

    r11469 r11479  
    1111import pkg_resources 
    1212 
     13import Orange.utils.addons 
     14 
    1315from PyQt4.QtGui import ( 
    1416    QMainWindow, QWidget, QAction, QActionGroup, QMenu, QMenuBar, QDialog, 
     
    4345from .outputview import OutputView 
    4446from .settings import UserSettingsDialog 
     47from .addons import AddOnManagerDialog 
     48 
    4549from ..document.schemeedit import SchemeEditWidget 
    4650 
     
    310314                       [self.freeze_action, 
    311315                        self.dock_help_action] 
     316 
     317 
     318        def addOnRefreshCallback(): 
     319            pass #TODO add new category 
     320 
     321        Orange.utils.addons.addon_refresh_callback.append(addOnRefreshCallback) 
    312322 
    313323        # Tool bar in the collapsed dock state (has the same actions as 
     
    502512                    ) 
    503513 
     514        self.canvas_addons_action = \ 
     515            QAction(self.tr("&Add-ons..."), self, 
     516                    objectName="canvas-addons-action", 
     517                    toolTip=self.tr("Manage add-ons."), 
     518                    triggered=self.open_addons, 
     519                    menuRole=QAction.PreferencesRole 
     520                    ) 
     521 
     522 
    504523        self.show_output_action = \ 
    505524            QAction(self.tr("Show Output View"), self, 
     
    623642        self.options_menu.addSeparator() 
    624643        self.options_menu.addAction(self.canvas_settings_action) 
     644        self.options_menu.addAction(self.canvas_addons_action) 
    625645 
    626646        # Widget menu 
     
    13691389            self.__update_from_settings() 
    13701390 
     1391    def open_addons(self): 
     1392 
     1393        def getlr(): 
     1394            settings = QSettings() 
     1395            settings.beginGroup("addons") 
     1396            lastRefresh = settings.value("addons-last-refresh", 
     1397                          defaultValue=0, type=int) 
     1398            settings.endGroup() 
     1399            return lastRefresh 
     1400         
     1401        def setlr(v): 
     1402            settings = QSettings() 
     1403            settings.beginGroup("addons") 
     1404            lastRefresh = settings.setValue("addons-last-refresh", int(v)) 
     1405            settings.endGroup() 
     1406             
     1407        dlg = AddOnManagerDialog(self, self) 
     1408        dlg.loadtimefn = getlr 
     1409        dlg.savetimefn = setlr 
     1410        dlg.show() 
     1411        dlg.reloadQ() 
     1412        status = dlg.exec_() 
     1413 
    13711414    def show_output_view(self): 
    13721415        """Show a window with application output. 
  • Orange/OrangeCanvas/orngDlgs.py

    r11094 r11479  
    1111from PyQt4.QtGui import * 
    1212from orngCanvasItems import MyCanvasText 
     13import time 
    1314 
    1415import OWGUI 
     16import Orange.utils.addons 
    1517 
    1618has_pip = True 
     
    742744        self.resize(600,500) 
    743745        self.layout().setSizeConstraint(QLayout.SetMinimumSize) 
     746        self.savetimefn = None 
     747        self.loadtimefn = None 
    744748         
    745749        mainBox = OWGUI.widgetBox(self, orientation="vertical", sizePolicy=QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)) 
     
    765769        QObject.connect(lst, SIGNAL("itemChanged(QListWidgetItem *)"), self.cbToggled) 
    766770        QObject.connect(lst, SIGNAL("currentItemChanged(QListWidgetItem *, QListWidgetItem *)"), self.currentItemChanged) 
    767  
    768         import Orange.utils.addons 
    769771 
    770772        # Bottom info pane 
     
    844846    def accept(self): 
    845847        self.to_upgrade.difference_update(self.to_remove()) 
    846         import Orange.utils.addons 
    847848        add, remove, upgrade = self.to_install(), self.to_remove(), self.to_upgrade 
    848849        if len(add) + len(remove) + len(upgrade) > 0: 
     
    938939    def reloadRepo(self): 
    939940        # Reload add-on list. 
    940         import Orange.utils.addons 
    941941        try: 
    942942            self.busy("Reloading add-on repository ...") 
    943943            self.repaint() 
    944944            Orange.utils.addons.refresh_available_addons(progress_callback = self.pcb) 
     945            if self.savetimefn: 
     946                self.savetimefn(int(time.time())) 
    945947        except Exception, e: 
    946948            QMessageBox.critical(self, "Error", "Could not reload repository: %s." % e) 
     
    949951        # Finally, refresh the tree on GUI. 
    950952        self.refreshView() 
     953 
     954    def reloadQ(self): 
     955        #ask the user if he would like to reload the repository 
     956        lastRefresh = 0 
     957        if self.loadtimefn: 
     958            lastRefresh = self.loadtimefn() 
     959        t = time.time() 
     960        if t - lastRefresh > 7*24*3600 or Orange.utils.addons.addons_corrupted: 
     961            if Orange.utils.addons.addons_corrupted or \ 
     962               QMessageBox.question(self, "Refresh", 
     963                                    "List of available add-ons has not been refreshed for more than a week. Do you want to download the list now?", 
     964                                     QMessageBox.Yes | QMessageBox.Default, 
     965                                     QMessageBox.No | QMessageBox.Escape) == QMessageBox.Yes: 
     966                self.reloadRepo() 
    951967             
    952968    def upgradeCandidates(self): 
Note: See TracChangeset for help on using the changeset viewer.