source: orange-bioinformatics/orangecontrib/bio/widgets/prototypes/OWtest.py @ 1873:0810c5708cc5

Revision 1873:0810c5708cc5, 7.8 KB checked in by Ales Erjavec <ales.erjavec@…>, 6 months ago (diff)

Moved '_bioinformatics' into orangecontrib namespace.

RevLine 
[1806]1"""
2<name>test</name>
[1807]3<description>Manage custom geneset files</description>
[1806]4
5"""
6import os
7from StringIO import StringIO
8
9import Orange
10
11from OWWidget import *
12import OWGUI
13
[1807]14from Orange.bio.obiGeneSets import loadGMT, list_local, register, local_path, remove_local, modification_date
[1806]15
16class standard_icons(object):
17    def __init__(self, qwidget=None, style=None):
18        self.qwidget = qwidget
19        if qwidget is None:
20            self.style = QApplication.instance().style()
21        else:
22            self.style = qwidget.style()
23
24    @property
25    def dir_open_icon(self):
26        return self.style.standardIcon(QStyle.SP_DirOpenIcon)
27
28    @property
29    def reload_icon(self):
30        return self.style.standardIcon(QStyle.SP_BrowserReload)
31
32
[1808]33class OWtest(OWWidget):
[1806]34    settingsList = ["recent_files"]
35
36    def __init__(self, parent=None, signalManager=None,
[1807]37                 title="Custom Geneset File (*.gmt) Manager"):
[1806]38        OWWidget.__init__(self, parent, signalManager, title,
[1807]39                          wantMainArea=True)
[1806]40
41        self.inputs = []
42        self.outputs = []
43        self.new_geneset = set()
44
45        # List of recent opened files.
46        self.recent_files = []
47        self.loadSettings()
48        self.recent_files = filter(os.path.exists, self.recent_files)
49
50        layout = QHBoxLayout()
51        box = OWGUI.widgetBox(self.controlArea, "File", orientation=layout)
52
53        icons = standard_icons(self)
54
55        self.recent_combo = QComboBox(self, objectName="recent_combo",
56                                      toolTip="Recent files",
57                                      activated=self.on_select_recent)
58        self.recent_combo.addItems([os.path.basename(p) \
59                                    for p in self.recent_files])
60
61        self.browse_button = QPushButton("...", icon=icons.dir_open_icon,
62                                         toolTip="Browse filesystem",
63                                         clicked=self.on_open_dialog)
64
65        layout.addWidget(self.recent_combo, 2)
66        layout.addWidget(self.browse_button)
67       
[1807]68        # The preview field
[1806]69        form = QFormLayout()
70       
71        box = OWGUI.widgetBox(self.controlArea, "Preview")
72        self.preview_view = QTableView()
73
74        box.layout().addWidget(self.preview_view)
75
76        OWGUI.button(self.controlArea, self, "Import", callback=self.import_data)
77
[1807]78        # The geneset table
79        ma = self.mainArea
80
81        self.listView = QTreeWidget(ma)
82        ma.layout().addWidget(self.listView)
83        self.listView.setAllColumnsShowFocus(1)
84        self.listView.setColumnCount(2)
85        self.listView.setHeaderLabels(["Genesets name", "Import time"])
86
87        self.listView.header().setStretchLastSection(True)
88        self.listView.header().setClickable(True)
89        self.listView.header().setSortIndicatorShown(True)
90        self.listView.setSortingEnabled(True)
91
92        self.listView.setSelectionMode(QAbstractItemView.SingleSelection)
93        self.listView.setSelectionBehavior(QAbstractItemView.SelectRows)
94
95        self.populate_table()
96
97        OWGUI.button(self.controlArea, self, "Delete", callback=self.delete_data)
98
[1806]99        self.selected_file = None 
100
101        self.resize(450, 500)
102        if self.recent_files:
103            QTimer.singleShot(1,
104                    lambda: self.set_selected_file(self.recent_files[0])
105                    )
106
[1807]107    def populate_table(self):
108        self.listView.clear()
109        for geneset in os.listdir(local_path()):
110            item = QTreeWidgetItem(self.listView)
111            name = geneset[geneset.index("gs_")+3:geneset.index(".gmt")+4]
112            the_file = os.path.join(local_path(), geneset)
113            mod_time = str(modification_date(the_file))
114            item.setText(0, name)
115            item.setText(1, mod_time[:mod_time.rfind(".")])
116
117        print list_local()
118
[1806]119    def on_select_recent(self, recent):
120        if isinstance(recent, int):
121            recent = self.recent_files[recent]
122
123        self.set_selected_file(recent)
124
125    def on_open_dialog(self):
126        last = os.path.expanduser("~/Documents")
127        path = QFileDialog.getOpenFileName(self, "Open File","" ,"geneset file *.gmt (*.gmt);;All files (*)", last)
128        path = unicode(path)
129        if path:
130            self.set_selected_file(path)
131
132    def on_reload_file(self):
133        if self.recent_files:
134            self.set_selected_file(self.recent_files[0])
135
136    def set_selected_file(self, filename):
137        basedir, name = os.path.split(filename)
138        self.selected_file = filename
139        self.genesetname = name
140        index_to_remove = None
141        if filename in self.recent_files:
142            index_to_remove = self.recent_files.index(filename)
143        elif self.recent_combo.count() > 6:
144            # Always keep 6 latest files in the list.
145            index_to_remove = self.recent_combo.count() - 1
146        self.recent_combo.insertItem(0, name)
147        self.recent_combo.setCurrentIndex(0)
148        self.recent_files.insert(0, filename)
149
150        if index_to_remove is not None:
151            self.recent_combo.removeItem(index_to_remove + 1)
152            self.recent_files.pop(index_to_remove + 1)
153 
154        self.update_preview()
[1807]155   
[1806]156    def update_preview(self):
157        pass
158        """ Leftovers from copying another widget
159       
160        self.error(0)
161        if self.selected_file:
162            head = StringIO("".join(self.selected_file_head))
163            hints = self.hints[self.selected_file]
164
165            # Save hints for the selected file
166            hints["quotechar"] = self.quote
167            hints["delimiter"] = self.delimiter or self.other_delimiter
168            hints["has_header"] = self.has_header
169            hints["has_orange_header"] = self.has_orange_header
170            hints["skipinitialspace"] = self.skipinitialspace
171            hints["DK"] = self.missing or None
172            try:
173                data = Orange.data.io.load_csv(head, delimiter=self.delimiter,
174                                   quotechar=self.quote,
175                                   has_header=self.has_header,
176                                   has_types=self.has_orange_header,
177                                   has_annotations=self.has_orange_header,
178                                   skipinitialspace=self.skipinitialspace,
179                                   DK=self.missing or None,
180                                   create_new_on=MakeStatus.OK)
181            except Exception, ex:
182                self.error(0, "Cannot parse (%r)" % ex)
183                data = None
184
185            if data is not None:
186                model = ExampleTableModel(data, None, self)
187            else:
188                model = None
189            self.preview_view.setModel(model)
190        """
[1807]191   
192    def import_data(self):   
[1806]193        self.error(0)     
194        if self.selected_file:
195            try:
196                self.new_geneset = loadGMT(open(self.selected_file, "rt").read(), self.genesetname)
197                geneset_split = self.new_geneset.split_by_hierarchy()
198                for geneset in geneset_split:
199                    register(geneset)
[1807]200                self.populate_table()
[1806]201            except Exception, ex:
202                self.error(0, "An error occurred while "
203                              "loading the file:\n\t%r" % self.selected_file
[1807]204                              )   
205
206    def delete_data(self):   
207        self.error(0)
208        if self.listView.selectedItems():
209            try:
210                unwantedGeneset = str(self.listView.selectedItems()[0].text(0))
211                remove_local(unwantedGeneset)
212                self.populate_table()
213            except Exception, ex:
214                self.error(0, "An error occurred while "
215                              "deleting the file:\n\t%r" % unwantedGeneset
[1806]216                              )   
[1807]217       
[1806]218if __name__ == "__main__":
219    import sys
220    app = QApplication(sys.argv)
221    w = OWCustomGeneSetUpload()
222    w.show()
223    app.exec_()
224    w.saveSettings()
Note: See TracBrowser for help on using the repository browser.