diff --git a/public/electron.js b/public/electron.js index 6fb0408..3d79719 100644 --- a/public/electron.js +++ b/public/electron.js @@ -66,9 +66,9 @@ const createMainWindow = () => { preload: path.join(__dirname, 'preload.js'), nativeWindowOpen: true, }, - width: 1000, + width: 1050, height: 880, - minWidth: 1000, + minWidth: 1050, minHeight: 880, backgroundColor: '#094580', }); diff --git a/python/eeg2bids.py b/python/eeg2bids.py index c509fd9..9ab0959 100644 --- a/python/eeg2bids.py +++ b/python/eeg2bids.py @@ -244,7 +244,7 @@ def edf_to_bids_thread(data): if 'edfData' not in data or 'files' not in data['edfData'] or not data['edfData']['files']: error_messages.append('No .edf file(s) to convert.') if 'bids_directory' not in data or not data['bids_directory']: - error_messages.append('The BIDS output directory is missing.') + error_messages.append('The BIDS output folder is missing.') if not data['session']: error_messages.append('The LORIS Visit Label is missing.') diff --git a/src/css/Configuration.css b/src/css/Configuration.css index 932d2d6..cb16f8a 100644 --- a/src/css/Configuration.css +++ b/src/css/Configuration.css @@ -30,4 +30,5 @@ textarea { } .fa-question-circle { color: #064785; + margin: 0 5px; } diff --git a/src/css/index.css b/src/css/index.css index 7bee123..2f34dfa 100644 --- a/src/css/index.css +++ b/src/css/index.css @@ -56,7 +56,7 @@ body { max-width: 175px; } .label { - width: 210px; + width: 240px; display: inline-block; max-width: 100%; padding-right: 20px; @@ -73,7 +73,7 @@ input { } .comboField { display: inline-block; - max-width: calc(100% - 230px); + max-width: calc(100% - 260px); vertical-align: top; } .alert { diff --git a/src/jsx/Configuration.js b/src/jsx/Configuration.js index 1be4e15..28090d9 100644 --- a/src/jsx/Configuration.js +++ b/src/jsx/Configuration.js @@ -579,7 +579,7 @@ const Configuration = (props) => { appContext.getFromTask('bidsDirectory'), ); } else { - bidsDirectoryStatus = formatError('No BIDS output directory selected'); + bidsDirectoryStatus = formatError('No BIDS output folder selected'); } result.push(
{bidsDirectoryStatus}
); @@ -1341,6 +1341,8 @@ const Configuration = (props) => { label='EDF Recording to convert' required={true} onUserInput={onUserInput} + help='Filename(s) must be formatted correctly: + e.g. [subjectID]_[sessionLabel]_[taskName]_[run-1]_ieeg.edf' />
@@ -1355,6 +1357,7 @@ const Configuration = (props) => { label='BIDS output folder' placeholder={state.bidsDirectory.get} onUserInput={onUserInput} + help='Where the BIDS-compliant folder will be created' />
@@ -1368,6 +1371,7 @@ const Configuration = (props) => { eeg: 'EEG', }} checked={state.modality.get} + help='If any intracranial (stereo) channels, select Stereo iEEG' />
@@ -1381,6 +1385,8 @@ const Configuration = (props) => { no: 'No', }} checked={state.LORIScompliant.get ? 'yes' : 'no'} + help='Select Yes if research datasets will be stored + in a LORIS data platform' />
@@ -1407,6 +1413,9 @@ const Configuration = (props) => { } label='Recording parameters (json)' onUserInput={onUserInput} + help='Used to contribute non-required fields to *.json BIDS + parameter file. See BIDS spec and template available with + this release. Blank fields ignored.' />
@@ -1421,6 +1430,8 @@ const Configuration = (props) => { } label='annotations.json' onUserInput={onUserInput} + help='Labels for Annotations, compliant with BIDS spec. + One file per task/run. Filename must be formatted correctly.' />
@@ -1453,6 +1464,9 @@ const Configuration = (props) => { } label='annotations.tsv' onUserInput={onUserInput} + help='Annotation data: time, label, etc compliant + with BIDS spec. One file per task/run. + Filename must be formatted correctly.' /> @@ -1469,6 +1483,8 @@ const Configuration = (props) => { label='Task name' value={state.taskName.get} onUserInput={onUserInput} + help='Task, stimulus, state or experimental context. + See BIDS specification for more information.' /> {state.LORIScompliant.get && @@ -1477,6 +1493,10 @@ const Configuration = (props) => {
@@ -1504,6 +1524,10 @@ const Configuration = (props) => {
@@ -1531,6 +1555,10 @@ const Configuration = (props) => {
@@ -1560,6 +1588,10 @@ const Configuration = (props) => {
@@ -1607,6 +1640,7 @@ const Configuration = (props) => { value={state.lineFreq.get} placeholder='n/a' onUserInput={onUserInput} + help='See BIDS specification for more information' />
@@ -1621,6 +1655,7 @@ const Configuration = (props) => { 'epoched': 'Epoched', }} onUserInput={onUserInput} + help='See BIDS specification for more information' />
@@ -1648,6 +1683,8 @@ const Configuration = (props) => { } } checked={state.participantEntryMode.get} + help='Specify participant details manually + or by lookup in LORIS' />
} @@ -1678,6 +1715,7 @@ const Configuration = (props) => { 'other': 'Other', }} onUserInput={onUserInput} + help='Required; see BIDS specification for more information' />
@@ -1692,6 +1730,7 @@ const Configuration = (props) => { 'A': 'Ambidextrous', }} onUserInput={onUserInput} + help='Required; see BIDS specification for more information' />
@@ -1728,6 +1767,7 @@ const Configuration = (props) => { 'A': 'Ambidextrous', }} onUserInput={onUserInput} + help='Required; see BIDS specification for more information' /> @@ -1741,6 +1781,7 @@ const Configuration = (props) => { required={true} value={state.participantID.get} onUserInput={onUserInput} + help='Study ID (e.g. LORIS PSCID)' /> {state.LORIScompliant.get &&
Use the LORIS PSCID
@@ -1753,6 +1794,7 @@ const Configuration = (props) => { placeholder='n/a' value={state.participantAge.get} onUserInput={onUserInput} + help='Required; see BIDS specification for more information' />
@@ -1767,6 +1809,7 @@ const Configuration = (props) => { 'other': 'Other', }} onUserInput={onUserInput} + help='Required; see BIDS specification for more information' />
@@ -1781,6 +1824,7 @@ const Configuration = (props) => { 'A': 'Ambidextrous', }} onUserInput={onUserInput} + help='Required; see BIDS specification for more information' />
@@ -1949,6 +1993,8 @@ const Configuration = (props) => { value={preparedBy} placeholder='Enter your name' onUserInput={(_, value) => setPreparedBy(value)} + help='Name of person performing data conversion + and validation is required.' /> {!preparedBy && displayErrors &&
@@ -1975,6 +2021,7 @@ const Configuration = (props) => { > {modalText.message[modalText.mode]} + ); } else { diff --git a/src/jsx/Validator.js b/src/jsx/Validator.js index 8083f12..53c5d90 100644 --- a/src/jsx/Validator.js +++ b/src/jsx/Validator.js @@ -161,6 +161,13 @@ const Validator = (props) => { } }, [socketContext]); + useEffect(() => { + if (!appContext.getFromTask('output_time')) { + setValidationMode('folder'); + } else { + setValidationMode('lastRun'); + } + }, [props.visible]); /** * onMessage - received message from python. * @param {object} message - response @@ -208,7 +215,7 @@ const Validator = (props) => { setBidsDirectory(value)} /> diff --git a/src/jsx/elements/inputs.js b/src/jsx/elements/inputs.js index 6ee4070..2616dfc 100644 --- a/src/jsx/elements/inputs.js +++ b/src/jsx/elements/inputs.js @@ -36,7 +36,8 @@ export const FileInput = (props) => { {props.help && } - + +