BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
AbstractDataLoaderResultModel Class Referenceabstract

Base class for result tables of data loaders. More...

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

Public Types

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

Public Member Functions

 AbstractDataLoaderResultModel ()
 
virtual int columnCount (const QModelIndex &parent=QModelIndex()) const override
 
virtual QVariant data (const QModelIndex &index, int role=Qt::DisplayRole) const override
 
virtual QVariant headerData (int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const override
 
virtual int rowCount (const QModelIndex &parent) const override
 
QVector< int > sectionsOfColumnType (ColumnType type) const
 The table header sections which belong to the given column type. More...
 

Protected Member Functions

virtual QString cellText (ColumnType type, int row, int column) const =0
 The text of the given cell. More...
 
virtual int columnCount (ColumnType type) const =0
 The number of existing columns related to the given column type. More...
 
virtual QString headerTextOfCalculatedColumn (int column) const =0
 Return the table header text for the given column. More...
 
virtual int rowCount () const =0
 The row count of the result table. More...
 
virtual bool rowHasError (const QModelIndex &index) const
 Returns whether the row given in the index contains errors. 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. 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. More...
 
int lastSectionOfColumnType (ColumnType type) const
 Calculates the last real header view section of the given column type. More...
 

Private Attributes

QIcon m_warningIcon
 

Detailed Description

Base class for result tables of data loaders.

Derive from this class and return an instance in YourDataLoader::createResultModel(). The result table is the one on the right side when importing CSV files.

Definition at line 24 of file AbstractDataLoaderResultModel.h.

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 };
@ none
undefined converter mode

Constructor & Destructor Documentation

◆ AbstractDataLoaderResultModel()

AbstractDataLoaderResultModel::AbstractDataLoaderResultModel ( )

Definition at line 37 of file AbstractDataLoaderResultModel.cpp.

38 {
39  m_warningIcon = QIcon(":/images/warning_16x16.png");
40 }

References m_warningIcon.

Member Function Documentation

◆ cellText()

virtual QString AbstractDataLoaderResultModel::cellText ( ColumnType  type,
int  row,
int  column 
) const
protectedpure virtual

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.

Implemented in QREDataLoaderResultModel, and AutomaticDataLoader1DResultModel.

Referenced by data().

◆ columnCount() [1/2]

virtual int AbstractDataLoaderResultModel::columnCount ( ColumnType  type) const
protectedpure virtual

The number of existing columns related to the given column type.

0 if the type is not present at all.

Implemented in QREDataLoaderResultModel, and AutomaticDataLoader1DResultModel.

◆ columnCount() [2/2]

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

Definition at line 42 of file AbstractDataLoaderResultModel.cpp.

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

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

Referenced by firstSectionOfColumnType(), and lastSectionOfColumnType().

◆ columnType() [1/2]

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

Calculates the column type of the given index.

Definition at line 193 of file AbstractDataLoaderResultModel.cpp.

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

Referenced by data(), and headerData().

◆ columnType() [2/2]

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

Calculates the column type of the real header view section.

Definition at line 175 of file AbstractDataLoaderResultModel.cpp.

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

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

Here is the call graph for this function:

◆ data()

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

Definition at line 62 of file AbstractDataLoaderResultModel.cpp.

64 {
65  if (!index.isValid())
66  return QVariant();
67 
68  const auto colType = columnType(index);
69 
70  if (role == Qt::BackgroundRole) {
71  switch (colType) {
72  case ColumnType::line:
73  return Palette::backgroundColorFileContent;
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  }
114 
115  case ColumnType::processed: {
116  if (!rowIsSkipped(index) && !rowHasError(index))
117  return cellText(colType, index.row(),
118  index.column() - firstSectionOfColumnType(colType));
119  }
120  }
121 
122  return QVariant();
123  }
124 
125  if (role == Qt::DecorationRole && (colType == ColumnType::line || colType == ColumnType::error)
126  && rowHasError(index))
127  return m_warningIcon;
128 
129  if (role == Qt::TextAlignmentRole && colType == ColumnType::line)
130  return QVariant(Qt::AlignRight | Qt::AlignVCenter);
131 
132  if (role == Qt::ToolTipRole && colType == ColumnType::line && rowHasError(index))
133  return cellText(ColumnType::error, index.row(), 0);
134 
135  return QVariant();
136 }
virtual bool rowIsSkipped(const QModelIndex &index) const
Returns whether the row given in the index is a skipped row.
virtual QString cellText(ColumnType type, int row, int column) const =0
The text of the given cell.
virtual bool rowHasError(const QModelIndex &index) const
Returns whether the row given in the index contains errors.
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.

References cellText(), columnType(), SessionItemUtils::DecorationRole(), error, fileContent, firstSectionOfColumnType(), SessionItemUtils::ForegroundRole(), line, m_warningIcon, processed, raw, rowHasError(), rowIsSkipped(), and SessionItemUtils::ToolTipRole().

Referenced by AutomaticDataLoader1DResultModel::cellText(), and AutomaticDataLoader1DResultModel::rowCount().

Here is the call graph for this function:

◆ firstSectionOfColumnType()

int AbstractDataLoaderResultModel::firstSectionOfColumnType ( ColumnType  type) const
private

Calculates the first real header view section of the given column type.

Returns -1 if the column type does not exist.

Definition at line 198 of file AbstractDataLoaderResultModel.cpp.

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

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

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

Here is the call graph for this function:

◆ headerData()

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

Definition at line 138 of file AbstractDataLoaderResultModel.cpp.

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

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

Here is the call graph for this function:

◆ headerTextOfCalculatedColumn()

virtual QString AbstractDataLoaderResultModel::headerTextOfCalculatedColumn ( int  column) const
protectedpure virtual

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.

Implemented in QREDataLoaderResultModel, and AutomaticDataLoader1DResultModel.

Referenced by headerData().

◆ lastSectionOfColumnType()

int AbstractDataLoaderResultModel::lastSectionOfColumnType ( ColumnType  type) const
private

Calculates the last real header view section of the given column type.

Returns -1 if the column type does not exist.

Definition at line 232 of file AbstractDataLoaderResultModel.cpp.

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

References columnCount(), and firstSectionOfColumnType().

Referenced by columnType(), and sectionsOfColumnType().

Here is the call graph for this function:

◆ rowCount() [1/2]

virtual int AbstractDataLoaderResultModel::rowCount ( ) const
protectedpure virtual

The row count of the result table.

Implemented in QREDataLoaderResultModel, and AutomaticDataLoader1DResultModel.

Referenced by rowCount().

◆ rowCount() [2/2]

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

Definition at line 57 of file AbstractDataLoaderResultModel.cpp.

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

References rowCount().

Here is the call graph for this function:

◆ rowHasError() [1/2]

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

Returns whether the row given in the index contains errors.

Only override this for performance reasons.

Definition at line 246 of file AbstractDataLoaderResultModel.cpp.

247 {
248  return rowHasError(index.row());
249 }

Referenced by data().

◆ rowHasError() [2/2]

virtual bool AbstractDataLoaderResultModel::rowHasError ( int  row) const
protectedpure virtual

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

Implemented in QREDataLoaderResultModel, and AutomaticDataLoader1DResultModel.

◆ rowIsSkipped() [1/2]

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

Returns whether the row given in the index is a skipped row.

Only override this for performance reasons.

Definition at line 241 of file AbstractDataLoaderResultModel.cpp.

242 {
243  return rowIsSkipped(index.row());
244 }

Referenced by data().

◆ rowIsSkipped() [2/2]

virtual bool AbstractDataLoaderResultModel::rowIsSkipped ( int  row) const
protectedpure virtual

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

Implemented in QREDataLoaderResultModel, and AutomaticDataLoader1DResultModel.

◆ sectionsOfColumnType()

QVector< int > AbstractDataLoaderResultModel::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.

Definition at line 163 of file AbstractDataLoaderResultModel.cpp.

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

References firstSectionOfColumnType(), and lastSectionOfColumnType().

Referenced by SpecularDataImportWidget::updatePreview().

Here is the call graph for this function:

Member Data Documentation

◆ m_warningIcon

QIcon AbstractDataLoaderResultModel::m_warningIcon
private

Definition at line 93 of file AbstractDataLoaderResultModel.h.

Referenced by AbstractDataLoaderResultModel(), and data().


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