18 #include <QApplication>
31 Qt::ConnectionType(Qt::QueuedConnection | Qt::UniqueConnection));
34 Qt::UniqueConnection);
70 const int rowOfItem =
m_items1D.indexOf(item);
77 const int rowOfHeadline = 0;
78 beginRemoveRows(QModelIndex(), rowOfHeadline, rowOfHeadline);
85 const int rowOfItem =
m_items2D.indexOf(item);
92 const int rowOfHeadline =
m_items1D.isEmpty() ? 0 : 1;
93 beginRemoveRows(QModelIndex(), rowOfHeadline, rowOfHeadline);
108 const int rowOfHeadline = 0;
109 beginInsertRows(QModelIndex(), rowOfHeadline, rowOfHeadline);
127 const int rowOfHeadline =
m_items1D.isEmpty() ? 0 : 1;
128 beginInsertRows(QModelIndex(), rowOfHeadline, rowOfHeadline);
152 if (!hasIndex(row, column,
parent))
153 return QModelIndex();
156 return createIndex(row, column,
nullptr);
158 const bool parentIs1DHeadline = (
parent.row() == 0) && !
m_items1D.isEmpty();
159 if (parentIs1DHeadline)
160 return createIndex(row, column,
m_items1D[row]);
162 return createIndex(row, column,
m_items2D[row]);
167 if (!
index.isValid())
168 return QModelIndex();
170 if (
index.internalPointer() ==
nullptr)
171 return QModelIndex();
199 if (
parent.internalPointer() !=
nullptr)
203 if (
parent.row() == 0 && has1D)
214 const QString title = (
index.row() == 0 && has1D) ?
"1D Data" :
"2D Data";
216 case Qt::DisplayRole:
220 QFont f(QApplication::font());
221 f.setPointSize(f.pointSize() * 1.5);
226 case Qt::SizeHintRole: {
227 QFont f(QApplication::font());
228 f.setPointSize(f.pointSize() * 1.5);
230 QSize s = QFontMetrics(f).boundingRect(title).size();
231 return QSize(s.width() * 2, s.height() * 2);
234 case Qt::TextAlignmentRole:
235 return QVariant(Qt::AlignLeft | Qt::AlignVCenter);
237 case Qt::BackgroundRole:
238 return QBrush(QColor(250, 250, 250));
241 return QBrush(Qt::black);
254 if (item->isSpecularData())
255 return item->hasImportErrors() ? QIcon(
":/images/warning_16x16.png")
256 : QIcon(
":/images/1D_OK.png");
258 return QIcon(
":/images/2D_OK.png");
261 if (role == Qt::DisplayRole) {
262 const auto numErrors =
263 (item->dataLoader() !=
nullptr) ? item->dataLoader()->numErrors() : 0;
267 else if (numErrors == 1)
268 return item->name() +
" (1 parser warning)";
270 return item->name() + QString(
" (%1 parser warnings)").arg(numErrors);
273 if (role == Qt::EditRole)
282 return Qt::NoItemFlags;
285 if (
index.column() == 0)
286 f |= Qt::ItemIsEditable;
293 if (!
index.isValid())
296 if (role == Qt::EditRole &&
index.column() == 0) {
307 if (!
index.isValid())
316 return QModelIndex();
320 return createIndex(
index, 0, item);
322 return QModelIndex();
326 return createIndex(
index, 0, item);
328 return QModelIndex();
333 if (!
index.isValid())
336 return index.internalPointer() ==
nullptr;
341 return createIndex(0, 0,
nullptr);
347 return createIndex(has1D ? 1 : 0, 0,
nullptr);
355 Qt::UniqueConnection);
360 Qt::UniqueConnection);
Defines class RealDataItem.
Defines class RealDataModel.
Defines class RealDataTreeModel.
The RealDataItem class represents intensity data imported from file and intended for fitting.
bool isSpecularData() const
AbstractDataLoader * dataLoader() const
void setName(const QString &name)
void importContentsProcessed()
The RealDataModel class is a model to store all imported RealDataItem's.
QVector< RealDataItem * > realDataItems2D() const
RealDataItem * insertIntensityDataItem()
void realDataAddedOrRemoved()
QVector< RealDataItem * > realDataItems1D() const
RealDataItem * insertSpecularDataItem()
virtual int rowCount(const QModelIndex &parent=QModelIndex()) const override
QVector< RealDataItem * > m_items2D
virtual QModelIndex parent(const QModelIndex &index) const override
QModelIndex indexForItem(RealDataItem *item) const
virtual Qt::ItemFlags flags(const QModelIndex &index) const override
void setRealDataModel(RealDataModel *model)
virtual bool setData(const QModelIndex &index, const QVariant &value, int role) override
void refreshAfterModelChange()
QModelIndex create2DHeadlineIndex() const
virtual QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override
bool m_intermediate2DHeadline
RealDataItem * insertIntensityDataItem()
bool isHeadline(const QModelIndex &index) const
virtual int columnCount(const QModelIndex &parent=QModelIndex()) const override
RealDataItem * topMostItem() const
The topmost visible item. Can be null of course.
RealDataItem * insertSpecularDataItem()
QVector< RealDataItem * > m_items1D
RealDataItem * itemForIndex(const QModelIndex &index) const
virtual QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override
void onContentsProcessed(RealDataItem *item)
bool m_intermediate1DHeadline
void removeItem(RealDataItem *item)
void updateSubsriptions()
QModelIndex create1DHeadlineIndex() const
virtual Qt::ItemFlags flags(const QModelIndex &index) const
void removeItem(SessionItem *item)
virtual QVariant data(const QModelIndex &index, int role) const
QModelIndex indexOfItem(SessionItem *item) const
QVariant DecorationRole(const SessionItem &item)
Returns tooltip for given item.
QVariant ToolTipRole(const SessionItem &item, int ncol=0)
Returns tooltip for given item.
QVariant ForegroundRole(const SessionItem &item)
Returns text color for given item.