38: QStandardItemModel(pParent)
51 QStandardItem* pNewItem,
58 if (!selectedItem.isValid()) {
66 qDebug() <<
"[BidsViewModel::addData] Prompt user to select a session";
74 if (!selectedItem.isValid()) {
75 QStandardItem* pItem =
new QStandardItem(
"Unknown");
76 pItem->setEditable(
false);
77 pItem->setDragEnabled(
true);
96 const QModelIndex& parentIndex,
99 QStandardItem* selectedData = itemFromIndex(parentIndex);
100 selectedData->setChild(selectedData->rowCount(),
105 pNewAvgItem->setData(QVariant::fromValue(iDataType),
BIDS_ITEM_TYPE);
115 QString sNewSubjectName;
117 if (!sSubjectName.startsWith(
"sub-")) {
118 sNewSubjectName =
"sub-" + sSubjectName;
120 sNewSubjectName = sSubjectName;
123 sNewSubjectName.remove(
" ");
126 QStandardItem* pSubjectItem =
new QStandardItem(sNewSubjectName);
127 appendRow(pSubjectItem);
130 pSubjectItem->setData(QVariant::fromValue(pSubjectItem->index()),
BIDS_ITEM_SUBJECT);
134 return pSubjectItem->index();
140 const QString& sSessionName)
143 QString sNewSessionName;
145 if (!sSessionName.startsWith(
"ses-")) {
146 sNewSessionName =
"ses-" + sSessionName;
148 sNewSessionName = sSessionName;
151 sNewSessionName.remove(
" ");
153 QList<QStandardItem*> listItems = findItems(sSubjectName);
154 bool bRepeat =
false;
157 if (listItems.size() > 1) {
158 qWarning() <<
"[BidsViewModel::addSessionToSubject] Multiple subjects with same name";
160 }
else if (listItems.size() == 0) {
161 qWarning() <<
"[BidsViewModel::addSessionToSubject] No Subject found with name:" << sSubjectName;
162 return QModelIndex();
167 QStandardItem* pNewSessionItem =
nullptr;
170 for (
int i = 0; i < listItems.size(); i++) {
171 QStandardItem* pSubjectItem = listItems.at(i);
174 pSubjectItem->setText(pSubjectItem->text() + QString::number(i + 1));
177 pNewSessionItem =
new QStandardItem(sNewSessionName);
178 pSubjectItem->setChild(pSubjectItem->rowCount(),
182 pNewSessionItem->setData(QVariant::fromValue(pSubjectItem->index()),
BIDS_ITEM_SUBJECT);
183 pNewSessionItem->setData(QVariant::fromValue(pNewSessionItem->index()),
BIDS_ITEM_SESSION);
188 if (!pNewSessionItem) {
189 return QModelIndex();
192 return pNewSessionItem->index();
198 const QString& sSessionName)
201 QString sNewSessionName;
203 if (!sSessionName.startsWith(
"ses-")) {
204 sNewSessionName =
"ses-" + sSessionName;
206 sNewSessionName = sSessionName;
209 sNewSessionName.remove(
" ");
211 QStandardItem* pSubjectItem = itemFromIndex(subjectIndex);
212 QStandardItem* pNewSessionItem =
new QStandardItem(sNewSessionName);
213 pSubjectItem->setChild(pSubjectItem->rowCount(),
218 pNewSessionItem->setData(QVariant::fromValue(pNewSessionItem->index()),
BIDS_ITEM_SESSION);
222 return pNewSessionItem->index();
228 QStandardItem* pNewItem,
231 QStandardItem* pSessionItem = itemFromIndex(sessionIndex);
232 bool bFolder =
false;
239 sFolderName =
"func";
242 sFolderName =
"anat";
248 sFolderName =
"unknown";
251 for (iFolder = 0; iFolder < pSessionItem->rowCount(); iFolder++) {
252 if (pSessionItem->child(iFolder)->text() == sFolderName) {
259 QStandardItem* pFunctionalItem =
new QStandardItem(sFolderName);
264 pSessionItem->setChild(pSessionItem->rowCount(),
266 pFunctionalItem->setChild(pFunctionalItem->rowCount(),
269 pSessionItem->child(iFolder)->setChild(pSessionItem->child(iFolder)->rowCount(),
273 pNewItem->setData(QVariant::fromValue(iDataType),
BIDS_ITEM_TYPE);
279 return pNewItem->index();
285 QModelIndex sessionIndex)
289 QStandardItem* subjectItem = itemFromIndex(subjectIndex);
290 QStandardItem* sessionItem = itemFromIndex(sessionIndex);
292 sessionItem->parent()->takeRow(sessionItem->row());
294 subjectItem->setChild(subjectItem->rowCount(), sessionItem);
297 for (
int i = 0; i < sessionItem->rowCount(); i++) {
299 for (
int j = 0; j < sessionItem->child(i)->rowCount(); j++) {
308 return sessionItem->index();
314 QModelIndex dataIndex)
318 QStandardItem* dataItem = itemFromIndex(dataIndex);
320 if (dataItem->parent()->rowCount() < 2) {
321 QStandardItem* parent = dataItem->parent();
323 dataItem->parent()->takeRow(dataItem->row()).first();
324 parent->parent()->takeRow(parent->row()).first();
326 dataItem->parent()->takeRow(dataItem->row()).first();
329 QModelIndex newIndex;
358 if (!itemIndex.isValid()) {
364 QStandardItem* pItem = itemFromIndex(itemIndex);
366 qInfo() <<
"Deleting" << pItem->text();
370 if (removeRows(itemIndex.row(), 1, itemIndex.parent())) {
375 if (removeRows(itemIndex.row(), 1, itemIndex.parent())) {
382 if (removeRows(itemIndex.row(), 1, itemIndex.parent())) {
389 if (removeRows(itemIndex.row(), 1, itemIndex.parent())) {
394 if (removeRows(itemIndex.row(), 1, itemIndex.parent())) {
QStandardItemModel mirroring the BIDS dataset hierarchy (subjects / sessions / runs / derivatives).
#define BIDS_ITEM_SESSION
#define BIDS_ITEM_SUBJECT
constexpr auto BIDS_FUNCTIONALDATA
constexpr auto BIDS_UNKNOWN
constexpr auto BIDS_ANATOMICALDATA
constexpr auto BIDS_DIPOLE
constexpr auto BIDS_AVERAGE
constexpr auto BIDS_SUBJECT
constexpr auto BIDS_BEHAVIORALDATA
constexpr auto BIDS_EVENT
constexpr auto BIDS_FOLDER
constexpr auto BIDS_SESSION
2-D display widgets and visualisation helpers (charts, topography, colour maps).
QModelIndex addDataToSession(QModelIndex sessionIndex, QStandardItem *pNewItem, int iDataType)
bool removeItem(QModelIndex itemIndex)
BidsViewModel(QObject *pParent=nullptr)
QModelIndex moveSessionToSubject(QModelIndex subjectIndex, QModelIndex sessionIndex)
void newItemIndex(QModelIndex itemIndex)
QModelIndex moveDataToSession(QModelIndex sessionIndex, QModelIndex dataIndex)
QModelIndex addSubject(const QString &sSubjectName)
void addToData(QStandardItem *pNewItem, const QModelIndex &parentIndex, int iDataType)
QModelIndex addSessionToSubject(const QString &sSubjectName, const QString &sSessionName)
void addData(QModelIndex selectedItem, QStandardItem *pNewItem, int iDataType)