Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
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(*_):
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], cb=stop_spinner, cb_args=(d,))
button_download = gtk.Button(label="Download Selected Items")
button_download.connect("clicked", event_clicked_download)
buttonBox_download.add(button_download)
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
])