Skip to content
results_view.py 4.9 KiB
Newer Older
Franziska Koehn's avatar
Franziska Koehn committed
import gtk

class ResultsDownloadView(gtk.VBox):

    def show_data(self, results):
        self.treeViewResults.show_data(results)

    def __init__(self, *args, **kwargs):
        super(ResultsDownloadView, self).__init__(*args, **kwargs)

        sw_results = gtk.ScrolledWindow()
        sw_results.set_shadow_type(gtk.SHADOW_ETCHED_IN)
        sw_results.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
        self.pack_start(sw_results,expand=True, fill=True)

        self.treeViewResults = TreeViewResults()
        sw_results.add(self.treeViewResults)

        buttonBox_download = gtk.HButtonBox()
        self.pack_end(buttonBox_download,expand=False, fill=False)


        results_tree_view_store = self.treeViewResults.store

        def event_clicked_download(button, *_):
Franziska Koehn's avatar
Franziska Koehn committed
            import gobject
            import xnat_search
            enabled = (d for d in results_tree_view_store if d[0])
            for d in enabled:
                def stop_spinner(_row):
                    _row[7] = False # Hide spinner
                    _row[0] = False # Checkbox to false
                d[8] = 0
                d[7] = True # Show Spinner
                xnat_search.download_async(d[6], button.destination, cb=stop_spinner, cb_args=(d,))
        def event_selection_changed(filechooserbutton, *_):
            self.button_download.destination = filechooserbutton.get_filename()

        button_folder = gtk.FileChooserButton("Select Folder")
        button_folder.set_action(gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER)
        button_folder.connect("selection-changed", event_selection_changed)
        buttonBox_download.add(button_folder)

        self.button_download = ButtonDownloadResults(label="Download Selected Items")
        self.button_download.connect("clicked", event_clicked_download)
        buttonBox_download.add(self.button_download)

class ButtonDownloadResults(gtk.Button):

    count = 0
    _destination = ""

    @property
    def destination(self):
        return self._destination

    @destination.setter
    def destination(self, value):
        self._destination = value

    def __init__(self, *args, **kwargs):
        super(ButtonDownloadResults, self).__init__(*args, **kwargs)
Franziska Koehn's avatar
Franziska Koehn committed



class TreeViewResults(gtk.TreeView):

    def __init__(self):
        import gobject
        super(TreeViewResults, self).__init__()
        self.create_columns()
        self.store = gtk.ListStore(bool, str, str, str, str, str, gobject.TYPE_PYOBJECT, bool, int)
        self.set_model(self.store)

        gobject.timeout_add(150, self.move_spinners)

    def move_spinners(self):
        for r in self.store:
            if r[7]: # if spinner is visible
                r[8] += 1
        return True


    def create_columns(self):

        def callback_toggled(cellrenderertoggle, path_string, col, *_):
            it = self.store.get_iter_from_string(path_string)
            is_active = cellrenderertoggle.get_active()
            self.store.set(it, col, not is_active)

        renderer = gtk.CellRendererToggle()
        renderer.set_property('activatable', True)
        renderer.connect("toggled", callback_toggled, 0)
        column = gtk.TreeViewColumn("", renderer)
        column.add_attribute(renderer, "active", 0)
        column.set_sort_column_id(0)
        column.set_resizable(False)
        self.append_column(column)

        renderer = gtk.CellRendererSpinner()
        column = gtk.TreeViewColumn("", renderer, active=7, pulse=8)
        self.append_column(column)

        column = gtk.TreeViewColumn("Project-ID", gtk.CellRendererText(), text=1)
        column.set_sort_column_id(1)
        column.set_resizable(True)
        self.append_column(column)

        column = gtk.TreeViewColumn("Subject-ID", gtk.CellRendererText(), text=2)
        column.set_sort_column_id(2)
        column.set_resizable(True)
        self.append_column(column)

        column = gtk.TreeViewColumn("Session-ID", gtk.CellRendererText(), text=3)
        column.set_sort_column_id(3)
        column.set_resizable(True)
        self.append_column(column)

        column = gtk.TreeViewColumn("Scan-ID", gtk.CellRendererText(), text=4)
        column.set_sort_column_id(4)
        column.set_resizable(True)
        self.append_column(column)

        column = gtk.TreeViewColumn("Scan-Type", gtk.CellRendererText(), text=5)
        column.set_sort_column_id(5)
        column.set_resizable(True)
        self.append_column(column)

    def show_data(self, data):
        self.store.clear()
        for d in data:
            self.store.append( [ True,
                                d['xnat_mrsessiondata_project'],
                                d['xnat_mrsessiondata_subject_id'],
                                d['xnat_mrsessiondata_session_id'],
                                d['id'],
                                d['type'],
                                d,
                                False,
                                0
                                ])