37 auto result = std::make_unique<ViewModelController>(session_model, view_model);
38 result->setRowStrategy(std::make_unique<LabelDataRowStrategy>());
39 result->setChildrenStrategy(std::make_unique<AllChildrenStrategy>());
40 result->setRootSessionItem(session_model->
rootItem());
53 auto controller = std::make_unique<ViewModelController>(&session_model, &view_model);
54 EXPECT_EQ(controller->sessionModel(), &session_model);
55 EXPECT_EQ(controller->rootSessionItem(),
nullptr);
64 auto controller = create_controller(&session_model, &view_model);
66 EXPECT_EQ(controller->sessionModel(), &session_model);
67 EXPECT_EQ(controller->rootSessionItem(), session_model.
rootItem());
81 auto controller = create_controller(&session_model, &view_model);
87 QModelIndex labelIndex = view_model.
index(0, 0);
88 QModelIndex dataIndex = view_model.
index(0, 1);
105 auto controller = create_controller(&session_model, &view_model);
107 EXPECT_EQ(view_model.rowCount(), 1);
108 EXPECT_EQ(view_model.columnCount(), 2);
111 QModelIndex vectorLabelIndex = view_model.index(0, 0);
112 QModelIndex vectorDataIndex = view_model.index(0, 1);
116 EXPECT_EQ(view_model.itemFromIndex(vectorLabelIndex)->item(), vectorItem);
117 EXPECT_EQ(view_model.itemFromIndex(vectorDataIndex)->item_role(),
ItemDataRole::DATA);
118 EXPECT_EQ(view_model.itemFromIndex(vectorDataIndex)->item(), vectorItem);
121 std::vector<SessionItem*> children = vectorItem->children();
122 for (
int row = 0; row < 3; ++row) {
123 QModelIndex x_labelIndex = view_model.index(row, 0, vectorLabelIndex);
124 QModelIndex x_dataIndex = view_model.index(row, 1, vectorLabelIndex);
126 EXPECT_EQ(view_model.itemFromIndex(x_labelIndex)->item(),
127 children[
static_cast<size_t>(row)]);
129 EXPECT_EQ(view_model.itemFromIndex(x_dataIndex)->item(),
130 children[
static_cast<size_t>(row)]);
141 QSignalSpy spyInsert(&view_model, &ViewModelBase::rowsInserted);
142 QSignalSpy spyRemove(&view_model, &ViewModelBase::rowsRemoved);
144 auto controller = create_controller(&session_model, &view_model);
149 EXPECT_EQ(spyInsert.count(), 1);
150 EXPECT_EQ(spyRemove.count(), 0);
151 QList<QVariant> arguments = spyInsert.takeFirst();
152 EXPECT_EQ(arguments.size(), 3);
153 EXPECT_EQ(arguments.at(0).value<QModelIndex>(), QModelIndex());
154 EXPECT_EQ(arguments.at(1).value<
int>(), 0);
155 EXPECT_EQ(arguments.at(2).value<
int>(), 0);
158 EXPECT_EQ(view_model.
rowCount(), 1);
162 QModelIndex labelIndex = view_model.
index(0, 0);
163 QModelIndex dataIndex = view_model.
index(0, 1);
182 QSignalSpy spyInsert(&view_model, &ViewModelBase::rowsInserted);
183 QSignalSpy spyRemove(&view_model, &ViewModelBase::rowsRemoved);
185 auto controller = create_controller(&session_model, &view_model);
191 EXPECT_EQ(spyInsert.count(), 3);
194 EXPECT_EQ(view_model.
rowCount(), 3);
209 QSignalSpy spyInsert(&view_model, &ViewModelBase::rowsInserted);
210 QSignalSpy spyRemove(&view_model, &ViewModelBase::rowsRemoved);
212 auto controller = create_controller(&session_model, &view_model);
218 EXPECT_EQ(spyInsert.count(), 2);
221 EXPECT_EQ(view_model.
rowCount(), 2);
235 QSignalSpy spyInsert(&view_model, &ViewModelBase::rowsInserted);
236 QSignalSpy spyRemove(&view_model, &ViewModelBase::rowsRemoved);
238 auto controller = create_controller(&session_model, &view_model);
243 EXPECT_EQ(spyInsert.count(), 8);
246 EXPECT_EQ(view_model.
rowCount(), 2);
257 QSignalSpy spyInsert(&view_model, &ViewModelBase::rowsInserted);
258 QSignalSpy spyRemove(&view_model, &ViewModelBase::rowsRemoved);
260 auto controller = create_controller(&session_model, &view_model);
268 EXPECT_EQ(spyInsert.count(), 3);
271 EXPECT_EQ(view_model.
rowCount(), 1);
287 auto controller = create_controller(&session_model, &view_model);
290 EXPECT_EQ(view_model.rowCount(), 1);
291 EXPECT_EQ(view_model.columnCount(), 2);
293 QSignalSpy spyInsert(&view_model, &ViewModelBase::rowsInserted);
294 QSignalSpy spyRemove(&view_model, &ViewModelBase::rowsRemoved);
298 ASSERT_EQ(spyInsert.count(), 0);
299 ASSERT_EQ(spyRemove.count(), 1);
300 EXPECT_EQ(view_model.rowCount(), 0);
301 EXPECT_EQ(view_model.columnCount(), 0);
303 QList<QVariant> arguments = spyRemove.takeFirst();
304 ASSERT_EQ(arguments.size(), 3);
305 EXPECT_EQ(arguments.at(0).value<QModelIndex>(), QModelIndex());
306 EXPECT_EQ(arguments.at(1).value<
int>(), 0);
307 EXPECT_EQ(arguments.at(2).value<
int>(), 0);
321 auto controller = create_controller(&session_model, &view_model);
324 EXPECT_EQ(view_model.rowCount(), 2);
325 EXPECT_EQ(view_model.columnCount(), 2);
327 QSignalSpy spyRemove(&view_model, &ViewModelBase::rowsRemoved);
328 QSignalSpy spyInsert(&view_model, &ViewModelBase::rowsInserted);
334 EXPECT_EQ(spyInsert.count(), 0);
337 EXPECT_EQ(spyRemove.count(), 1);
338 EXPECT_EQ(view_model.rowCount(), 1);
339 EXPECT_EQ(view_model.columnCount(), 2);
341 QList<QVariant> arguments = spyRemove.takeFirst();
342 EXPECT_EQ(arguments.size(), 3);
343 EXPECT_EQ(arguments.at(0).value<QModelIndex>(), QModelIndex());
344 EXPECT_EQ(arguments.at(1).value<
int>(), 0);
345 EXPECT_EQ(arguments.at(2).value<
int>(), 0);
356 auto controller = create_controller(&session_model, &view_model);
360 controller->setRootSessionItem(item);
363 EXPECT_EQ(view_model.
rowCount(), 0);
375 auto controller = create_controller(&session_model, &view_model);
382 controller->setRootSessionItem(item);
384 EXPECT_EQ(view_model.
rowCount(), 3);
388 auto index_of_vector_item = view_model.
index(1, 0);
389 EXPECT_EQ(view_model.
rowCount(index_of_vector_item), 3);
390 EXPECT_EQ(view_model.
columnCount(index_of_vector_item), 2);
404 auto controller = create_controller(&session_model, &view_model);
405 EXPECT_EQ(controller->rootSessionItem(), session_model.
rootItem());
407 QSignalSpy spyReset(&view_model, &ViewModelBase::modelReset);
409 session_model.
clear();
411 EXPECT_EQ(spyReset.count(), 1);
412 EXPECT_EQ(view_model.rowCount(), 0);
413 EXPECT_EQ(view_model.columnCount(), 0);
414 EXPECT_EQ(controller->rootSessionItem(), session_model.
rootItem());
425 auto controller = create_controller(&session_model, &view_model);
427 QSignalSpy spyReset(&view_model, &ViewModelBase::modelReset);
428 session_model.
clear();
430 EXPECT_EQ(spyReset.count(), 1);
433 QSignalSpy spyInsert(&view_model, &ViewModelBase::rowsInserted);
436 EXPECT_EQ(spyInsert.count(), 1);
443 auto session_model = std::make_unique<SessionModel>();
448 auto controller = create_controller(session_model.get(), &view_model);
449 EXPECT_EQ(view_model.rowCount(), 1);
450 EXPECT_EQ(view_model.columnCount(), 2);
452 session_model.reset();
453 EXPECT_EQ(view_model.rowCount(), 0);
454 EXPECT_EQ(view_model.columnCount(), 0);
455 EXPECT_EQ(view_model.rootItem()->item(),
nullptr);
462 auto controller = create_controller(&session_model, &view_model);
465 auto views = controller->findViews(session_model.
rootItem());
466 ASSERT_EQ(views.size(), 1);
467 EXPECT_EQ(views.at(0), view_model.
rootItem());
471 views = controller->findViews(item);
472 ASSERT_EQ(views.size(), 2);
475 controller->setRootSessionItem(item);
476 views = controller->findViews(item);
477 ASSERT_EQ(views.size(), 1);
478 EXPECT_EQ(views.at(0), view_model.
rootItem());
Complex item holding mixed SessionItem types (single properties and other CompountItems).
T * addProperty(const std::string &name)
Adds property item of given type.
Item to carry concrete editable entity (e.g.
The main object representing an editable/displayable/serializable entity.
void registerTag(const TagInfo &tagInfo, bool set_as_default=false)
Registers tag to hold items under given name.
bool setData(const T &value, int role=ItemDataRole::DATA, bool direct=false)
Sets data for a given role.
Main class to hold hierarchy of SessionItem objects.
SessionItem * rootItem() const
Returns root item of the model.
T * insertItem(SessionItem *parent=nullptr, const TagRow &tagrow={})
Inserts item into given parent under given tagrow.
void clear(std::function< void(SessionItem *)> callback={})
Removes all items from the model.
void removeItem(SessionItem *parent, const TagRow &tagrow)
Removes given row from parent.
static TagInfo universalTag(std::string name, std::vector< std::string > modelTypes={})
Constructs universal tag intended for unlimited amount of various items.
Vector item with three x,y,z property items.
SessionItem * item() const
Base class for all view models to show content of SessionModel in Qt views.
ViewItem * rootItem() const
Returns a pointer to invisible root item.
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override
int rowCount(const QModelIndex &parent=QModelIndex()) const override
int columnCount(const QModelIndex &parent=QModelIndex()) const override
ViewItem * itemFromIndex(const QModelIndex &index) const
Returns a pointer to the RefViewItem associated with the given index.
Tests of ViewModelController class.
auto create_controller(SessionModel *session_model, ViewModelBase *view_model)
~ViewModelControllerTest()
const int DATA
main data role
const int DISPLAY
display name
materialitems.h Collection of materials to populate MaterialModel.
TEST_F(ViewModelControllerTest, initialState)
Initial state of the controller. It is in working state only after setRootItem.