Skip to content
Snippets Groups Projects
Commit f510011d authored by Toumji Abdallah's avatar Toumji Abdallah
Browse files

Implemented dict in dict in the sidecar creation and added information for the...

Implemented dict in dict in the sidecar creation and added information for the creation of a lot of sidecars

Also fixed a bug where the key of a dict in a form would not be the normal value but would be replaced by the last key of the form
parent 5e881e87
No related branches found
No related tags found
No related merge requests found
......@@ -200,6 +200,7 @@ class Application(tk.Frame):
The user is guided through the process of completing a BIDS project.
'''
pass
def tool_selection(self):
......@@ -207,6 +208,7 @@ class Application(tk.Frame):
The user is guided back to the tool selection.
'''
self.main_frame.destroy()
main_application = MainApplication.Application(self.root)
main_application.pack()
......@@ -217,6 +219,7 @@ class Application(tk.Frame):
The user is guided through the process of creating the architecture of the new BIDS project.
'''
Tools.clean_frame(self.main_frame)
self.architecture_frame = tk.Frame(self.main_frame)
......@@ -338,6 +341,7 @@ class Application(tk.Frame):
The user is guided through the process of selecting the directory to integrate the file to.
'''
# The directory can only be in the project directory.
self.directory = tk.filedialog.askdirectory(initialdir=self.project_directory)
self.integrate_data_window.lift()
......@@ -525,7 +529,7 @@ class Application(tk.Frame):
self.form_handler.show_forms(0)
self.integrate_sidecar_button = tk.Button(self.integrate_sidecar_window, text='Confirm', command=self.create_sidecar_finish, state='disabled')
self.integrate_sidecar_button.grid(row=1, column=0)
self.integrate_sidecar_button.grid(row=2, column=0)
self.form_handler.frame.winfo_toplevel().bind('<<EntryStateChanged>>', lambda *_: self.check_mandatory(self.form_handler.form_frame_list[0], self.integrate_sidecar_button))
......@@ -611,8 +615,10 @@ class Application(tk.Frame):
if not create:
self.integrate_sidecar_button.config(text='Integrate', command=self.integrate_sidecar_finish, state='normal')
self.integrate_sidecar_button.grid(row=3, column=0)
else:
self.integrate_sidecar_button.config(text='Integrate', command=self.place_created_sidecar, state='normal')
self.integrate_sidecar_button.grid(row=3, column=0)
def integrate_sidecar_finish(self):
''' This method is used to finish the integration of the sidecar to the new BIDS project.
......
......@@ -16,27 +16,28 @@ def create_entry_from_json(form, frame, help_icon):
if 'linked_file' in form[1]:
return
for name, info in form[1].items():
if 'type' in info:
label = tk.Label(frame, text=name, font=('Arial', 12, name_style[info['requirement level']]))
if 'modulable' in info:
if info['modulable']:
label = tk.Entry(frame)
label.grid(row=current_row, column=0)
data = info['type']
button = tk.Button(frame, text='Fill information', command=lambda: entries.append(SubEntry(frame, data, label, current_row, 1, 2, help_icon)))
button.grid(row=current_row, column=1)
help_icon = tk.Label(frame, image=help_icon)
help_icon.grid(row=current_row, column=2)
CreateToolTip(help_icon, info['description'])
elif info['multiple']:
else:
label = tk.Label(frame, text=name, font=('Arial', 12, name_style[info['requirement level']]))
label.grid(row=current_row, column=0)
entries.append(MultipleEntry(frame, label, current_row, 1, 2, info['description'], info['valid condition']))
else:
label = tk.Label(frame, text=name, font=('Arial', 12, name_style[info['requirement level']]))
label.grid(row=current_row, column=0)
entries.append(Entry(frame, label, current_row, 1, 1, info['valid condition']))
help_label = tk.Label(frame, image=help_icon)
help_label.grid(row=current_row, column=2)
CreateToolTip(help_label, info['description'])
if 'type' in info:
data = info['type']
data['label_name'] = name
button = tk.Button(frame, text='Fill information', command=lambda: entries.append(SubEntry(frame, data, label, current_row, help_icon)))
button.grid(row=current_row, column=1)
elif info['multiple']:
entries.append(MultipleEntry(frame, label, current_row, 1, 2, info['description'], info['valid condition']))
else:
entries.append(Entry(frame, label, current_row, 1, 1, info['valid condition']))
current_row += 1
return entries
......@@ -66,7 +67,6 @@ class Entry:
self.columnspan = columnspan
self.state = state
self.multiple = False
self.name = label.cget('text')
self.text = tk.StringVar(value=text)
self.label = label
self.text.trace('w', self.update_color)
......@@ -118,6 +118,17 @@ class Entry:
'''
return self.entry.get()
def get_name(self):
''' This method is used to get the name of the entry widget.
:return: str
The name of the entry widget
'''
if isinstance(self.label, tk.Label):
return self.label.cget('text')
else:
return self.label.get()
class MultipleEntry:
......@@ -146,7 +157,6 @@ class MultipleEntry:
self.column = 0
self.columnspan = columnspan
self.entries = []
self.name = label.cget('text')
self.state = state
self.entries.append(Entry(self.frame, self.label, self.row, self.column, self.columnspan-1, self.valid_condition, text, state))
self.add_button = tk.Button(self.frame, text='+', command=self.add_entry)
......@@ -172,10 +182,21 @@ class MultipleEntry:
data.append(entry.get_text())
return data
def get_name(self):
''' This method is used to get the name of the entry widget.
:return: str
The name of the entry widget
'''
if isinstance(self.label, tk.Label):
return self.label.cget('text')
else:
return self.label.get()
class SubEntry:
def __init__(self, frame, form, label, row, column, columnspan, help_icon, text='', state='valid'):
def __init__(self, frame, form, label, row, help_icon, state='valid'):
''' The constructor of the class, it instantiates a sub entry widget.
The sub entry has a button that opens a new window with more entries.
......@@ -195,23 +216,39 @@ class SubEntry:
'''
self.name_style = {'required': 'bold', 'recommended': 'normal', 'optional': 'italic'}
self.current_row = row
self.name = label.cget('text')
self.sub_entry_dict = {}
self.state = state
self.name = form['label_name']
form.pop('label_name')
self.return_dict = {}
self.label = label
sub_window = tk.Toplevel(frame)
sub_window.title(self.name)
sub_frame = tk.Frame(sub_window)
sub_frame.pack()
current_row = 1
for name, info in form.items():
if info['multiple']:
if 'modulable' in info:
if info['modulable']:
label = tk.Entry(sub_frame)
label.grid(row=current_row, column=0)
else:
label = tk.Label(sub_frame, text=name, font=('Arial', 12, self.name_style[info['requirement level']]))
label.grid(row=current_row, column=0)
self.sub_entry_dict[name] = MultipleEntry(sub_frame, label, current_row, 1, 1, info['description'], info['valid condition'])
else:
label = tk.Label(sub_frame, text=name, font=('Arial', 12, self.name_style[info['requirement level']]))
label.grid(row=current_row, column=0)
if 'type' in info:
data = info['type']
if isinstance(label, tk.Entry):
label_name = label.get()
else:
label_name = label.cget('text')
data['label_name'] = label_name
button = tk.Button(sub_frame, text='Fill information', command=lambda: self.sub_entry_dict.update({name: SubEntry(sub_frame, data, label, current_row, help_icon)}))
button.grid(row=current_row, column=1)
elif info['multiple']:
self.sub_entry_dict[name] = MultipleEntry(sub_frame, label, current_row, 1, 1, info['description'], info['valid condition'])
else:
self.sub_entry_dict[name] = Entry(sub_frame, label, current_row, 1, 1, info['valid condition'])
current_row += 1
......@@ -223,7 +260,11 @@ class SubEntry:
def save(self):
''' This method is used to save the text of the sub entry widget.
'''
for name, entry in self.sub_entry_dict.items():
for entry in self.sub_entry_dict.values():
if isinstance(entry.label, tk.Label):
name = entry.label.cget('text')
else:
name = entry.label.get()
self.return_dict[name] = entry.get_text()
if self.return_dict[name] == '':
del self.return_dict[name]
......@@ -236,3 +277,14 @@ class SubEntry:
The text of the sub entry widget
'''
return self.return_dict
def get_name(self):
''' This method is used to get the name of the sub entry widget.
:return: str
The name of the sub entry widget
'''
if self.name == '':
return self.label.get()
else:
return self.name
......@@ -89,7 +89,7 @@ class Form:
data = {}
for entry in self.entries:
if not entry.get_text() == '' and not entry.get_text() == [''] and not entry.get_text() == {''}:
data[entry.name] = entry.get_text()
data[entry.get_name()] = entry.get_text()
with open(os.path.join(path, self.form[0]), 'w') as file:
json.dump(data, file)
......
......@@ -2,5 +2,9 @@
"dataset_description.json": "required",
"participants.tsv": "required",
"participants.json": "recommended",
"README": "recommended"
"README": "recommended",
"CHANGES": "recommended",
"LICENSE": "recommended",
"CITATION.cff": "optional"
}
\ No newline at end of file
This diff is collapsed.
......@@ -10,7 +10,7 @@ class MyTestCase(unittest.TestCase):
self.assertTrue(Tools.verify_inheritance(metadata_file, project_directory, project_directory, desired_impacted_files, 'eeg'))
def test_get_type_from_extension(self):
def test_get_metadata_info_from_type(self):
dict = {'channels.json': ['task'],
'channels.tsv': ['task'],
'coordsystem.json': [],
......@@ -30,6 +30,8 @@ class MyTestCase(unittest.TestCase):
'electrodes.tsv', 'electrodes.json', 'physio.json', 'physio.tsv.gz', 'stim.json', 'stim.tsv.gz']
self.assertEqual(list, Tools.get_possible_metadata_files('eeg'))
def test_get_type_from_extension(self):
self.assertEqual('eeg', Tools.get_type_from_extension('edf'))
if __name__ == '__main__':
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment