Serenity Operating System
at master 68 lines 1.6 kB view raw
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}