BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
importtableheader.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file gui2/dataloader/importtableheader.cpp
6 //! @brief Implements class CLASS?
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2020
11 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************************************
14 
19 
21 
22 namespace gui2 {
23 
24 namespace {
25 const std::vector<std::string> utilityRowNames = {"Type", "Unit", "Multiplier"};
26 
27 const std::vector<std::string> typeNames = {Constants::AxisType, Constants::IntensityType,
29 
30 const std::vector<std::string> unitNames = {"a.u.", "counts", "1/nm", "Angstrom"};
31 
32 //! Returns column type from column index.
33 std::string suggestColumnTypeFromColumnIndex(int col)
34 {
35  return col < static_cast<int>(typeNames.size()) ? typeNames[col] : Constants::IgnoreType;
36 }
37 
38 QVariant CreateTypeVariant(int col = 0)
39 {
40  auto combo = ComboProperty::createFrom(typeNames);
41  auto selected_value = suggestColumnTypeFromColumnIndex(col);
42  combo.setValue(selected_value);
43  return QVariant::fromValue<ComboProperty>(combo);
44 }
45 
46 std::vector<QVariant> CreateTypeVariants(int maxColumnCount)
47 {
48  std::vector<QVariant> result;
49  for (int i = 0; i < maxColumnCount; ++i)
50  result.push_back(CreateTypeVariant(i));
51  return result;
52 }
53 
54 std::vector<QVariant> CreateUnitVariants(int maxColumnCount)
55 {
56  std::vector<QVariant> result;
57  for (int i = 0; i < maxColumnCount; ++i)
58  result.push_back(QVariant::fromValue<ComboProperty>(ComboProperty::createFrom(unitNames)));
59  return result;
60 }
61 
62 std::vector<QVariant> CreateMultiplierVariants(int maxColumnCount)
63 {
64  std::vector<QVariant> result(maxColumnCount, 1.0);
65  return result;
66 }
67 
68 } // namespace
69 
70 ImportTableHeader::ImportTableHeader(int max_column_count) : m_maxColumnCount(max_column_count)
71 {
72  init_data();
73 }
74 
76 {
77  return utilityRowNames.size();
78 }
79 
81 {
82  return m_maxColumnCount;
83 }
84 
85 QVariant ImportTableHeader::data(int row, int column) const
86 {
87  return isValid(row, column) ? m_data[row][column] : QVariant();
88 }
89 
90 bool ImportTableHeader::setData(int row, int column, const QVariant& variant)
91 {
92  if (isValid(row, column)) {
93  m_data[row][column] = variant;
94  return true;
95  }
96 
97  return false;
98 }
99 
100 std::string ImportTableHeader::rowName(int row) const
101 {
102  return utilityRowNames[row];
103 }
104 
105 std::vector<ColumnInfo> ImportTableHeader::columnInfo() const
106 {
107  std::vector<ColumnInfo> result;
108  for (int column = 0; column < columnCount(); ++column) {
109  ColumnInfo info;
110  info.column = column;
111  info.type_name = data(TYPE, column).value<ComboProperty>().value();
112  info.units = data(UNITS, column).value<ComboProperty>().value();
113  info.multiplier = data(MULTIPLIER, column).value<double>();
114  result.push_back(info);
115  }
116 
117  return result;
118 }
119 
121 {
122  m_data.resize(MAX);
123  m_data[TYPE] = CreateTypeVariants(columnCount());
124  m_data[UNITS] = CreateUnitVariants(columnCount());
125  m_data[MULTIPLIER] = CreateMultiplierVariants(columnCount());
126 }
127 
128 //! Returns true if given pair of indices are valid for data array.
129 
130 bool ImportTableHeader::isValid(int row, int column) const
131 {
132  return (row >= 0 && row < static_cast<int>(m_data.size()))
133  && (column >= 0 && column < static_cast<int>(m_data[row].size()));
134 }
135 
136 } // namespace gui2
Custom property to define list of string values with multiple selections.
Definition: comboproperty.h:27
static ComboProperty createFrom(const std::vector< std::string > &values, const std::string &current_value={})
ImportTableHeader(int max_column_count)
QVariant data(int row, int column) const
std::vector< ColumnInfo > columnInfo() const
bool setData(int row, int column, const QVariant &variant)
std::string rowName(int row) const
bool isValid(int row, int column) const
Returns true if given pair of indices are valid for data array.
Defines class CLASS?
Defines class CLASS?
Defines class CLASS?
Defines class CLASS?
const std::string IntensityType
const std::string AxisType
const std::string IgnoreType
Based on Qt example "codeeditor" Copyright (C) 2016 The Qt Company Ltd.
Definition: app_constants.h:20
Info about the column as defined by the user via ImportTableWidget.
std::string type_name