Changeset 1911:ff8c04a73827 in orange-bioinformatics


Ignore:
Timestamp:
11/19/13 13:27:41 (5 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Download and load the gene sets in a background thread.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • orangecontrib/bio/widgets/OWSelectGenes.py

    r1910 r1911  
    10201020 
    10211021 
     1022import sys 
    10221023import itertools 
    10231024 
    1024 from PyQt4.QtGui import QVBoxLayout, QComboBox, QLineEdit, QTreeView, \ 
    1025         QDialogButtonBox, QSortFilterProxyModel 
     1025from PyQt4.QtGui import ( 
     1026    QVBoxLayout, QComboBox, QLineEdit, QTreeView, QDialogButtonBox, 
     1027    QSortFilterProxyModel, QProgressBar, QStackedWidget, QSizePolicy 
     1028) 
    10261029 
    10271030from PyQt4.QtCore import QSize 
     
    10301033from Orange.utils import serverfiles 
    10311034 
     1035from Orange.OrangeWidgets.OWConcurrent import ( 
     1036    ThreadExecutor, Task, methodinvoke 
     1037) 
     1038 
    10321039 
    10331040class GeneSetView(QFrame): 
    10341041    selectedOrganismChanged = Signal(str) 
    10351042    selectionChanged = Signal() 
     1043    geneSetsLoaded = Signal() 
    10361044 
    10371045    def __init__(self, *args, **kwargs): 
     
    10431051        layout.setContentsMargins(0, 0, 0, 0) 
    10441052 
     1053        self._stack = QStackedWidget() 
     1054        self._stack.setContentsMargins(0, 0, 0, 0) 
     1055        self._stack.setSizePolicy(QSizePolicy.MinimumExpanding, 
     1056                                  QSizePolicy.Fixed) 
    10451057        self.orgcombo = QComboBox(minimumWidth=150) 
    10461058        self.orgcombo.activated[int].connect(self._on_organismSelected) 
    1047         layout.addWidget(self.orgcombo) 
     1059        self._stack.addWidget(self.orgcombo) 
     1060 
     1061        self.progressbar = QProgressBar() 
     1062        self._stack.addWidget(self.progressbar) 
     1063 
     1064        layout.addWidget(self._stack) 
    10481065 
    10491066        self.searchline = QLineEdit() 
     
    10711088        self.setLayout(layout) 
    10721089 
     1090        self._executor = ThreadExecutor(self) 
    10731091        self.initialize() 
    10741092 
     
    10981116                self.orgcombo.setCurrentIndex(index) 
    10991117            self._updateGeneSetsModel() 
     1118            self.selectedOrganismChanged.emit(taxid) 
    11001119 
    11011120    def currentOrganism(self): 
     
    11191138                           if tid == taxid] 
    11201139 
    1121             gs_ensure_downloaded([(hier, tid, local) 
    1122                                   for hier, tid, local in self.gs_hierarchy 
    1123                                   if tid == taxid and not local]) 
    1124  
    1125             sets = [((hier, tid), genesets.load(hier, tid)) 
    1126                     for hier, tid in currentsets] 
    1127  
    1128             model = sets_to_model(sets) 
    1129             self.proxymodel.setSourceModel(model) 
    1130             self.gsview.resizeColumnToContents(0) 
    1131             self.selectedOrganismChanged.emit(taxid) 
     1140            gsmissing = [(hier, tid, local) 
     1141                         for hier, tid, local in self.gs_hierarchy 
     1142                         if tid == taxid and not local] 
     1143 
     1144            self._stack.setCurrentWidget(self.progressbar) 
     1145 
     1146            if gsmissing: 
     1147                self.progressbar.setRange(0, 100) 
     1148                progress_info = methodinvoke( 
     1149                    self.progressbar, "setValue", (int,)) 
     1150            else: 
     1151                self.progressbar.setRange(0, 0) 
     1152                progress_info = None 
     1153 
     1154            def load(): 
     1155                gs_ensure_downloaded( 
     1156                    gsmissing, 
     1157                    progress_info=progress_info) 
     1158 
     1159                return [((hier, tid), genesets.load(hier, tid)) 
     1160                        for hier, tid in currentsets] 
     1161 
     1162            self._task = Task(function=load) 
     1163            self._task.finished.connect(self._on_loadFinished) 
     1164            self._executor.submit(self._task) 
     1165 
     1166    def _on_loadFinished(self): 
     1167        self._stack.setCurrentWidget(self.orgcombo) 
     1168 
     1169        try: 
     1170            sets = self._task.result() 
     1171        except Exception: 
     1172            # Should do something better here. 
     1173            sys.excepthook(*sys.exc_info()) 
     1174            sets = [] 
     1175 
     1176        model = sets_to_model(sets) 
     1177        self.proxymodel.setSourceModel(model) 
     1178        self.gsview.resizeColumnToContents(0) 
     1179        self.geneSetsLoaded.emit() 
    11321180 
    11331181    def _on_organismSelected(self, index): 
Note: See TracChangeset for help on using the changeset viewer.