Serenity Operating System
1/*
2 * Copyright (c) 2021, sin-ack <sin-ack@protonmail.com>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#include "BasicModel.h"
8
9GUI::Variant BasicModel::data(GUI::ModelIndex const& index, GUI::ModelRole role) const
10{
11 if (role != GUI::ModelRole::Display)
12 return {};
13 if (!is_within_range(index))
14 return {};
15
16 return m_items.at(index.row());
17}
18
19TriState BasicModel::data_matches(GUI::ModelIndex const& index, GUI::Variant const& data) const
20{
21 if (!is_within_range(index))
22 return TriState::False;
23 if (!data.is_string())
24 return TriState::False;
25
26 auto& value = m_items.at(index.row());
27 return value.contains(data.as_string()) ? TriState::True : TriState::False;
28}
29
30void BasicModel::invalidate()
31{
32 Model::invalidate();
33 if (on_invalidate)
34 on_invalidate();
35}
36
37GUI::ModelIndex BasicModel::index(int row, int column, GUI::ModelIndex const& parent) const
38{
39 if (column != 0)
40 return {};
41 if (parent.is_valid())
42 return {};
43 if (row < 0 || row >= static_cast<int>(m_items.size()))
44 return {};
45
46 return create_index(row, column);
47}
48
49void BasicModel::add_item(DeprecatedString const& item)
50{
51 begin_insert_rows({}, m_items.size(), m_items.size());
52 m_items.append(item);
53 end_insert_rows();
54
55 did_update(UpdateFlag::DontInvalidateIndices);
56}
57
58void BasicModel::remove_item(GUI::ModelIndex const& index)
59{
60 if (!index.is_valid() || !is_within_range(index))
61 return;
62
63 begin_delete_rows({}, index.row(), index.row());
64 m_items.remove(index.row());
65 end_delete_rows();
66
67 did_update(UpdateFlag::DontInvalidateIndices);
68}