38: QStandardItemModel(pParent)
51 QStandardItem* pNewItem,
58 if (!selectedItem.isValid()) {
66 qDebug() <<
"[BidsViewModel::addData] Prompt user to select a session";
73 if (!selectedItem.isValid()) {
74 QStandardItem* pItem =
new QStandardItem(
"Unknown");
75 pItem->setEditable(
false);
76 pItem->setDragEnabled(
true);
95 const QModelIndex& parentIndex,
98 QStandardItem* selectedData = itemFromIndex(parentIndex);
99 selectedData->setChild(selectedData->rowCount(),
104 pNewAvgItem->setData(QVariant::fromValue(iDataType),
BIDS_ITEM_TYPE);
114 QString sNewSubjectName;
116 if (!sSubjectName.startsWith(
"sub-")) {
117 sNewSubjectName =
"sub-" + sSubjectName;
119 sNewSubjectName = sSubjectName;
122 sNewSubjectName.remove(
" ");
125 QStandardItem* pSubjectItem =
new QStandardItem(sNewSubjectName);
126 appendRow(pSubjectItem);
129 pSubjectItem->setData(QVariant::fromValue(pSubjectItem->index()),
BIDS_ITEM_SUBJECT);
133 return pSubjectItem->index();
139 const QString& sSessionName)
142 QString sNewSessionName;
144 if (!sSessionName.startsWith(
"ses-")) {
145 sNewSessionName =
"ses-" + sSessionName;
147 sNewSessionName = sSessionName;
150 sNewSessionName.remove(
" ");
152 QList<QStandardItem*> listItems = findItems(sSubjectName);
153 bool bRepeat =
false;
156 if (listItems.size() > 1) {
157 qWarning() <<
"[BidsViewModel::addSessionToSubject] Multiple subjects with same name";
159 }
else if (listItems.size() == 0) {
160 qWarning() <<
"[BidsViewModel::addSessionToSubject] No Subject found with name:" << sSubjectName;
161 return QModelIndex();
166 QStandardItem* pNewSessionItem =
nullptr;
169 for (
int i = 0; i < listItems.size(); i++) {
170 QStandardItem* pSubjectItem = listItems.at(i);
173 pSubjectItem->setText(pSubjectItem->text() + QString::number(i + 1));
176 pNewSessionItem =
new QStandardItem(sNewSessionName);
177 pSubjectItem->setChild(pSubjectItem->rowCount(),
181 pNewSessionItem->setData(QVariant::fromValue(pSubjectItem->index()),
BIDS_ITEM_SUBJECT);
182 pNewSessionItem->setData(QVariant::fromValue(pNewSessionItem->index()),
BIDS_ITEM_SESSION);
187 if (!pNewSessionItem) {
188 return QModelIndex();
191 return pNewSessionItem->index();
197 const QString& sSessionName)
200 QString sNewSessionName;
202 if (!sSessionName.startsWith(
"ses-")) {
203 sNewSessionName =
"ses-" + sSessionName;
205 sNewSessionName = sSessionName;
208 sNewSessionName.remove(
" ");
210 QStandardItem* pSubjectItem = itemFromIndex(subjectIndex);
211 QStandardItem* pNewSessionItem =
new QStandardItem(sNewSessionName);
212 pSubjectItem->setChild(pSubjectItem->rowCount(),
217 pNewSessionItem->setData(QVariant::fromValue(pNewSessionItem->index()),
BIDS_ITEM_SESSION);
221 return pNewSessionItem->index();
227 QStandardItem* pNewItem,
230 QStandardItem* pSessionItem = itemFromIndex(sessionIndex);
231 bool bFolder =
false;
238 sFolderName =
"func";
241 sFolderName =
"anat";
247 sFolderName =
"unknown";
250 for (iFolder = 0; iFolder < pSessionItem->rowCount(); iFolder++) {
251 if (pSessionItem->child(iFolder)->text() == sFolderName) {
258 QStandardItem* pFunctionalItem =
new QStandardItem(sFolderName);
263 pSessionItem->setChild(pSessionItem->rowCount(),
265 pFunctionalItem->setChild(pFunctionalItem->rowCount(),
268 pSessionItem->child(iFolder)->setChild(pSessionItem->child(iFolder)->rowCount(),
272 pNewItem->setData(QVariant::fromValue(iDataType),
BIDS_ITEM_TYPE);
278 return pNewItem->index();
284 QModelIndex sessionIndex)
288 QStandardItem* subjectItem = itemFromIndex(subjectIndex);
289 QStandardItem* sessionItem = itemFromIndex(sessionIndex);
291 sessionItem->parent()->takeRow(sessionItem->row());
293 subjectItem->setChild(subjectItem->rowCount(), sessionItem);
296 for (
int i = 0; i < sessionItem->rowCount(); i++) {
298 for (
int j = 0; j < sessionItem->child(i)->rowCount(); j++) {
307 return sessionItem->index();
313 QModelIndex dataIndex)
317 QStandardItem* dataItem = itemFromIndex(dataIndex);
319 if (dataItem->parent()->rowCount() < 2) {
320 QStandardItem* parent = dataItem->parent();
322 dataItem->parent()->takeRow(dataItem->row()).first();
323 parent->parent()->takeRow(parent->row()).first();
325 dataItem->parent()->takeRow(dataItem->row()).first();
328 QModelIndex newIndex;
357 if (!itemIndex.isValid()) {
363 QStandardItem* pItem = itemFromIndex(itemIndex);
365 qInfo() <<
"Deleting" << pItem->text();
369 if (removeRows(itemIndex.row(), 1, itemIndex.parent())) {
374 if (removeRows(itemIndex.row(), 1, itemIndex.parent())) {
381 if (removeRows(itemIndex.row(), 1, itemIndex.parent())) {
388 if (removeRows(itemIndex.row(), 1, itemIndex.parent())) {
393 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
#define BIDS_BEHAVIORALDATA
#define BIDS_FUNCTIONALDATA
#define BIDS_ANATOMICALDATA
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)