BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
propertiesrowstrategy.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // qt-mvvm: Model-view-view-model framework for large GUI applications
4 //
5 //! @file mvvm/viewmodel/mvvm/viewmodel/propertiesrowstrategy.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 Gennady Pospelov et al, Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************************************
14 
16 #include "mvvm/model/itemutils.h"
17 #include "mvvm/model/sessionitem.h"
19 
20 using namespace ModelView;
21 
22 PropertiesRowStrategy::PropertiesRowStrategy(std::vector<std::string> labels)
23  : user_defined_column_labels(std::move(labels))
24 {
25 }
26 
28 {
29  QStringList result;
30  auto labels =
32  std::transform(labels.begin(), labels.end(), std::back_inserter(result),
33  [](const std::string& str) { return QString::fromStdString(str); });
34  return result;
35 }
36 
37 std::vector<std::unique_ptr<ViewItem>> PropertiesRowStrategy::constructRow(SessionItem* item)
38 {
39  std::vector<std::unique_ptr<ViewItem>> result;
40 
41  if (!item)
42  return result;
43 
44  auto items_in_row = Utils::SinglePropertyItems(*item);
45  if (user_defined_column_labels.empty())
46  update_column_labels(items_in_row);
47 
48  for (auto child : items_in_row) {
49  if (child->hasData())
50  result.emplace_back(std::make_unique<ViewDataItem>(child));
51  else
52  result.emplace_back(std::make_unique<ViewLabelItem>(child));
53  }
54 
55  return result;
56 }
57 
58 //! Updates current column labels.
59 
60 void PropertiesRowStrategy::update_column_labels(std::vector<SessionItem*> items)
61 {
62  current_column_labels.clear();
63  std::transform(items.begin(), items.end(), std::back_inserter(current_column_labels),
64  [](const SessionItem* item) { return item->displayName(); });
65 }
PropertiesRowStrategy(std::vector< std::string > labels={})
std::vector< std::string > user_defined_column_labels
QStringList horizontalHeaderLabels() const override
std::vector< std::unique_ptr< ViewItem > > constructRow(SessionItem *item) override
std::vector< std::string > current_column_labels
void update_column_labels(std::vector< ModelView::SessionItem * > items)
Updates current column labels.
The main object representing an editable/displayable/serializable entity.
Definition: sessionitem.h:38
Defines class CLASS?
MVVM_MODEL_EXPORT std::vector< SessionItem * > SinglePropertyItems(const SessionItem &item)
Returns vector of children representing property items.
Definition: itemutils.cpp:122
materialitems.h Collection of materials to populate MaterialModel.
Definition: filesystem.h:81
Defines class CLASS?
Defines class CLASS?
Defines class CLASS?