BornAgain  1.19.79
Simulate and fit neutron and x-ray scattering at grazing incidence
AutomaticDataLoader1DResultModel Class Reference

Description

The result model of a AutomaticDataLoader1D (for showing the import results in a table view).

Definition at line 23 of file AutomaticDataLoader1DResultModel.h.

Inheritance diagram for AutomaticDataLoader1DResultModel:
[legend]
Collaboration diagram for AutomaticDataLoader1DResultModel:
[legend]

Public Types

enum class  ColumnType {
  none , line , fileContent , raw ,
  processed , error
}
 

Public Member Functions

 AutomaticDataLoader1DResultModel (RealDataItem *item)
 
int columnCount (const QModelIndex &parent=QModelIndex()) const override
 
QVariant data (const QModelIndex &index, int role=Qt::DisplayRole) const override
 
QVariant headerData (int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const override
 
int rowCount (const QModelIndex &parent) const override
 
QVector< int > sectionsOfColumnType (ColumnType type) const
 The table header sections which belong to the given column type. Empty if this column type is not present at all. More...
 

Protected Member Functions

QString cellText (ColumnType type, int row, int col) const override
 The text of the given cell. For convenience, column starts at 0 for the given column type, therefore it is not the same as the "real" section in the table header. This method will not be called for every row/column present in the table. Instead, optimizations will be done before calling it. E.g. the calculated values for lines which contain errors will never be called. Also raw or calculated contents will not be queried if a line is skipped. More...
 
int columnCount (ColumnType type) const override
 The number of existing columns related to the given column type. 0 if the type is not present at all. More...
 
virtual int columnCount (ColumnType type) const=0
 The number of existing columns related to the given column type. 0 if the type is not present at all. More...
 
int columnCount (const QModelIndex &parent=QModelIndex()) const override
 
QString headerTextOfCalculatedColumn (int column) const override
 Return the table header text for the given column. For convenience, column starts at 0 for first calculated column, therefore it is not the same as the "real" section in the table header. More...
 
int rowCount () const override
 The row count of the result table. More...
 
virtual int rowCount () const=0
 The row count of the result table. More...
 
int rowCount (const QModelIndex &parent) const override
 
virtual bool rowHasError (const QModelIndex &index) const
 Returns whether the row given in the index contains errors. Only override this for performance reasons. More...
 
virtual bool rowHasError (const QModelIndex &index) const
 Returns whether the row given in the index contains errors. Only override this for performance reasons. More...
 
bool rowHasError (int row) const override
 Returns whether the row given in the index contains errors. Row counting starts with 0. More...
 
virtual bool rowHasError (int row) const=0
 Returns whether the row given in the index contains errors. Row counting starts with 0. More...
 
virtual bool rowIsSkipped (const QModelIndex &index) const
 Returns whether the row given in the index is a skipped row. Only override this for performance reasons. More...
 
virtual bool rowIsSkipped (const QModelIndex &index) const
 Returns whether the row given in the index is a skipped row. Only override this for performance reasons. More...
 
bool rowIsSkipped (int row) const override
 Returns whether the row given in the index is a skipped row. Row counting starts with 0. More...
 
virtual bool rowIsSkipped (int row) const=0
 Returns whether the row given in the index is a skipped row. Row counting starts with 0. More...
 

Private Member Functions

ColumnType columnType (const QModelIndex &index) const
 Calculates the column type of the given index. More...
 
ColumnType columnType (int section) const
 Calculates the column type of the real header view section. More...
 
int firstSectionOfColumnType (ColumnType type) const
 Calculates the first real header view section of the given column type. Returns -1 if the column type does not exist. More...
 
int lastSectionOfColumnType (ColumnType type) const
 Calculates the last real header view section of the given column type. Returns -1 if the column type does not exist. More...
 

Private Attributes

RealDataItemm_item
 
QIcon m_warningIcon
 

Member Enumeration Documentation

◆ ColumnType

Enumerator
none 
line 
fileContent 
raw 
processed 
error 

Definition at line 26 of file AbstractDataLoaderResultModel.h.

26 { none, line, fileContent, raw, processed, error };

Constructor & Destructor Documentation

◆ AutomaticDataLoader1DResultModel()

AutomaticDataLoader1DResultModel::AutomaticDataLoader1DResultModel ( RealDataItem item)

Definition at line 20 of file AutomaticDataLoader1DResultModel.cpp.

21  : m_item(item)
22 {
23 }

Member Function Documentation

◆ cellText()

QString AutomaticDataLoader1DResultModel::cellText ( ColumnType  type,
int  row,
int  column 
) const
overrideprotectedvirtual

The text of the given cell. For convenience, column starts at 0 for the given column type, therefore it is not the same as the "real" section in the table header. This method will not be called for every row/column present in the table. Instead, optimizations will be done before calling it. E.g. the calculated values for lines which contain errors will never be called. Also raw or calculated contents will not be queried if a line is skipped.

Implements AbstractDataLoaderResultModel.

Definition at line 61 of file AutomaticDataLoader1DResultModel.cpp.

62 {
63  if (col < 0 || row < 0 || row >= rowCount() || type != ColumnType::processed)
64  return QString();
65 
67 
68  if (col == 0)
69  return QString::number(data->frame().projectedCoord(row, 0));
70 
71  if (col == 1)
72  return QString::number(data->operator[](row));
73 
74  return QString();
75 }
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override
int rowCount() const override
The row count of the result table.
Datafield * getDatafield()
Definition: DataItem.h:41
SpecularDataItem * specularDataItem()

References AbstractDataLoaderResultModel::data(), DataItem::getDatafield(), m_item, AbstractDataLoaderResultModel::processed, rowCount(), and RealDataItem::specularDataItem().

Here is the call graph for this function:

◆ columnCount() [1/4]

int AutomaticDataLoader1DResultModel::columnCount ( ColumnType  type) const
overrideprotectedvirtual

The number of existing columns related to the given column type. 0 if the type is not present at all.

Implements AbstractDataLoaderResultModel.

Definition at line 56 of file AutomaticDataLoader1DResultModel.cpp.

57 {
58  return (type == ColumnType::processed) ? 2 : 0;
59 }

References AbstractDataLoaderResultModel::processed.

◆ columnCount() [2/4]

virtual int AbstractDataLoaderResultModel::columnCount
protected

The number of existing columns related to the given column type. 0 if the type is not present at all.

◆ columnCount() [3/4]

int AbstractDataLoaderResultModel::columnCount ( const QModelIndex &  parent = QModelIndex()) const
overrideinherited

◆ columnCount() [4/4]

int AbstractDataLoaderResultModel::columnCount
overrideprotected

Definition at line 32 of file AbstractDataLoaderResultModel.cpp.

44 {
45  if (parent.isValid())
46  return 0;
47 
50 
51  int cols = 0;
52  for (ColumnType type : colTypes)
53  cols += columnCount(type);
54 
55  return cols;
56 }
int columnCount(const QModelIndex &parent=QModelIndex()) const override

◆ columnType() [1/2]

AbstractDataLoaderResultModel::ColumnType AbstractDataLoaderResultModel::columnType ( const QModelIndex &  index) const
privateinherited

Calculates the column type of the given index.

Definition at line 195 of file AbstractDataLoaderResultModel.cpp.

196 {
197  return columnType(index.column());
198 }
ColumnType columnType(const QModelIndex &index) const
Calculates the column type of the given index.

Referenced by AbstractDataLoaderResultModel::data(), and AbstractDataLoaderResultModel::headerData().

◆ columnType() [2/2]

AbstractDataLoaderResultModel::ColumnType AbstractDataLoaderResultModel::columnType ( int  section) const
privateinherited

Calculates the column type of the real header view section.

Definition at line 177 of file AbstractDataLoaderResultModel.cpp.

178 {
181 
182  for (ColumnType type : colTypes) {
183  const int firstSection = firstSectionOfColumnType(type);
184  if (firstSection < 0)
185  continue;
186 
187  if (section >= firstSection && section <= lastSectionOfColumnType(type))
188  return type;
189  }
190 
191  return ColumnType::none;
192 }
int firstSectionOfColumnType(ColumnType type) const
Calculates the first real header view section of the given column type. Returns -1 if the column type...
int lastSectionOfColumnType(ColumnType type) const
Calculates the last real header view section of the given column type. Returns -1 if the column type ...

References AbstractDataLoaderResultModel::error, AbstractDataLoaderResultModel::fileContent, AbstractDataLoaderResultModel::firstSectionOfColumnType(), AbstractDataLoaderResultModel::lastSectionOfColumnType(), AbstractDataLoaderResultModel::line, AbstractDataLoaderResultModel::none, AbstractDataLoaderResultModel::processed, and AbstractDataLoaderResultModel::raw.

Here is the call graph for this function:

◆ data()

QVariant AbstractDataLoaderResultModel::data ( const QModelIndex &  index,
int  role = Qt::DisplayRole 
) const
overrideinherited

Definition at line 63 of file AbstractDataLoaderResultModel.cpp.

65 {
66  if (!index.isValid())
67  return QVariant();
68 
69  const auto colType = columnType(index);
70 
71  if (role == Qt::BackgroundRole) {
72  switch (colType) {
73  case ColumnType::line:
75  return Palette::backgroundColorFileContent;
76  case ColumnType::raw:
77  return rowIsSkipped(index) ? QVariant() : Palette::backgroundColorRawContent;
79  return rowIsSkipped(index) || rowHasError(index)
80  ? QVariant()
81  : Palette::backgroundColorProcessedContent;
82  case ColumnType::error:
83  return rowIsSkipped(index) || !rowHasError(index) ? QVariant()
84  : Palette::backgroundColorErrors;
85  default:
86  return QVariant();
87  }
88  }
89 
90  if (role == Qt::ForegroundRole) {
91  if (colType == ColumnType::fileContent && rowIsSkipped(index))
92  return Palette::skippedLineTextColor;
93  return QVariant();
94  }
95 
96  if (role == Qt::DisplayRole) {
97  switch (colType) {
98  case ColumnType::line:
99  return QString::number(index.row() + 1);
100 
102  QString lineContent =
103  cellText(colType, index.row(), index.column() - firstSectionOfColumnType(colType));
104  lineContent.replace("\t", " --> ");
105  return lineContent;
106  }
107 
108  case ColumnType::raw:
109  case ColumnType::error: {
110  if (!rowIsSkipped(index))
111  return cellText(colType, index.row(),
112  index.column() - firstSectionOfColumnType(colType));
113  } break;
114 
115  case ColumnType::processed: {
116  if (!rowIsSkipped(index) && !rowHasError(index))
117  return cellText(colType, index.row(),
118  index.column() - firstSectionOfColumnType(colType));
119  } break;
120  default:
121  break;
122  }
123 
124  return QVariant();
125  }
126 
127  if (role == Qt::DecorationRole && (colType == ColumnType::line || colType == ColumnType::error)
128  && rowHasError(index))
129  return m_warningIcon;
130 
131  if (role == Qt::TextAlignmentRole && colType == ColumnType::line)
132  return QVariant(Qt::AlignRight | Qt::AlignVCenter);
133 
134  if (role == Qt::ToolTipRole && colType == ColumnType::line && rowHasError(index))
135  return cellText(ColumnType::error, index.row(), 0);
136 
137  return QVariant();
138 }
virtual bool rowIsSkipped(const QModelIndex &index) const
Returns whether the row given in the index is a skipped row. Only override this for performance reaso...
virtual QString cellText(ColumnType type, int row, int column) const =0
The text of the given cell. For convenience, column starts at 0 for the given column type,...
virtual bool rowHasError(const QModelIndex &index) const
Returns whether the row given in the index contains errors. Only override this for performance reason...

References AbstractDataLoaderResultModel::cellText(), AbstractDataLoaderResultModel::columnType(), AbstractDataLoaderResultModel::error, AbstractDataLoaderResultModel::fileContent, AbstractDataLoaderResultModel::firstSectionOfColumnType(), AbstractDataLoaderResultModel::line, AbstractDataLoaderResultModel::m_warningIcon, AbstractDataLoaderResultModel::processed, AbstractDataLoaderResultModel::raw, AbstractDataLoaderResultModel::rowHasError(), and AbstractDataLoaderResultModel::rowIsSkipped().

Referenced by cellText(), and rowCount().

Here is the call graph for this function:

◆ firstSectionOfColumnType()

int AbstractDataLoaderResultModel::firstSectionOfColumnType ( ColumnType  type) const
privateinherited

Calculates the first real header view section of the given column type. Returns -1 if the column type does not exist.

Definition at line 200 of file AbstractDataLoaderResultModel.cpp.

201 {
202  const int lineColumnCount = columnCount(ColumnType::line);
203  const int fileContentColumnCount = columnCount(ColumnType::fileContent);
204 
205  if (type == ColumnType::line)
206  return lineColumnCount > 0 ? 0 : -1;
207 
208  if (type == ColumnType::fileContent)
209  return columnCount(ColumnType::fileContent) > 0 ? lineColumnCount : -1;
210 
211  if (type == ColumnType::raw) {
212  const bool hasRawContent = columnCount(ColumnType::raw) > 0;
213  return hasRawContent ? lineColumnCount + fileContentColumnCount : -1;
214  }
215 
216  if (type == ColumnType::processed) {
217  const bool hasProcessedContent = columnCount(ColumnType::processed) > 0;
218  return hasProcessedContent
219  ? (lineColumnCount + fileContentColumnCount + columnCount(ColumnType::raw))
220  : -1;
221  }
222 
223  if (type == ColumnType::error) {
224  const bool hasParsingErrors = columnCount(ColumnType::error) > 0;
225  return hasParsingErrors
226  ? (lineColumnCount + fileContentColumnCount + columnCount(ColumnType::raw)
228  : -1;
229  }
230 
231  return -1;
232 }

References AbstractDataLoaderResultModel::columnCount(), AbstractDataLoaderResultModel::error, AbstractDataLoaderResultModel::fileContent, AbstractDataLoaderResultModel::line, AbstractDataLoaderResultModel::processed, and AbstractDataLoaderResultModel::raw.

Referenced by AbstractDataLoaderResultModel::columnType(), AbstractDataLoaderResultModel::data(), AbstractDataLoaderResultModel::headerData(), AbstractDataLoaderResultModel::lastSectionOfColumnType(), and AbstractDataLoaderResultModel::sectionsOfColumnType().

Here is the call graph for this function:

◆ headerData()

QVariant AbstractDataLoaderResultModel::headerData ( int  section,
Qt::Orientation  orientation,
int  role = Qt::DisplayRole 
) const
overrideinherited

Definition at line 140 of file AbstractDataLoaderResultModel.cpp.

142 {
143  if (role == Qt::DisplayRole && orientation == Qt::Horizontal) {
144  switch (columnType(section)) {
145  case ColumnType::line:
146  return "Line";
148  return "File content (text)";
149  case ColumnType::raw:
150  return QString("Column %1 raw")
151  .arg(section - firstSectionOfColumnType(ColumnType::raw) + 1);
153  return headerTextOfCalculatedColumn(section
155  case ColumnType::error:
156  return "Parser warnings";
157  default:
158  return QVariant();
159  }
160  }
161 
162  return QAbstractTableModel::headerData(section, orientation, role);
163 }
virtual QString headerTextOfCalculatedColumn(int column) const =0
Return the table header text for the given column. For convenience, column starts at 0 for first calc...

References AbstractDataLoaderResultModel::columnType(), AbstractDataLoaderResultModel::error, AbstractDataLoaderResultModel::fileContent, AbstractDataLoaderResultModel::firstSectionOfColumnType(), AbstractDataLoaderResultModel::headerTextOfCalculatedColumn(), AbstractDataLoaderResultModel::line, AbstractDataLoaderResultModel::processed, and AbstractDataLoaderResultModel::raw.

Here is the call graph for this function:

◆ headerTextOfCalculatedColumn()

QString AutomaticDataLoader1DResultModel::headerTextOfCalculatedColumn ( int  column) const
overrideprotectedvirtual

Return the table header text for the given column. For convenience, column starts at 0 for first calculated column, therefore it is not the same as the "real" section in the table header.

Implements AbstractDataLoaderResultModel.

Definition at line 44 of file AutomaticDataLoader1DResultModel.cpp.

45 {
46  switch (column) {
47  case 0:
48  return "Q [1/nm]";
49  case 1:
50  return "R";
51  default:
52  return "";
53  }
54 }

◆ lastSectionOfColumnType()

int AbstractDataLoaderResultModel::lastSectionOfColumnType ( ColumnType  type) const
privateinherited

Calculates the last real header view section of the given column type. Returns -1 if the column type does not exist.

Definition at line 234 of file AbstractDataLoaderResultModel.cpp.

235 {
236  const int firstSection = firstSectionOfColumnType(type);
237  if (firstSection == -1)
238  return -1;
239 
240  return firstSection + columnCount(type) - 1;
241 }

References AbstractDataLoaderResultModel::columnCount(), and AbstractDataLoaderResultModel::firstSectionOfColumnType().

Referenced by AbstractDataLoaderResultModel::columnType(), and AbstractDataLoaderResultModel::sectionsOfColumnType().

Here is the call graph for this function:

◆ rowCount() [1/4]

int AutomaticDataLoader1DResultModel::rowCount ( ) const
overrideprotectedvirtual

The row count of the result table.

Implements AbstractDataLoaderResultModel.

Definition at line 30 of file AutomaticDataLoader1DResultModel.cpp.

31 {
33  if (!data)
34  return 0;
35 
36  return int(data->size());
37 }

References AbstractDataLoaderResultModel::data(), DataItem::getDatafield(), m_item, and RealDataItem::specularDataItem().

Referenced by cellText().

Here is the call graph for this function:

◆ rowCount() [2/4]

virtual int AbstractDataLoaderResultModel::rowCount
protected

The row count of the result table.

◆ rowCount() [3/4]

int AbstractDataLoaderResultModel::rowCount ( const QModelIndex &  parent) const
overrideinherited

Definition at line 58 of file AbstractDataLoaderResultModel.cpp.

59 {
60  return parent.isValid() ? 0 : rowCount();
61 }
virtual int rowCount() const =0
The row count of the result table.

References AbstractDataLoaderResultModel::rowCount().

Here is the call graph for this function:

◆ rowCount() [4/4]

int AbstractDataLoaderResultModel::rowCount
overrideprotected

Definition at line 33 of file AbstractDataLoaderResultModel.cpp.

59 {
60  return parent.isValid() ? 0 : rowCount();
61 }

◆ rowHasError() [1/4]

bool AbstractDataLoaderResultModel::rowHasError ( const QModelIndex &  index) const
protectedvirtualinherited

Returns whether the row given in the index contains errors. Only override this for performance reasons.

Definition at line 248 of file AbstractDataLoaderResultModel.cpp.

249 {
250  return rowHasError(index.row());
251 }

Referenced by AbstractDataLoaderResultModel::data().

◆ rowHasError() [2/4]

bool AbstractDataLoaderResultModel::rowHasError
protected

Returns whether the row given in the index contains errors. Only override this for performance reasons.

Definition at line 50 of file AbstractDataLoaderResultModel.cpp.

249 {
250  return rowHasError(index.row());
251 }
virtual bool rowHasError(const QModelIndex &index) const
Returns whether the row given in the index contains errors. Only override this for performance reason...

◆ rowHasError() [3/4]

bool AutomaticDataLoader1DResultModel::rowHasError ( int  row) const
overrideprotectedvirtual

Returns whether the row given in the index contains errors. Row counting starts with 0.

Implements AbstractDataLoaderResultModel.

Definition at line 25 of file AutomaticDataLoader1DResultModel.cpp.

26 {
27  return false;
28 }

◆ rowHasError() [4/4]

virtual bool AbstractDataLoaderResultModel::rowHasError
protected

Returns whether the row given in the index contains errors. Row counting starts with 0.

◆ rowIsSkipped() [1/4]

bool AbstractDataLoaderResultModel::rowIsSkipped ( const QModelIndex &  index) const
protectedvirtualinherited

Returns whether the row given in the index is a skipped row. Only override this for performance reasons.

Definition at line 243 of file AbstractDataLoaderResultModel.cpp.

244 {
245  return rowIsSkipped(index.row());
246 }

Referenced by AbstractDataLoaderResultModel::data().

◆ rowIsSkipped() [2/4]

bool AbstractDataLoaderResultModel::rowIsSkipped
protected

Returns whether the row given in the index is a skipped row. Only override this for performance reasons.

Definition at line 46 of file AbstractDataLoaderResultModel.cpp.

244 {
245  return rowIsSkipped(index.row());
246 }
virtual bool rowIsSkipped(const QModelIndex &index) const
Returns whether the row given in the index is a skipped row. Only override this for performance reaso...

References AbstractDataLoaderResultModel::error, AbstractDataLoaderResultModel::fileContent, AbstractDataLoaderResultModel::line, AbstractDataLoaderResultModel::processed, and AbstractDataLoaderResultModel::raw.

◆ rowIsSkipped() [3/4]

bool AutomaticDataLoader1DResultModel::rowIsSkipped ( int  row) const
overrideprotectedvirtual

Returns whether the row given in the index is a skipped row. Row counting starts with 0.

Implements AbstractDataLoaderResultModel.

Definition at line 39 of file AutomaticDataLoader1DResultModel.cpp.

40 {
41  return false;
42 }

◆ rowIsSkipped() [4/4]

virtual bool AbstractDataLoaderResultModel::rowIsSkipped
protected

Returns whether the row given in the index is a skipped row. Row counting starts with 0.

◆ sectionsOfColumnType()

QVector< int > AbstractDataLoaderResultModel::sectionsOfColumnType ( ColumnType  type) const
inherited

The table header sections which belong to the given column type. Empty if this column type is not present at all.

Definition at line 165 of file AbstractDataLoaderResultModel.cpp.

166 {
167  QVector<int> sections;
168  for (int section = firstSectionOfColumnType(type); section <= lastSectionOfColumnType(type);
169  section++)
170  if (section >= 0)
171  sections << section;
172 
173  return sections;
174 }

References AbstractDataLoaderResultModel::firstSectionOfColumnType(), and AbstractDataLoaderResultModel::lastSectionOfColumnType().

Referenced by SpecularDataImportWidget::updatePreview().

Here is the call graph for this function:

Member Data Documentation

◆ m_item

RealDataItem* AutomaticDataLoader1DResultModel::m_item
private

Definition at line 40 of file AutomaticDataLoader1DResultModel.h.

Referenced by cellText(), and rowCount().

◆ m_warningIcon

QIcon AbstractDataLoaderResultModel::m_warningIcon
privateinherited

The documentation for this class was generated from the following files: